Private Sub gauss_Click() '高斯消去法 , h) N* I9 W" `1 \' k$ _Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single 2 o5 y* q0 Z7 G% Z+ W# Ii = 1: j = 1 * U) }& N5 d+ [( ?0 W# O8 Xn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) 8 P" L W( X: M" K. T0 eReDim Preserve a(1 To n, 1 To n + 1) - i7 Y" Q" E; Z7 ]7 k6 j# E% V0 ZReDim Preserve l(1 To n, 1 To n + 1)/ W4 d2 a9 o5 j: [: b
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single r. E) B. \! T# M4 [/ xReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 0 l; }$ t( U0 E" OFor i = 1 To n , k5 T3 R7 ~' QFor j = 1 To n1 i9 Q% v0 h- P- J; a7 J- F! p6 t
a2(i, j) = a(i, j) ) \+ _3 K' a7 J6 z- F# ~8 {# pNext - \$ X |4 E4 _: A5 z8 Q( L3 NNext '将a()的值全部赋给a2()+ m( N5 `$ x8 a3 R0 ]: ?2 Z1 [ z
m = 0, t5 f: \( F! Z# Q, P) U. |
D = 1, H1 F) P! ]( F' G
ReDim x(1 To n)/ O5 `. U2 @4 l c0 l8 \2 ^
Print "--------------------------------" & M4 t6 V5 Y# @9 }Print "您输入的增广矩阵如下:" 2 Y" K& \ O3 }, Q' p, CFor i = 1 To n * v& m1 B8 y* V0 G' _s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))' C$ Z, l' E: M" n# x0 p
For j = 1 To n M; Q. [* f! ]. S ia(i, j) = Val(Left(s, InStr(s, " "))) # ~: G8 u0 z5 y2 O, Fs = Trim(Right(s, (Len(s) - InStr(s, " "))))' _& S/ u) N. P, X+ _! d3 d+ W1 j
Print a(i, j);8 o+ J# ]. w# ]5 {8 \2 A
Next0 A" E7 M* Y9 B$ E
a(i, n + 1) = Val(s) ! `# P/ I# K4 X9 N V EPrint a(i, n + 1); , a$ C* R' c, W4 i( WPrint + f: ~9 B! i! [+ \Next . X( y+ j" S L* V* F) ~3 ~* r 1 T. m2 y) v$ T! o; ^1 V& gFor k = 1 To n - 1 '开始消元' R* r# L3 p5 w+ r T" @% Y8 z% A5 n
If a(k, k) = 0 Then ' K1 [ c* L1 \% wMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!". e0 ^7 d& R5 ^/ @8 V* |2 @
Exit Sub a2 H* {1 ]# U: O$ X0 D
Else ) d. u) S. e' ZFor i = k + 1 To n ( C8 e6 {( d1 ll(i, k) = a(i, k) / a(k, k)9 K6 b/ n" t2 U
For j = k + 1 To n + 1 8 T0 X4 ?4 v& a- _/ j5 q0 G7 Ja(i, j) = a(i, j) - l(i, k) * a(k, j) 8 P! Z1 s5 S3 F: X; q& c7 B8 f1 R+ bNext ( r7 D- O) K8 h C+ ONext, d/ d7 Y1 ~# D4 |- B. y# k1 P( x
D = D * a(k, k)" c4 W) }8 v% g/ w4 |' _4 \
End If9 ~/ N$ a. O2 @
Next k '消元结束 / [/ E, t- n4 T& ~$ uIf a(n, n) = 0 Then f' ~; J1 ^+ CMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" A! Q; f% F4 A5 Q$ H. OExit Sub - y- |$ I( f9 e( o& z [5 e' EElse$ U/ o2 P* u. ]$ j2 z9 c7 a* ~8 g
D = D * a(n, n) / K/ E* g5 Z, uEnd If , L5 T" l& R# q0 B& x/ GPrint "--------------------------------" 1 F5 r; `, u; o1 t, V) o& UPrint "系数行列式的值是:"; D # l. Y! M1 X6 e. ]x(n) = a(n, n + 1) / a(n, n)7 V4 W& ^ f5 g- ?1 x$ V% |. m
For k = n - 1 To 1 Step -1 '开始回代+ X9 s# a8 U' u3 F% J
For j = k + 1 To n% t6 k( w9 F1 @
m = m + a(k, j) * x(j)1 E; m/ B1 O$ [
Next j( Q/ |3 f U, b* E; z" h( h% [
x(k) = (a(k, n + 1) - m) / a(k, k)% f1 E9 c* y w# e+ i
m = 0$ z" b* p& Z$ z9 |- @1 _# j# z
Next k '结束回代3 e, W: M8 n% B% h
8 Y: g P# a( s4 @0 UPrint "--------------------------------" 8 F- ?2 z$ d3 a( s, BPrint "方程组的解如下:": R+ X6 G3 a8 W* e3 i
7 y, V- \2 U) Y e. g( `
For k = 1 To n ( [! A- K; m. E) }" R" K' @8 rPrint3 a% l: i4 o; C3 e1 k
Print "X(" & k & ") = " & x(k)% Z, s) E* x% O L0 u8 s# d
Next k G& y$ {6 V/ D* |( h: c
Print "--------------------------------" ' e3 E1 X1 H, r! {8 h; TPrint "其中各行Ax-b="7 ]2 K; |5 X, |5 h2 h- z
Print 5 L& r: ~$ F$ V- xFor i = 1 To n' ]. D' \" g& x; X8 V2 \
t = 0 ! D, j- [' W. v4 Q. ?For j = 1 To n 1 e. L! C6 h% i st = t + a2(i, j) * x(j) 1 w6 K( R1 P) @4 uNext j ( {( k5 Y( _( ^, Ot = t - a2(i, n + 1); R( g% r1 p) D; `
Print Spc(5); "第" & i & "行:"; t, ~0 f# z8 y: s0 S9 g
Print 7 I- p6 D: h |) pNext i , x& t8 v7 t4 V' G$ ~$ L * R/ y9 j: H" a# gEnd SubPrivate Sub gauss_Click() '高斯消去法5 {2 L+ R- }2 @/ h8 J
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single ; {: W0 ?( A2 T3 H4 u; T" y* Mi = 1: j = 1 5 W) f6 x+ |4 ?" q0 ^ S+ [* R1 Xn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) ! z( G3 R7 D3 |& I" jReDim Preserve a(1 To n, 1 To n + 1); o3 N- \/ V% f3 K5 m
ReDim Preserve l(1 To n, 1 To n + 1)) U+ r, M+ C! C6 w# @- o; i4 \
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single " G; C8 x( t5 r( gReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()( R" k. x& N) J/ S/ `8 @6 q* o- a
For i = 1 To n9 d6 [" e0 P* C7 b
For j = 1 To n' t8 e8 X! k" y2 @, r
a2(i, j) = a(i, j). r6 @: {: ?, \
Next , N% g5 z u) w0 b% _/ dNext '将a()的值全部赋给a2(), H7 g) k& P7 c( ~
m = 0 & ?- U3 y+ L0 _) @" VD = 1 % r/ m/ M# ~2 yReDim x(1 To n)- r* Q: X5 e( w7 t, R, m: r! F$ k
Print "--------------------------------"' U; _: L; B0 s# _& @8 w
Print "您输入的增广矩阵如下:" ( {" s' M& J7 @) V" C5 nFor i = 1 To n) r, `5 K3 H0 R( |3 G7 q: \2 u
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) % S/ A7 v# \+ N: J6 `4 oFor j = 1 To n3 R2 ~7 s x( K2 b$ |
a(i, j) = Val(Left(s, InStr(s, " ")))% W2 R, l3 o9 c* w% e
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) $ s& ~- B/ k- z- B4 [, FPrint a(i, j); . y7 ^+ w, q- S/ Q/ h R( ?Next V( ?# j* T" K% j/ U: N( c' T
a(i, n + 1) = Val(s) $ w# c" r, [, UPrint a(i, n + 1); . Z4 A" y7 h! Z# z! cPrint 5 n) G( j" g/ k/ S8 XNext $ Y/ Y2 u) m" ?" Y* j % [! D: e W% l; sFor k = 1 To n - 1 '开始消元0 E7 N o( p& K D6 r( r5 W
If a(k, k) = 0 Then8 D. d* `. \0 O6 r& P: I+ u; {* Z4 V
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" 2 _1 D; H1 M1 p7 M; x! d6 E7 a2 YExit Sub1 g, C' V$ B, @; P
Else) |: j( X, m0 R/ N+ z
For i = k + 1 To n 8 d6 |8 z4 f9 Q8 T. ml(i, k) = a(i, k) / a(k, k) / Z2 E+ T J* aFor j = k + 1 To n + 1 ( D6 q* x; v% _7 h+ O: Sa(i, j) = a(i, j) - l(i, k) * a(k, j) 6 v! Q# n3 V+ u. V8 X7 E9 {Next; P( z# K0 O3 ^) \+ a6 U+ {7 }
Next $ k# v2 a' g% e _2 \5 W, kD = D * a(k, k)3 K0 J: B1 _6 H+ q' ^9 i- A+ M
End If% o8 K% O* |* z* e8 z
Next k '消元结束0 A3 D J$ l9 a+ l" ]/ L
If a(n, n) = 0 Then $ D' r/ ~. t$ I* s( |% i3 aMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"" x0 ]3 j) W7 i
Exit Sub1 N- ~0 K* i. X& l4 m
Else . ]2 x2 k% l, v6 ~4 C @D = D * a(n, n) 9 ^- k& f1 S. M0 |, L6 q; A$ _End If! [3 e1 G' M/ P
Print "--------------------------------"0 y0 P7 J9 E4 T5 k# b% {7 ^$ C5 r
Print "系数行列式的值是:"; D / g9 \! ~' _2 H: G( H4 s, cx(n) = a(n, n + 1) / a(n, n) 1 }! E! p: i, I4 Z# L+ bFor k = n - 1 To 1 Step -1 '开始回代+ G' b8 ?3 ?) {4 ~' M/ {5 ~- O$ G
For j = k + 1 To n% h& r' w- f c( D! x
m = m + a(k, j) * x(j)- l' i D- K# }
Next j! H f* s. a! s! j: n
x(k) = (a(k, n + 1) - m) / a(k, k)( H( t6 i$ { m2 `
m = 0 : C! g9 ]( s. W# _5 gNext k '结束回代; I; T2 a- A: |0 N& `) B0 Z
7 ]5 C4 ?& a3 ` N' J
Print "--------------------------------"6 C2 |8 W% }5 u/ e3 D+ d! t
Print "方程组的解如下:"- l( r0 @ ^( @% U% K2 |9 b2 A$ M1 u
7 K- i. l$ a7 h4 }; [
For k = 1 To n % `: d2 M9 E* K# H6 tPrint( K' j+ G4 J+ j* q) ?$ e
Print "X(" & k & ") = " & x(k) 2 q. ^ B( i& e8 L# \Next k . Q: X6 r4 [7 _" rPrint "--------------------------------" : h9 R/ h- a, Y* x' N/ T& G! v& lPrint "其中各行Ax-b=" 9 d8 K( h( k6 O, j9 XPrint A9 w$ Q5 i. a+ Y8 f
For i = 1 To n, [# q h, t2 P ?3 B6 d9 }: X
t = 0' r6 t3 F, n2 k, Z
For j = 1 To n & W G3 Y$ f: H0 C' o5 q; e$ {; }t = t + a2(i, j) * x(j) 7 d, U* ?2 ~) y) \) D$ X, @& N, JNext j; n: S+ R' @ u6 u ^
t = t - a2(i, n + 1) ! q0 a' m2 E' M; A8 q* K; U4 U+ _9 h2 FPrint Spc(5); "第" & i & "行:"; t & g4 J+ c% w! d. F3 IPrint $ ]* Y& ~9 Y1 _4 YNext i$ D8 ?: `& Z3 H3 x1 U
- Z; W S- V- K1 G, ^9 Q
End Sub