Private Sub gauss_Click() '高斯消去法 % Y' u" f7 F' u5 h7 G. Z5 B uDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single4 b+ P x3 c# r% r
i = 1: j = 1) W) g* |' I! N5 |5 @ ]3 U' q
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))* J; M; _$ p* q1 X
ReDim Preserve a(1 To n, 1 To n + 1) 7 b: [1 h. B4 E2 {% IReDim Preserve l(1 To n, 1 To n + 1)3 t, Z$ @" h; I# C; q/ T, f# x
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single5 w$ J I6 b) h
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()8 q7 K& g, `+ G' s3 [" \( W' X
For i = 1 To n* _$ b% C* }( I1 v
For j = 1 To n ! v5 t- a- T) d _% o ?& la2(i, j) = a(i, j) 1 q+ W4 `5 x$ R. m3 PNext ! K4 d, s9 Z; E- } h: HNext '将a()的值全部赋给a2() 9 f, F- ^0 P& P0 h6 ^- h- lm = 0 - D, W3 y' [) v! r! E7 C, aD = 1" n$ w6 S! N4 P) }
ReDim x(1 To n) 9 ^' O% \" d5 i9 w' Y+ L; S' ]Print "--------------------------------"" o, d" ^6 j4 v. g! r
Print "您输入的增广矩阵如下:"* k4 D8 @' w u9 O! ], S; L( r( I
For i = 1 To n% k; L& h# ]8 J. z! Y, B7 q3 [
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))( \( q8 h" M6 ]" M$ d! Q/ q
For j = 1 To n$ Z4 G2 l% i9 F* [3 d
a(i, j) = Val(Left(s, InStr(s, " ")))- g3 G, D0 u2 G) j1 X- Y
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) / N* h3 R1 f) R5 ]! t1 L& RPrint a(i, j); 2 e0 f; v' b4 v1 p7 hNext X% k' p9 E, o9 d2 ~* Fa(i, n + 1) = Val(s) 2 v; D w! Q" Y7 a% g3 y. WPrint a(i, n + 1); # z9 y3 k. r$ y7 B) M" h N! hPrint$ s4 i( S, S8 H
Next , [/ `- @6 S2 m: ~ % r& B1 E. l. ~6 K R2 ?For k = 1 To n - 1 '开始消元# t) z8 T2 {2 i/ `; @
If a(k, k) = 0 Then ) g# Q, c$ q! p/ B) [7 zMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ! d$ p4 x ?% @# g; P, n" L0 rExit Sub" J; G' j, R- Q. @, s7 A
Else ! z- ]% t0 a- _# [0 H# V, b6 g7 nFor i = k + 1 To n) w! Q0 x8 r# V, P: P$ G A
l(i, k) = a(i, k) / a(k, k) $ [9 ]9 g) b* ~* { I0 iFor j = k + 1 To n + 1 4 D2 k, ~6 n# K& T, n' g9 }) ra(i, j) = a(i, j) - l(i, k) * a(k, j)* m m; D/ n5 `7 z
Next 8 q* m( c& S0 @# v% ]Next* r2 l) O3 @$ {2 `
D = D * a(k, k)$ E' o4 D1 P8 Q4 Y
End If2 U9 K, _3 t( r
Next k '消元结束% O4 ^# D9 m& P
If a(n, n) = 0 Then Z+ ]0 H7 c/ i3 P2 K' _MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"1 {+ |6 i) r& n4 y" r
Exit Sub) e4 y- x6 M' r5 F5 E" K- A" X
Else q3 V. K3 |: _3 B2 R
D = D * a(n, n)5 r# C% Z8 Z1 c
End If ( R# E0 @" w6 e9 S7 S' ZPrint "--------------------------------" + o# b. R8 d! Q( q7 `3 rPrint "系数行列式的值是:"; D " v: `" F8 e6 c6 Tx(n) = a(n, n + 1) / a(n, n)$ {6 I) r! y+ n' I: X2 u4 |0 T
For k = n - 1 To 1 Step -1 '开始回代 7 L9 j* g- N1 s5 |- FFor j = k + 1 To n' N4 B b/ }) {0 w" X1 \
m = m + a(k, j) * x(j), Q& f3 j) Q3 M' U
Next j 0 q4 t2 c8 [2 o8 G7 ?x(k) = (a(k, n + 1) - m) / a(k, k) + j3 k+ V) Y! j' um = 01 P" e( c+ `2 T C2 _
Next k '结束回代$ h9 f* E& h1 l `
' }/ `. p5 {" e& HPrint "--------------------------------" # u+ Y3 P; p7 |8 w/ [Print "方程组的解如下:" 9 s1 y0 t p$ G# P# x3 L g- E$ |: E
For k = 1 To n& V& |* l! a# \4 F; G
Print - h8 x5 g% d' }# \$ fPrint "X(" & k & ") = " & x(k) & Y& `* _2 G% v3 e" @9 cNext k 2 S- R& n. q( ]6 ]# }1 N6 FPrint "--------------------------------" . O- N" \2 a- IPrint "其中各行Ax-b=" : l$ |, S. R! F" T LPrint 8 x; n/ D1 O7 a- ?& r _For i = 1 To n 2 U4 s: k$ a: E1 ~t = 05 {. Y* Y" E1 ?9 b! F
For j = 1 To n ( B6 K1 n" j$ ~0 s( T' j1 I. n3 jt = t + a2(i, j) * x(j) : l& [9 e0 W5 [! I" j+ SNext j5 I) C/ S e( ?
t = t - a2(i, n + 1) $ k# z3 ?3 q KPrint Spc(5); "第" & i & "行:"; t% Q/ I7 G2 k1 b! t- e @
Print * x. F$ h9 u# g, Y" x2 f3 Z# W: h3 zNext i4 {6 Y9 y5 Q* i( @. Q
4 y v4 M5 m0 F6 zEnd SubPrivate Sub gauss_Click() '高斯消去法 4 A# J( G) G! b( \+ b( xDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single 4 ^; U9 u6 e* @0 ~ Ai = 1: j = 1 " ^& i3 X5 e# V5 H) i/ Kn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) 7 b) a$ v! U1 p( fReDim Preserve a(1 To n, 1 To n + 1)8 ^+ n3 ] n; o) c
ReDim Preserve l(1 To n, 1 To n + 1)5 T) e' ^' B0 w& e4 ~3 j
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single% f: q `' c# Y `% q) V# ^% w
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(), N+ ]. C6 }- F1 d( ]
For i = 1 To n0 E/ d7 m( V+ ?. _
For j = 1 To n i, P8 a c5 s! P ]a2(i, j) = a(i, j) ; u+ y" X: ^: C% Z& _9 E. `Next8 _ e+ w! A O/ L4 B
Next '将a()的值全部赋给a2(); A7 B4 N" y7 V2 Q# t' f
m = 07 \ q& t! H3 R0 N3 A+ ^
D = 1 0 {$ q2 b8 A7 k' k6 F/ `ReDim x(1 To n) / L& Q" h+ R. c) \& {- GPrint "--------------------------------"; t/ ?6 k; E* v. c
Print "您输入的增广矩阵如下:" 8 Z( R' t: ] G/ f, P7 JFor i = 1 To n" z) U) o! T7 a$ i, A
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))/ m6 y0 t) a( ?4 C: }
For j = 1 To n" g; W, w D% Z8 H
a(i, j) = Val(Left(s, InStr(s, " "))) , ^! U# o1 g5 n. Q- T6 f* T- C) _s = Trim(Right(s, (Len(s) - InStr(s, " ")))) 9 I- l% T1 A9 m: j0 o2 D" o% |Print a(i, j);) o2 J2 V8 i8 l! O# w2 a: P& I
Next. {& d+ }1 @, K: ~$ `
a(i, n + 1) = Val(s)9 e2 C( ^' V) y7 [- F( T/ K- Y
Print a(i, n + 1); # X0 }! t) S8 JPrint 3 u# s0 g; D& H) g1 BNext ; t: u( j7 r2 G 2 y1 I4 M# ?: e+ W3 bFor k = 1 To n - 1 '开始消元 ; l, W9 \1 Q4 {: b' yIf a(k, k) = 0 Then& o/ ?2 Q7 ?% c4 W/ u# ]
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" 6 d/ r$ f3 h3 M0 O4 Z" f% ]Exit Sub 9 m$ G1 q$ w/ S n6 l- fElse * w& r8 S" V$ t" ]% g$ fFor i = k + 1 To n; Z1 C- h$ y# F3 \
l(i, k) = a(i, k) / a(k, k) # A2 S% h' }5 M+ hFor j = k + 1 To n + 1 5 u4 i# B2 i0 p) ]6 [& Ua(i, j) = a(i, j) - l(i, k) * a(k, j) 6 o# z+ ^' v) r) ONext ; H0 O6 ], K: t, w0 q4 HNext + k3 E' I) ~, OD = D * a(k, k) 5 i" }/ ]1 u* uEnd If 0 m( q) x' P7 }* n$ sNext k '消元结束+ C7 n0 L# R z# e( f: V; g; R& A
If a(n, n) = 0 Then5 u" f; s% {1 a4 l) z1 A
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!": o4 j0 H. P, X. O
Exit Sub ' u0 {( _8 | O7 j( F ~1 F8 kElse 6 C3 P$ t5 \% ]# rD = D * a(n, n) . c t( d3 E! BEnd If# X m9 W7 {1 g% k1 t) e
Print "--------------------------------" ) q; z: f8 e* B1 [# C" fPrint "系数行列式的值是:"; D8 \ r# S' v& R1 U5 D
x(n) = a(n, n + 1) / a(n, n); r( t9 @' x# X. v
For k = n - 1 To 1 Step -1 '开始回代 ) i: r+ G& Q. w. G6 }9 rFor j = k + 1 To n ; n6 }* t$ H/ O! `: [# n6 Zm = m + a(k, j) * x(j) ( u! c! ]. J4 T) L1 j: }7 ~7 r5 c. WNext j 1 T$ b% P. q1 X& ]/ c# M/ ?x(k) = (a(k, n + 1) - m) / a(k, k)# L" H. t5 c5 m0 s
m = 0 * A! ~7 x8 C2 T% fNext k '结束回代# Z2 u( V% J4 h
9 ?, K$ Q" a) g$ b! O
Print "--------------------------------"0 M* |* x- N) d X( ^* }/ A: l6 L
Print "方程组的解如下:" 0 s( d7 `" ~. N7 ?& S( v / i+ {8 |4 j1 ]& Y4 o! d' m pFor k = 1 To n 5 r# \' ~$ { i6 k% w9 MPrint0 X( t* C, L1 e2 b* y
Print "X(" & k & ") = " & x(k)# O2 Z8 P, x; m7 A; {
Next k 2 k" j9 W8 p( Y) S: o8 NPrint "--------------------------------"7 T% `0 v7 ]' q# k Y
Print "其中各行Ax-b=" ! y+ L1 P, M T M; }2 I" n7 vPrint / g. R! j( B/ P5 K0 M3 G* A( I$ JFor i = 1 To n5 t ^' c# _; p% u( P
t = 0# Q) }' E8 _% e1 \
For j = 1 To n / w. W) X( f7 z9 ?0 m" m+ yt = t + a2(i, j) * x(j) 4 k; s; G; P0 y# NNext j 7 o& u8 M! F1 h4 E/ Gt = t - a2(i, n + 1) & @7 K$ {4 N/ o4 \Print Spc(5); "第" & i & "行:"; t ; ~. G D% a3 c$ Y2 W3 n, V2 GPrint " _7 h# Z0 M! d7 ~, PNext i * s) L) x& @: `! ~ q: g 5 T4 {7 K( w* s" U8 ^End Sub