Private Sub gauss_Click() '高斯消去法 : z3 ^: q1 I9 N: K5 oDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single ( O; R1 }# H0 ^. p! ]; Ji = 1: j = 1% N& |% L+ ~* U( I& L
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# x; U0 B7 b- n2 a
ReDim Preserve a(1 To n, 1 To n + 1); a7 w9 s/ e1 k" U* L( M
ReDim Preserve l(1 To n, 1 To n + 1)! y t1 _8 o" M6 `6 A, k
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single: i% \: V/ c8 J! |5 R; _# N
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 6 n' A D& @+ D( tFor i = 1 To n0 X6 c5 T6 \0 Q0 V- H6 n n$ L8 {& \
For j = 1 To n- y. J' f/ n# ?7 i& H }
a2(i, j) = a(i, j) / o0 \; s1 d; t3 V( qNext+ N0 k; N& |! \
Next '将a()的值全部赋给a2()" Y! G9 x( b" e' Y4 S+ Q2 S, {- V# L
m = 0 . V4 _! w* P# x0 S: e m, zD = 1, `3 A. H. [9 g T: K
ReDim x(1 To n) ; [! u# J9 X8 ]9 N3 zPrint "--------------------------------"' C3 u) X: w4 J' e
Print "您输入的增广矩阵如下:"6 A* [' l( }( D z7 Z3 ^
For i = 1 To n/ \. {9 d2 P6 b6 l& e4 T
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))* r' Y& T$ x' {7 n& G0 g: _
For j = 1 To n 0 l$ y* s; z* d( N+ [0 [a(i, j) = Val(Left(s, InStr(s, " ")))8 h. i) m- D0 W( A$ m( B& b6 e
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) ; Z" B( `, v# p1 i" NPrint a(i, j); 2 p" v* E& D% C4 @9 V3 k/ KNext ! v3 i/ h8 f+ b/ S) I- v' `a(i, n + 1) = Val(s) 7 h# u% j: [6 K% J5 [4 @5 d3 y7 PPrint a(i, n + 1); , v3 I" l) v7 R. dPrint$ p+ P" W+ ^7 {1 E# J4 R
Next( W, Z/ \) P7 Y8 i \+ q% T
' Q, Y4 x' |( H4 {+ L8 D2 k, d6 eFor k = 1 To n - 1 '开始消元 * Y1 O2 m& i; l5 k4 E/ @1 ?; q9 P, BIf a(k, k) = 0 Then7 P' }9 f M* f4 ^$ ?. K3 t$ J
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ' o' i- M8 Y+ l9 ~' b+ fExit Sub1 |9 f9 S& V/ C6 x
Else - Y8 C' t! O0 a" G7 x& {) GFor i = k + 1 To n6 W) }6 H/ ?- z0 o
l(i, k) = a(i, k) / a(k, k) $ n P' E, D& ^8 xFor j = k + 1 To n + 1# V! y1 M1 n; A5 P5 K
a(i, j) = a(i, j) - l(i, k) * a(k, j) : J) L: a0 y3 n1 u1 ^( l4 nNext! x6 z+ x8 x1 V
Next # S& u# h" c! |' pD = D * a(k, k). }( c& O4 [5 h+ `* C6 {* T
End If 9 P+ B1 ?' X: G7 l$ LNext k '消元结束 4 O: O: `. w# M5 d9 }" j0 AIf a(n, n) = 0 Then ' U+ P* A2 A) t4 C7 e8 h1 eMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"/ U( g: ]' W" c$ l1 H5 K
Exit Sub/ |* K3 q$ o- W7 c# f( ?0 X
Else- q6 ~* g2 U c ^7 Q7 q4 o8 U2 d8 j
D = D * a(n, n)" r% A$ k% j& `4 A1 v0 B
End If/ E* H: l/ V1 r* C
Print "--------------------------------"! D; o$ X+ Q4 S5 d2 j
Print "系数行列式的值是:"; D - _! I6 l2 ]4 N+ rx(n) = a(n, n + 1) / a(n, n) ; t9 f$ J% [1 ]0 f1 p6 z i0 wFor k = n - 1 To 1 Step -1 '开始回代 + h% D% ]- y8 n# R: i: pFor j = k + 1 To n / a& R* s) P) e" R5 Rm = m + a(k, j) * x(j) - E) a4 i7 M& I1 I/ E3 }* X- q6 W1 A" NNext j % [- B0 a: w$ j$ A( O' K: jx(k) = (a(k, n + 1) - m) / a(k, k)$ e! n* j- u9 x% f0 P- Y5 ?
m = 0 # l' I2 j6 N, m8 k2 vNext k '结束回代 5 p- P. i! l R - B; V: _; \1 [; ePrint "--------------------------------"' w7 b" o a; x2 d$ Z7 S" f n& R
Print "方程组的解如下:" 5 I/ x) ~; P: |3 _7 t5 @* j: y: r6 Z! e4 G+ T: r
For k = 1 To n! _# H" T& h- _+ \% M- l. e$ _# a7 c
Print/ k2 B% Z- k( j. ~! d$ Z$ Q4 N
Print "X(" & k & ") = " & x(k)8 t0 w$ a' {. A8 u
Next k% X) e, K/ C0 r. B
Print "--------------------------------" ! c" k/ K5 V; m$ z$ ZPrint "其中各行Ax-b=" $ g+ M& h: W2 }+ v* tPrint 9 n' U9 F+ L, R1 fFor i = 1 To n ( ~6 D) j6 z4 A @. M+ Tt = 0 : c4 z! ]7 Z" U) F8 @5 ?For j = 1 To n7 X/ ^* Z+ G3 n
t = t + a2(i, j) * x(j) , K* R! a1 y/ H8 ONext j ' B1 ~% Z& u7 E( v* J3 [t = t - a2(i, n + 1)2 E* _3 b; S! h
Print Spc(5); "第" & i & "行:"; t/ w' R, ^3 w5 Y( D# n, ~! |# C
Print ' i2 A, `9 O7 vNext i/ B8 o; t& W$ _, W" a2 X
2 E& F2 ] F% {5 g! rEnd SubPrivate Sub gauss_Click() '高斯消去法0 \* h, H# S% J) @9 N8 _
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single+ [! ]7 D. R" _6 a- e5 |! Q
i = 1: j = 1 $ T3 a) I- @. F' Kn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)): c2 @& L; ?# p) b' r. H; k
ReDim Preserve a(1 To n, 1 To n + 1)/ R9 ^7 j4 S7 O7 q% A, L
ReDim Preserve l(1 To n, 1 To n + 1) n) Q$ {" E$ E' t4 Y
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single. f/ {' [# t# w, O
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() ' ^7 m$ M0 G3 J/ O; \% [: kFor i = 1 To n+ S6 c$ Y7 M2 q. d. @
For j = 1 To n " X; z. w" ^% z" Q q+ @a2(i, j) = a(i, j)) N0 `( j5 z7 x: {: W4 p
Next* K7 ~8 Q* s- k- d4 T) M* D
Next '将a()的值全部赋给a2() 1 j$ ^. M- O6 @+ Z, s+ T" rm = 00 J3 F( k( t7 M1 h8 b: F
D = 1 5 {6 d* A6 I4 m' S& yReDim x(1 To n) , f; ?5 S3 ]# x9 |% |7 ~Print "--------------------------------"/ R4 m* d. Y, I3 n
Print "您输入的增广矩阵如下:" % Q/ V5 G0 h8 q' r% m7 q1 AFor i = 1 To n C( e' b1 l8 z- o3 x ~
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) ( [" n- S, y/ \# u" _1 i1 \0 XFor j = 1 To n* y2 ~' `4 A! v* Q4 `0 l) m- D
a(i, j) = Val(Left(s, InStr(s, " "))) 3 N- O4 B8 D0 x# W% l' S( ws = Trim(Right(s, (Len(s) - InStr(s, " "))))+ e6 F' ]- T8 n; b- r: u# O
Print a(i, j); " |3 K( I9 ]$ [: e, vNext8 V q" @1 T1 q# l8 {
a(i, n + 1) = Val(s) . P4 l- O: s" ~6 e, KPrint a(i, n + 1); & Z5 ~, I$ r; y: q- ePrint ' `/ l7 X2 u8 X! k, \1 tNext / w1 r6 x' I& j2 f) k7 ~9 J/ O: F ! i% c4 H8 G3 n" qFor k = 1 To n - 1 '开始消元2 F5 J# v3 \7 |" g& u, \3 K- d
If a(k, k) = 0 Then / i) X8 N+ z. PMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"8 `. n, g: m1 y n3 ^: N
Exit Sub6 A2 B- F1 U3 y8 u
Else $ ^4 {: d5 I1 w% TFor i = k + 1 To n. h/ P3 l N) Y4 `
l(i, k) = a(i, k) / a(k, k) . q$ h: p' r, r2 _* DFor j = k + 1 To n + 1 5 U$ h& B! }, w: L8 u# b9 V6 ta(i, j) = a(i, j) - l(i, k) * a(k, j) 4 o5 c6 [2 W5 ]. |6 N: nNext$ W) ~5 p4 Q5 I- K: h T( N! V* o6 {, O
Next ) h/ I+ F9 z7 z2 {% }$ w7 q5 D6 ED = D * a(k, k)- V0 c0 W y$ w# ]: j
End If a7 i% i/ v8 g; n
Next k '消元结束 # z6 h9 E" L1 D# V- gIf a(n, n) = 0 Then. } P/ K9 u+ |" n: z2 O0 p2 R7 V
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"" N3 i2 e$ o7 S: I( g; A( I" {- O
Exit Sub " y9 s! I. B" F# t A6 dElse+ o, D* x O) b! U
D = D * a(n, n)6 [2 i; K: w, N. }, E, `3 b
End If 8 Q7 w; x8 a( D! LPrint "--------------------------------"4 L6 \! p( {. n% r& e. M
Print "系数行列式的值是:"; D7 O- I( p6 j) Q
x(n) = a(n, n + 1) / a(n, n) ! c, H8 x0 A, X) |( k& vFor k = n - 1 To 1 Step -1 '开始回代, |4 L9 n+ O1 \6 o7 k i, ~8 _
For j = k + 1 To n9 `0 ?9 I& l5 [% H
m = m + a(k, j) * x(j)) R. E/ m# d+ n+ u9 z
Next j ! z5 @; \+ r4 Dx(k) = (a(k, n + 1) - m) / a(k, k)/ ?& ?, ~2 V, r$ H
m = 06 i6 l0 ?* M0 m9 }) K8 x
Next k '结束回代 8 w( O3 F& G! O. t ( U+ Q1 b" ~6 ~4 e: vPrint "--------------------------------" 9 K) k5 o5 @+ i0 pPrint "方程组的解如下:"( t) ], L# r$ `, S2 j+ |
7 Y: c" f1 K( U" i2 t
For k = 1 To n 0 T# _' F+ t& N" ]5 \& f& hPrint ' y0 ]; ^" P: F7 DPrint "X(" & k & ") = " & x(k)* N+ n0 u, i9 |. O$ F
Next k ' t- [& B: O. @* S; iPrint "--------------------------------". D. d* j0 r9 ^+ P& I# L
Print "其中各行Ax-b=": Z1 I _, r8 i! x- U8 g
Print' T- ~2 M) M. a
For i = 1 To n. O1 W* A, \; o* u% w
t = 0 # w. [/ ~& y. E4 RFor j = 1 To n1 ]) H, a9 p- Y2 |8 |
t = t + a2(i, j) * x(j) ! h# r3 a$ V3 w* g2 [Next j - N- G: ~3 H# Z# x' kt = t - a2(i, n + 1)' C8 Z# S; X' k* [$ e, \+ C) a
Print Spc(5); "第" & i & "行:"; t: [% w" Z: p; i: i0 ^6 Y5 T3 C" O
Print, G2 s& X& n7 P! g; a3 w5 `2 H
Next i) W8 _8 k/ k |. _