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