QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 17564|回复: 5
打印 上一主题 下一主题

[讨论]高斯消去法---这是用VB编的

[复制链接]
字体大小: 正常 放大
god        

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
. P- k, S( _; `; o* _' EDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
. b0 ^7 y; t" R' [' n) |; |i = 1: j = 1
9 U9 [5 K0 }2 m4 f2 o/ O3 \, ?5 Un = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
. Z8 G' y0 l8 H% \ReDim Preserve a(1 To n, 1 To n + 1)
# [3 v3 s# x9 c/ G3 d$ c! RReDim Preserve l(1 To n, 1 To n + 1)
* W7 L* \8 J  ]Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single) e8 E0 M2 q8 }; b) s+ O$ r
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
6 G: s7 ], _- L. EFor i = 1 To n
& O% v5 q' k, K: g1 nFor j = 1 To n
. q  a3 z: X& y) i# {- ya2(i, j) = a(i, j)
  D  e+ E3 G. D3 C7 m, SNext
: s; Z! _! L0 U5 s( M1 v8 MNext '将a()的值全部赋给a2()0 W) D7 d5 W) {* r- G& v! ?, w( \
m = 05 |/ d/ o( e- Y8 I* s) e
D = 1" ~" L$ M! e) A; q# Y( B
ReDim x(1 To n)
+ P' @$ A" E) b# p- {+ fPrint "--------------------------------"
2 @8 d+ m! W* u" yPrint "您输入的增广矩阵如下:"
; ?' X# k- E& K; j# \0 e% k. YFor i = 1 To n, Z! U, \! l: y  A
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
6 D; U$ C5 v' S1 }5 `! [( ]4 V- gFor j = 1 To n: J! m0 H' P4 W. l$ D( t. r
a(i, j) = Val(Left(s, InStr(s, " ")))
  B8 C' F; G: X# c6 p* Ss = Trim(Right(s, (Len(s) - InStr(s, " "))))
: D  H9 b! P2 H% j- n% vPrint a(i, j);6 n. z4 X5 {& q2 W/ a4 b, p* K
Next
) r/ H$ ]6 I5 |( va(i, n + 1) = Val(s)# @! C1 i7 e0 A! L; d# c, j+ W
Print a(i, n + 1);/ D, R* W, M6 y& b) A$ V$ c& [' P
Print
% H; l4 Y9 Y" X2 j- O7 k4 @Next# f% x2 u1 k; Z2 C8 P; {
/ m7 Y, c$ |1 ]0 ~5 v
For k = 1 To n - 1 '开始消元
8 r/ J4 C/ F" v7 b* a2 }/ TIf a(k, k) = 0 Then
2 z; f1 T4 G- R0 [MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"9 {/ P8 T+ |9 A" e! V) F+ d/ x, s
Exit Sub
' z5 [# c6 }* N; U6 j+ v! Z6 NElse) ^# S$ G" Y, ?) x$ r
For i = k + 1 To n5 x- e$ ]+ z6 C% U, L) q
l(i, k) = a(i, k) / a(k, k)
, v6 J! K6 v  ^& u) d4 dFor j = k + 1 To n + 1# A5 s* }, f/ i% c6 G
a(i, j) = a(i, j) - l(i, k) * a(k, j)6 e' G- |2 O5 R( m1 X2 n, C
Next4 x2 m' K# v: a  ], ?: U
Next
+ H4 n3 |7 S/ _D = D * a(k, k)
6 O$ k5 X/ x) V! `7 S% {' q0 eEnd If6 s! X2 J( q* R: G
Next k '消元结束5 {% G# x7 |1 R! ?. w+ Q) f/ c# X
If a(n, n) = 0 Then
4 Y$ J! x3 w8 f1 w/ D1 ^9 S$ z* H' p; RMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
4 u0 l4 p. E0 u! a' I3 r6 w! ^Exit Sub3 }6 u. x4 e0 ?
Else/ ?. g, o9 ~% \
D = D * a(n, n)
9 A6 F; Q' \, r1 l& f, @: p" F* ~End If
3 w. B! I# r8 b4 mPrint "--------------------------------"+ t/ a( T5 o0 U3 ^" n. g4 x0 n
Print "系数行列式的值是:"; D  F! |# ^* }; Y5 [& N& |/ e/ ]
x(n) = a(n, n + 1) / a(n, n)( n  K$ ^( V6 X& b
For k = n - 1 To 1 Step -1 '开始回代, v2 y& m+ g) F* O- |0 n
For j = k + 1 To n: M3 E9 V/ h3 h
m = m + a(k, j) * x(j)
% B; H: @% q4 T, s8 M9 ]Next j- f6 p8 T" A* k/ t
x(k) = (a(k, n + 1) - m) / a(k, k)
6 `- l6 `6 L: j2 Mm = 0% U( R. I1 L" b/ ?" E" a% s
Next k '结束回代: m, N8 G. b' k* z1 n

7 H6 H7 E% w$ c$ E$ j! bPrint "--------------------------------"0 y3 L7 H7 p( r3 x9 {* a* H  T: o
Print "方程组的解如下:"9 [, s( `+ v3 z% u% ?6 S* i5 Q1 m6 [
+ E% }2 }1 G' v! G
For k = 1 To n
+ K+ T" Z  T+ n( v# z- \  EPrint; U' f; v8 X, I! K3 e& w. h- P
Print "X(" & k & ") = " & x(k)* \/ p* f% q" ~- R% e5 a
Next k
1 q& ]) j1 F4 {  F( E6 @Print "--------------------------------", o( \7 P# }% u" E1 f1 p
Print "其中各行Ax-b="6 `& }- ], V: Y  F, O/ s( Y
Print& y8 K- a4 A7 \9 C1 u3 s. G
For i = 1 To n0 @+ s2 J7 `% w) K
t = 0
) h1 m$ p/ Y5 I2 F3 L9 XFor j = 1 To n+ M$ N" h1 ^2 L5 c4 M
t = t + a2(i, j) * x(j)2 V+ h& |0 O1 v5 K3 Y1 ^0 K% h
Next j& P0 p3 m, n- Y1 V7 V' t
t = t - a2(i, n + 1)
  n/ g5 X: n5 U" J7 Q: c1 `Print Spc(5); "第" & i & "行:"; t2 b8 `+ O' Z6 r8 k: d2 i* n% Z
Print
0 X  A# Y0 U/ E  pNext i, j$ C$ |2 `( j6 a, o

0 N  a0 r/ K0 `1 K) I' J1 S1 CEnd SubPrivate Sub gauss_Click() '高斯消去法
" _% B8 ]) V) J) j8 G& WDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single4 [1 z$ w) A- U6 y$ e  ]
i = 1: j = 1
7 P9 c# q+ y% J) j# Y) f# Tn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
6 {6 i' e8 |5 l2 I/ X; t( PReDim Preserve a(1 To n, 1 To n + 1)
* Q- W! a; X; m' J7 U2 a% v% vReDim Preserve l(1 To n, 1 To n + 1)
! {* H' W* ^( V* mDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
' A& v; z! O: \% C+ f  oReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()- O7 v: Y3 P! E% T; n/ x
For i = 1 To n9 G5 ]7 w" \9 O! _) G
For j = 1 To n! B4 e2 r8 I4 J/ x. W/ l6 d
a2(i, j) = a(i, j)
$ \  ~4 t! [: N4 w, R9 j2 w0 sNext0 D0 ~4 Y1 X; [: l1 t( d
Next '将a()的值全部赋给a2(). c$ {* p4 z" ?" z7 h
m = 0
  s' ~9 q5 Q* Y! {6 E9 s# cD = 1% M/ ^" @6 w( p/ \
ReDim x(1 To n)
/ K/ C' R2 E' K7 a  `Print "--------------------------------"
3 t+ l3 [$ }; u0 X  vPrint "您输入的增广矩阵如下:"
" o1 q: \4 }3 \  C% c' TFor i = 1 To n
, }* @6 ^# o' x: }# _* \2 k7 xs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))- t7 U, V2 X( w  E5 z. s6 U
For j = 1 To n+ i/ e/ ]* _) f3 {' z2 d2 i$ H2 J3 u
a(i, j) = Val(Left(s, InStr(s, " ")))
& e, \2 |4 z! d3 C4 b  Ls = Trim(Right(s, (Len(s) - InStr(s, " "))))
# n6 b" @" k! ]! B( O( }) @% mPrint a(i, j);
6 M+ p- o2 |- E4 \! ]7 XNext9 N+ g; X* V/ u7 g, \
a(i, n + 1) = Val(s)  T  k% |- B' S6 ^. W
Print a(i, n + 1);! ^  K: @" w  R( R% N! L( {" u
Print" d8 r1 N( I. y8 T. B' P
Next
% [! E2 u. r4 b2 B/ v: B6 g- B5 b
6 C  \% Z2 O8 M9 VFor k = 1 To n - 1 '开始消元4 Y  n  r: y8 Z# E  M5 B' I
If a(k, k) = 0 Then: T0 |6 I0 {2 s" L8 i4 g
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"* Q* S6 }/ L: R! d: N: f
Exit Sub8 j9 x9 Z* C! c& a( b0 Q* f+ ^3 v
Else/ `5 m, t  ^! X/ h
For i = k + 1 To n. d3 ~) u: R. a
l(i, k) = a(i, k) / a(k, k)
1 ?, R9 @, N4 N5 ~' |2 O9 _$ tFor j = k + 1 To n + 1/ t; Z( Y. S" H; O
a(i, j) = a(i, j) - l(i, k) * a(k, j)2 M+ O9 h7 W9 V1 V' `7 v
Next
: x, i% ]6 \& F2 H& w( l' N5 N8 hNext
/ v1 ]5 \; z3 s* y6 i0 v# h( KD = D * a(k, k). ]: m6 W) G; A) v* E$ D
End If( h8 \+ q4 \" m) i2 f. F. g! X
Next k '消元结束
4 J( p" C# l' }4 p5 z$ u- A8 XIf a(n, n) = 0 Then
, ~( ?' Y# d( a7 ~( g: ]MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
2 }8 g" A! W- W  _9 r; k% s+ PExit Sub
$ d) L2 q2 O3 ^& AElse  w" j* F* N, `1 `! K0 j# O. y
D = D * a(n, n)% u: e" q; ~4 Y; D2 Z& ~: o
End If
/ A3 h$ m. t: C! z* }$ APrint "--------------------------------"
/ e2 A+ y. m# MPrint "系数行列式的值是:"; D; N# F- x$ D. }1 x  w8 j+ `
x(n) = a(n, n + 1) / a(n, n)
. T3 j: H8 r9 jFor k = n - 1 To 1 Step -1 '开始回代
* l9 o3 G3 ?2 G4 j* Y4 x+ nFor j = k + 1 To n
( J2 h4 O, E% N3 z8 _m = m + a(k, j) * x(j)/ O8 z% k: w( |6 z  v
Next j/ s% |5 I& F0 |, G
x(k) = (a(k, n + 1) - m) / a(k, k)
' J/ s5 j# R" d% Z2 o5 O% t. am = 0
; ]( s  W. z$ n, xNext k '结束回代! h; d+ B4 S, T8 j+ U1 q
# d2 x* c% o# `, D
Print "--------------------------------"
6 ~( x3 `) {; u3 EPrint "方程组的解如下:"  y3 F9 e5 M7 V5 L+ D, b! m

  X: v: P6 r/ x  |For k = 1 To n( E1 v( o- j( J9 T" J
Print* L. b+ C* e: y% R
Print "X(" & k & ") = " & x(k)1 o; _+ ?* N# r2 O6 ~$ d# ~& @
Next k
8 y  y2 X: B1 i2 E1 Y4 z4 XPrint "--------------------------------"
! D  ^% F, @+ D" r( F! V9 MPrint "其中各行Ax-b=". f: m! j1 ~$ p4 |( n% i& S
Print6 q- Y* b# T. Q3 e3 a' C5 a
For i = 1 To n
% M2 Q+ A6 |; }' Bt = 0
; x2 |% X! ?3 Z0 _For j = 1 To n
6 i7 |- u) _) z0 I" kt = t + a2(i, j) * x(j)
7 ?3 d. ^  F# z" K1 {, ]. ]! l& ~$ t, hNext j
  @( i* n2 L: Z, ^& `5 Y- B, f' Dt = t - a2(i, n + 1)# P0 D# y& H# t9 C3 Y2 t- o$ g
Print Spc(5); "第" & i & "行:"; t) k3 G8 q! G: v% a1 X3 p! T
Print8 |. Y, a! ?' ]. u) J8 x% Y0 b
Next i8 u* C* Z3 A% n3 @& u1 k/ f& o

8 }( R9 k2 R0 xEnd Sub
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
如果我没给你翅膀,你要学会用理想去飞翔!!!

0

主题

3

听众

22

积分

升级  17.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

0

主题

3

听众

24

积分

升级  20%

该用户从未签到

新人进步奖

<p>您的程序我没看&nbsp; 但是我用FORTRAN 90 编过 </p><p>唯一注意的是高斯消法是有局限的 </p><p>1计算量大</p><p>2不能克服病态方程问题。</p><p>不知道您注意没有 </p><p>另我有FORTRAN 90&nbsp;的选主元高斯消去法的程序。</p>
回复

使用道具 举报

4#
无效楼层,该帖已经被删除
zqyzixin 实名认证       

1

主题

5

听众

1818

积分

升级  81.8%

  • TA的每日心情
    难过
    2013-10-14 10:21
  • 签到天数: 78 天

    [LV.6]常住居民II

    社区QQ达人

    群组小草的客厅

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-10-28 02:38 , Processed in 0.775255 second(s), 73 queries .

    回顶部