Private Sub gauss_Click() '高斯消去法7 M$ f1 |% R2 L0 s3 s( y
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single" B! B! S5 `# C1 I+ W) x
i = 1: j = 1# Z4 U) F8 I2 G- y% [
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))6 U5 v' X! p' N& e# \, ^
ReDim Preserve a(1 To n, 1 To n + 1) 0 b) O" ?+ I( G. e) vReDim Preserve l(1 To n, 1 To n + 1) , M. _5 l1 a( P- _8 s9 z) EDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single6 @$ x. ]/ @) P1 e, o
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 9 |2 x+ R4 _- l. b( b4 sFor i = 1 To n 2 s D" c7 [! a6 K1 E. \3 kFor j = 1 To n ' R+ a- M2 n5 F6 B9 pa2(i, j) = a(i, j)4 ~: L' x1 N1 _$ P% c& W/ a
Next1 t, A* c2 {/ R! p" N+ W0 l
Next '将a()的值全部赋给a2(): k3 [- J, }2 a+ d! B( g8 C
m = 0( `+ r A# q8 [3 P) V/ C
D = 1 + A' s! B2 @/ g. q) M% @' x- FReDim x(1 To n) 3 o; E$ S5 z; IPrint "--------------------------------"0 u" r. }9 I! |. G
Print "您输入的增广矩阵如下:". H9 \6 M$ d& k! ?
For i = 1 To n % { \% r7 Q% Gs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) 9 X* x; z4 ^& J" x$ X$ n$ jFor j = 1 To n , T/ l4 J P- V! \a(i, j) = Val(Left(s, InStr(s, " "))) - c c% u9 [1 r& ]2 Ns = Trim(Right(s, (Len(s) - InStr(s, " ")))) - m Q% R$ r, y4 RPrint a(i, j);0 H0 B& e8 C9 J/ C r9 v
Next % B4 I9 E Q& C5 O4 l) b+ Y2 }9 @a(i, n + 1) = Val(s) + Y, r0 N9 D7 x, w% k/ C4 K" c% FPrint a(i, n + 1);+ _1 x. \& L+ y( V- z
Print * C+ B+ Q6 {8 }" I. B+ j) I0 h0 iNext8 ~* \# l3 J% o8 w
" A) W$ ]7 c2 w- RFor k = 1 To n - 1 '开始消元; e. `1 m0 F0 R- a6 k. U1 c
If a(k, k) = 0 Then ) m+ |) V) x, D& uMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" - [7 G4 [3 k( ^: V; E% wExit Sub( |9 n7 X7 j, F3 D: k( O) m# q
Else - C* }+ C3 d2 D( gFor i = k + 1 To n. z1 `8 Y9 }; I$ @3 M3 `
l(i, k) = a(i, k) / a(k, k) 0 @& E' M3 c1 y7 t* k. w; nFor j = k + 1 To n + 13 p. S% w8 P" F% q0 D8 {
a(i, j) = a(i, j) - l(i, k) * a(k, j) \* f. Z1 e/ p9 V& t. fNext0 n; ^) k U9 i# B" x5 w
Next5 s$ J @1 Y4 e7 }2 ]
D = D * a(k, k)7 s7 Z- ~+ w a$ m
End If ( t9 f. U+ E: r0 ?, k- SNext k '消元结束# Q4 k# _ x2 |4 @7 N
If a(n, n) = 0 Then) U, z* Z6 h+ S0 T" j) Z0 S9 b! T, q, v
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" # o! \% _3 I# h( S0 z0 X- L9 P4 tExit Sub) l1 E g5 X/ p& E$ M6 ^8 b1 ?
Else- ]4 h$ k8 \( `% S; s' u
D = D * a(n, n)/ i2 f; T5 I4 r. w
End If+ L g3 P. m6 d& O
Print "--------------------------------" + b% ?! ` `0 H, J3 R& SPrint "系数行列式的值是:"; D % l$ U0 b( Q; t0 V* |x(n) = a(n, n + 1) / a(n, n) & L( X( g6 r7 U% @2 h& R9 }& R8 ^" C: CFor k = n - 1 To 1 Step -1 '开始回代 & h( r+ s) E' N) j+ MFor j = k + 1 To n/ q8 G/ q9 t0 v$ V
m = m + a(k, j) * x(j)5 p; @6 w/ Y+ l; i+ D% v$ ~4 |
Next j! Z. Z) }3 M+ z: q0 I7 z* p: z
x(k) = (a(k, n + 1) - m) / a(k, k) & y5 d! f/ j* s/ E5 O4 w/ `m = 06 ~: a/ m. `4 i2 q' `2 u
Next k '结束回代+ K8 N6 k8 n7 G
( g9 e J8 K f
Print "--------------------------------" $ R# Y/ d `8 ^* {1 E3 UPrint "方程组的解如下:" 0 ], Z% X, k; n" B + M& d% c* D" d, f8 h. G! M) N) UFor k = 1 To n 5 y4 @1 J; r6 x v6 k4 b# _2 k$ H9 PPrint; O0 X) A& ^8 F
Print "X(" & k & ") = " & x(k)8 r% m# @& ?6 ^9 K/ S1 C R4 C, a3 ?! l9 h
Next k " r* t* l7 D& j- K- \( p- ?+ yPrint "--------------------------------"# Z; B( a, ?5 J
Print "其中各行Ax-b="4 F! @5 K& O$ S. l+ M& ~! C
Print & m* [) _# g: m' sFor i = 1 To n( q. g' h8 o( [
t = 0# H& g' u, Q _' D" {, ~& G
For j = 1 To n5 k: b v" ^( a* g; w. d/ P" w9 t p6 u
t = t + a2(i, j) * x(j) 6 N: o8 ^" U4 A) h- _; f {Next j 9 {* ?/ o( e- s( Et = t - a2(i, n + 1) 5 @% G; H/ q3 f: ?Print Spc(5); "第" & i & "行:"; t; N5 Z6 r7 [$ j* t' p- w9 N; O
Print % I" M( |$ R6 \: WNext i3 } }1 f. K5 e/ s6 f
7 {& P, M* y7 I9 i- E# m. l
End SubPrivate Sub gauss_Click() '高斯消去法 / @5 [" l" a6 y, ^6 {$ X- dDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single . k. d& \' N: \$ Fi = 1: j = 1 . I7 d+ C- Z* mn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))0 P/ `! V( f/ Y2 U8 l, ~. ?
ReDim Preserve a(1 To n, 1 To n + 1)$ K( W3 z/ L: y# _8 f! L
ReDim Preserve l(1 To n, 1 To n + 1)( X6 B% x, Y5 A, k: \/ h3 o
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single 2 w. E3 X3 A! w. q; q/ gReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() $ U$ |- U: v( v% x7 OFor i = 1 To n& _, T1 A; O2 }9 y" i: ~3 n& t7 d% i
For j = 1 To n 5 |7 K! o3 ]- m0 |8 g4 H8 E; da2(i, j) = a(i, j) * w0 T4 T+ N6 c4 z sNext( T; ~+ Z o) Y2 D
Next '将a()的值全部赋给a2() 3 O" b+ x# q* e8 @; A. Wm = 06 |1 K1 \( u" @; V
D = 1. ^. A$ A7 f2 H/ {2 y) R4 V1 ?- H
ReDim x(1 To n)3 K( z! i9 O% x; w7 ~7 C
Print "--------------------------------" ; w+ M6 h; a; G5 Y/ h9 |; R' XPrint "您输入的增广矩阵如下:" : s: b4 B; D2 U8 K5 ^% oFor i = 1 To n5 h8 T) E, `4 H7 y- U
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) . h5 a* E/ t3 @9 QFor j = 1 To n+ U8 O' y) v4 B* p
a(i, j) = Val(Left(s, InStr(s, " "))) 3 s% U+ l" h% o1 v7 X* Vs = Trim(Right(s, (Len(s) - InStr(s, " "))))- e+ A* N7 C8 o% S6 A
Print a(i, j); " s4 _6 A: S& E% o/ s# m9 G9 g% INext) c5 \' j/ s4 Y% M& n3 {
a(i, n + 1) = Val(s)9 v9 y8 S- @* J8 V- x) |" }. h
Print a(i, n + 1); 6 I; E1 s3 [/ a# V6 pPrint . g; K0 G6 j- xNext ( \; w# |9 F$ w% K ! b. t" _/ J4 |& ?7 u5 GFor k = 1 To n - 1 '开始消元 $ s" n3 u4 ]" d6 B: V4 W2 e( EIf a(k, k) = 0 Then ( Y9 Z' f. l4 O# z1 UMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" 7 v0 N2 d3 w5 k' ^* B2 G5 V xExit Sub6 M+ P* P/ I" P, O% b$ v# b
Else5 z0 O2 V0 \& W/ t
For i = k + 1 To n. J6 k$ ]. z9 Y9 R
l(i, k) = a(i, k) / a(k, k) k/ M' |) ~. A- R8 XFor j = k + 1 To n + 1" _8 J! i/ g. s! y! a0 Z1 m5 ^
a(i, j) = a(i, j) - l(i, k) * a(k, j)( N0 y% [8 }* d9 k- o) @4 t
Next4 d5 q! d4 j4 L$ _8 A' E
Next ' B* V, ]% D2 X+ }. nD = D * a(k, k), S0 Z& _+ n9 q& ^
End If ' M' F! O) @7 S5 B) l% s, DNext k '消元结束 " T0 O1 F$ _) Z% Y' N5 S! PIf a(n, n) = 0 Then 6 ~4 ?. e) \' U& O* e# U5 Q5 V. E" tMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"0 G1 I, t% F8 s
Exit Sub , [: g' ^! m$ h" \Else / z6 A+ O& {" _0 j3 U* XD = D * a(n, n)/ D3 Y2 a3 Q; L- z/ l
End If ( _- a5 \7 n6 kPrint "--------------------------------" ; u$ H8 M! ?/ L! [1 oPrint "系数行列式的值是:"; D - o+ I( ]4 j8 _/ _4 Bx(n) = a(n, n + 1) / a(n, n) ; C; H4 M( H% U' q; RFor k = n - 1 To 1 Step -1 '开始回代 * v z- v2 g! H9 H- ~" jFor j = k + 1 To n' K+ z/ ]6 I- c/ x! {6 Z! F
m = m + a(k, j) * x(j)8 ~& t* }1 N1 w9 {4 v5 l' h
Next j % `6 Y# A* C; m9 P1 Dx(k) = (a(k, n + 1) - m) / a(k, k) / |8 Q6 r# L r" d; M1 c Xm = 0 ) ^* k4 M- F h0 Z3 O. nNext k '结束回代$ V3 B+ m& Y7 I- P3 h6 e
8 f. i0 p1 z* y: l/ a# M/ S& gPrint "--------------------------------" 2 b) u6 d3 H; o! n$ sPrint "方程组的解如下:". A' }' h. o; ^- N( J6 N9 X% L
6 B) ~- j5 @( x' T2 B, N# x% B' z% rFor k = 1 To n( i9 N6 w) F& A9 ^( ~7 v& X6 l$ e
Print , T- f# C* K' O% JPrint "X(" & k & ") = " & x(k), D( T( i* V- V1 S# ^2 h* `2 C" A$ n
Next k4 L* F" n* g8 p2 F
Print "--------------------------------" - C0 L0 n7 X1 k( x/ w! @Print "其中各行Ax-b=" - t |/ y$ E$ f+ t4 w/ |Print ( d8 `, C9 e" bFor i = 1 To n # w5 m' g( p8 p" l6 pt = 0 ! C& b! ?5 D \& f. @, vFor j = 1 To n ' D- p4 O2 v' u; L) ?0 @% O( nt = t + a2(i, j) * x(j)2 ?: M5 ^$ c x/ P: z
Next j ; _2 ]* Z4 l0 Z5 Ft = t - a2(i, n + 1); W0 B+ P0 s. A# s! ~" L' h0 H
Print Spc(5); "第" & i & "行:"; t9 K C4 G$ K8 z8 u% P8 S
Print! `: g5 ]6 l# u) P
Next i" a j* T; K5 Q4 Z