Private Sub gauss_Click() '高斯消去法) S% m' s! a; c0 a4 d& W! T$ ?( L1 q
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single ' a5 g! v1 \$ c! y7 n4 ci = 1: j = 1% X; \3 `- {- L2 @+ z
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) ) _6 t9 |% m( x+ l ?8 tReDim Preserve a(1 To n, 1 To n + 1) ( ]: z' W- E; b6 K6 @ReDim Preserve l(1 To n, 1 To n + 1) ) ^4 S) ~7 q- K$ aDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single: d, ^) ~2 W1 t2 F* r
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() ! R! p" O+ q2 R1 WFor i = 1 To n - ^. T5 n+ i$ m) rFor j = 1 To n % X: ]2 s* s' r; ya2(i, j) = a(i, j)6 v5 T6 I7 f2 y* _
Next& ]( [2 M6 p, ~! t6 t7 s
Next '将a()的值全部赋给a2() n' F- A" @( _+ n9 \( q) }; {
m = 0 {; C/ s1 }3 B
D = 19 z; f% r) [4 }; C3 A
ReDim x(1 To n)2 h. ?3 T$ N* o9 H0 l
Print "--------------------------------" 1 r5 M/ L Q( X n3 n) X6 kPrint "您输入的增广矩阵如下:": A; [- _: I5 t V2 C, @' w
For i = 1 To n+ O4 L2 |9 R" v. b9 o& w
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) : T1 s f, f+ i mFor j = 1 To n; `# u" s3 B' W# w, K; `3 L3 ?
a(i, j) = Val(Left(s, InStr(s, " "))) ! U$ ^9 B p$ n- m- I' Ss = Trim(Right(s, (Len(s) - InStr(s, " ")))) U- F/ f* ~' ~: c1 ^
Print a(i, j); * _7 x$ Y! L$ H! B: DNext- Q: W+ E' y, z5 @. h/ t
a(i, n + 1) = Val(s)7 ]( k, U( [+ r+ v6 q
Print a(i, n + 1); 4 r6 q5 e* w9 t0 J* z9 KPrint - P; Q$ w3 w9 b3 Z/ f8 cNext+ x1 Q* t# Q' y
2 g& w. u4 o7 H5 W1 c+ ~' ~0 dFor k = 1 To n - 1 '开始消元 + Y8 k0 }8 z5 Z! }! TIf a(k, k) = 0 Then , q/ p6 j% B. Y/ gMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" " l* |6 B' i# V; GExit Sub 6 P: b2 @' z' s' e2 YElse 8 j) Y# _$ c8 r' ^: e: [For i = k + 1 To n ! m8 _) ^8 O, b5 bl(i, k) = a(i, k) / a(k, k)) |1 `8 s p& [& N
For j = k + 1 To n + 1 k# p. Q5 ~5 x8 u0 X
a(i, j) = a(i, j) - l(i, k) * a(k, j) 6 T( d1 n# W7 s+ F: Z" s' \1 M. qNext ' e7 I7 D, e: E) FNext 9 ^8 S( c B5 t) ]9 G; Z' n# M8 xD = D * a(k, k) 3 ?, W5 y& X& @' QEnd If8 L9 o- b! w6 ]4 x& B
Next k '消元结束' [1 f6 \) N6 J+ @& H3 U
If a(n, n) = 0 Then , E8 } m9 e4 U) o2 hMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"7 E) \5 C6 t. [0 h+ }( O# _! E; P
Exit Sub R4 \- g9 v1 t4 ]( q9 m9 }8 A( E: B
Else$ L/ w/ z3 `7 S2 K# c2 U) C# Q
D = D * a(n, n) . U, w) B* _. A2 x# ?' w! JEnd If 6 q5 m/ A. |: hPrint "--------------------------------"" m/ R/ C7 a7 t
Print "系数行列式的值是:"; D 2 d$ B! ` y- ~4 mx(n) = a(n, n + 1) / a(n, n) 1 T0 D0 E( i# A! JFor k = n - 1 To 1 Step -1 '开始回代% r0 `. y: I2 n( G1 e, r0 _4 W6 R' t
For j = k + 1 To n 9 }0 @9 \% c6 j( H# k' N/ Zm = m + a(k, j) * x(j)/ G" g# k$ P; m- ?
Next j3 C U5 N. Y+ e
x(k) = (a(k, n + 1) - m) / a(k, k)8 E, R7 `- K8 q9 V, A5 [: q
m = 0 ! J6 z- a+ k. g* s2 ANext k '结束回代& ] r$ M" b( W1 D/ B# v) h
4 f1 m! g9 w( h0 ~7 \" F
Print "--------------------------------" , g# b% N# p0 h2 ~Print "方程组的解如下:"6 S. ^- u% n6 b- g
: b+ o/ i. S% Z% g
For k = 1 To n `1 j; P) s3 b2 K" k2 b% \/ I9 }
Print 5 H' j( r% a2 C1 w2 U3 z; rPrint "X(" & k & ") = " & x(k)6 [# W# _ l Q) {9 d
Next k 6 z* h0 V% u' k" N+ O; q4 GPrint "--------------------------------", t6 X+ p [5 d* j5 J6 ?7 Z% S& b
Print "其中各行Ax-b=" 5 y3 D. \- J* Z A/ i$ Q+ Q% ePrint* _& s7 T. T( E b: T& q) b9 y( e" {
For i = 1 To n# F* U' T- ]4 H2 d
t = 0( }5 D, e5 L: Z6 `
For j = 1 To n3 r0 H4 D- }6 k9 k Z b
t = t + a2(i, j) * x(j) 5 V$ H# I E; n6 c" K$ l3 }3 ~) a; XNext j O. B" y, M4 s# p' W& m0 J- Gt = t - a2(i, n + 1)/ H- f9 q% p5 H/ r* @/ |% B
Print Spc(5); "第" & i & "行:"; t* y& `* f+ f- k5 I3 @- a
Print 6 v$ d$ R7 L Q* b" O, tNext i ! X# G9 I) N# u6 F# G3 r5 F7 {7 |' \6 H$ O4 \1 _& o- _
End SubPrivate Sub gauss_Click() '高斯消去法* y( N6 `) V9 W! \8 Z
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single # p7 g2 B+ |5 `- @! ?i = 1: j = 1 , m9 I {: N1 Sn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))- o, Z! j+ M I7 Z* o% {
ReDim Preserve a(1 To n, 1 To n + 1)9 `* R; C5 S) V; ?# K# t* n Q
ReDim Preserve l(1 To n, 1 To n + 1) + E7 E# r% |6 I1 H ]Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single : y. c. i4 E/ d5 b' wReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() % w3 f! ?; C, k" V/ r' ]7 {For i = 1 To n : U8 |% y. [' F; j1 V: g1 f2 kFor j = 1 To n " L! h" A9 ]/ o ~4 h' Ka2(i, j) = a(i, j) - d- }* c& z3 s. {Next& a) D- y! l( R7 ^: Q$ B5 T4 u
Next '将a()的值全部赋给a2() T; r5 x7 \% E
m = 0 * H7 \# w+ N: _; tD = 1 3 d" o" W3 ]9 t, M& H4 h3 mReDim x(1 To n)$ ~1 w3 W. e1 J# R' b8 F; x
Print "--------------------------------"! d5 x3 t' x1 D+ b0 C
Print "您输入的增广矩阵如下:"; a/ ~/ l; \( b8 q ~) F
For i = 1 To n1 t1 C0 @0 q4 S8 C
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) . J! S; E# X) ?% v& v; T( \For j = 1 To n ! V& Q9 x1 ?: l% d$ h+ j C+ qa(i, j) = Val(Left(s, InStr(s, " "))) 6 u2 p5 R! D- B! Y" ~" \# es = Trim(Right(s, (Len(s) - InStr(s, " ")))) & Z! G6 V0 c; x6 uPrint a(i, j);1 q& T# V6 h4 T) h( P8 e/ Y
Next! }5 \! I4 u8 z+ x
a(i, n + 1) = Val(s)1 o' s* V4 x7 A2 D5 B/ w( R. M& w
Print a(i, n + 1);1 e3 s7 v/ E$ V4 ^) p8 s+ c
Print # \1 t% i; F& Z' t' V$ GNext 0 o6 P* {' I, G# ~6 R8 ^3 T) q# K4 |- C1 G( \& Q
For k = 1 To n - 1 '开始消元 2 @6 F" S% r3 v; ~& x: lIf a(k, k) = 0 Then H; |* [6 B% e; {MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" + v+ B+ T' H. HExit Sub+ U) j* ^- q V: m$ z+ @# ^8 m
Else% ^( J# e& M5 a5 Y% g) K! R7 U
For i = k + 1 To n ) G# k$ e- o Y: B, Yl(i, k) = a(i, k) / a(k, k) / U% L: `9 Z3 m, T: OFor j = k + 1 To n + 15 i' C5 [6 Y" f+ w# f' a! b8 f/ `
a(i, j) = a(i, j) - l(i, k) * a(k, j) 3 }+ `0 _. N6 s6 R" z$ P8 K3 h) `: H/ ^Next( i% H7 a0 B1 C- C: n
Next8 g/ v% ]- j, G! \/ P
D = D * a(k, k)# R* J2 j* ~8 z; z9 l" _& g" S. y! K
End If+ Y" D" [6 N) T' [! u8 q
Next k '消元结束1 S9 q' _$ A$ m* ]" M& Q
If a(n, n) = 0 Then) F6 q e* F' S& f1 l
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"! [" L& y) P0 m3 p& h# Q% T
Exit Sub- i' ]$ B6 Z( P3 _7 A
Else. _ T9 C r* x- Z3 ^( [0 \5 i" n
D = D * a(n, n) 3 Y# y$ v8 }, M( `3 a, @' }% [End If ) J' O5 v3 m3 ~+ o% ?! gPrint "--------------------------------" # q$ u( Z h0 a' ~# _( p% a8 CPrint "系数行列式的值是:"; D 0 \$ b/ w N, H7 T) vx(n) = a(n, n + 1) / a(n, n)" g: [' l' Y& r/ [8 {' e: @
For k = n - 1 To 1 Step -1 '开始回代$ ~" l7 {9 @7 v3 p0 }9 l
For j = k + 1 To n % J/ b. g/ a0 um = m + a(k, j) * x(j)# }- `1 F6 [; c9 z4 G, ]
Next j( e: ?) _1 Q$ J0 ?; T. |
x(k) = (a(k, n + 1) - m) / a(k, k) ) r$ i( X: h. G* ?- Ym = 0: z6 a/ v5 A) Z) y$ U2 t3 ~
Next k '结束回代 - a" }/ E% u# X, X+ G, i( G) c; ^8 }0 L0 y/ ] T
Print "--------------------------------"# Q% V l( H4 B; K7 F
Print "方程组的解如下:" E- h, u, H1 R# e) h% l
0 {3 Y0 j8 t: t; d6 s: k7 U4 y
For k = 1 To n* S- W! D$ G7 h
Print7 y, ?6 S# N7 F
Print "X(" & k & ") = " & x(k) 3 ^( [% f9 k1 p+ c$ t# `9 c1 hNext k 3 \1 Q# r. G0 K; u( RPrint "--------------------------------"6 `8 t" T8 s8 m
Print "其中各行Ax-b=" * P# Z! p W {' m) C* MPrint " Y% o3 v2 Z" j+ ]4 @For i = 1 To n' t6 }( q0 I6 ]8 H- u- p7 E! D U/ @ B
t = 0 9 o4 F4 f( W' h3 g2 S* j' GFor j = 1 To n ) d0 V+ y2 u- D! |* b( C5 |" e! [t = t + a2(i, j) * x(j); g; O! \- z. Y5 A) w N
Next j- R' j, F6 \- C4 f
t = t - a2(i, n + 1)5 W* M+ |% ^* U
Print Spc(5); "第" & i & "行:"; t0 v% }6 F2 j7 i: k5 k- E( l
Print ' q* B8 K$ e( o- X5 e) g! K1 ?5 Z YNext i5 h2 \% V( ]- u9 I