Private Sub gauss_Click() '高斯消去法 # T6 W9 V, p) T Y& s. W0 aDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single - i2 S+ L) @# O8 m0 P. hi = 1: j = 11 _( m# n- l8 w( g
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) % c! s& K0 p/ j& ?ReDim Preserve a(1 To n, 1 To n + 1) 6 }1 q7 v v; h) {. ~& H$ I+ oReDim Preserve l(1 To n, 1 To n + 1); Q! r) W) `4 n7 w* R q
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single/ ?7 Y2 w+ X! V1 Q4 \- [; C# P
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() / o6 g! P( W0 e, E* v, w7 JFor i = 1 To n 7 d+ T) ]' H7 ?) R7 ?" RFor j = 1 To n1 b2 n9 F; `! W: M0 _! J
a2(i, j) = a(i, j) $ k) {) Q( l( o# J0 E/ B7 vNext . _3 g, Q* N6 M5 F# xNext '将a()的值全部赋给a2() ! w9 [. Z( r* g" |7 `4 Gm = 0; u9 F* @2 j, ]( x- c* b. B4 Y
D = 1' M# s! L7 j% w/ N, r2 h3 j
ReDim x(1 To n)9 b0 o$ T! n) U
Print "--------------------------------" 5 `2 z0 R/ ^, a3 J. |6 PPrint "您输入的增广矩阵如下:" . \; A4 H) L# Q& ]0 eFor i = 1 To n d, e, U- O- w5 I F6 \# I& _s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))% e6 u; I' u4 P+ Y) ], w8 Y
For j = 1 To n7 l! J# ~$ q L, X
a(i, j) = Val(Left(s, InStr(s, " "))) ^& A' A5 n: O( os = Trim(Right(s, (Len(s) - InStr(s, " ")))) 8 I( p# v5 N$ [& yPrint a(i, j); # r/ ]5 |0 Q0 M2 eNext6 w3 s$ a3 ?- @1 i, h" V! z
a(i, n + 1) = Val(s) 9 j4 D% m' ~0 ZPrint a(i, n + 1); 1 s. s( K3 m& y9 O; |3 A6 y! APrint3 [1 R3 J/ [5 U$ w! T
Next 4 w/ p( {/ G. s T; Z+ L7 N8 [: w: ?0 \7 S; _
For k = 1 To n - 1 '开始消元9 _3 ]& I2 j* o$ K4 D# E; }* w: a% V
If a(k, k) = 0 Then7 K* _3 ^) c3 {
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"; s3 P: T/ V4 H) r* h8 d
Exit Sub 3 I q3 T2 p; U! Z$ E1 A& {- c; sElse" x. }1 e% Z2 \; A \
For i = k + 1 To n+ A5 {" \. D q# X( E1 h0 s& \
l(i, k) = a(i, k) / a(k, k), I/ M& E2 l+ {
For j = k + 1 To n + 11 R5 u. @$ O! u2 S, e, j
a(i, j) = a(i, j) - l(i, k) * a(k, j) % p+ Z1 v: \ \/ d! UNext 1 T; x8 U( z' w2 y: w( JNext 1 f2 j$ t" q2 v4 f1 z- b& y& [D = D * a(k, k) 1 E, V4 Q8 ]9 I# J& H$ Y2 N: bEnd If + W" E% E7 Z+ tNext k '消元结束 8 C; x- N" H& ^If a(n, n) = 0 Then 7 u c0 W6 C7 c- v* MMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" 6 J& S( g _& x/ C/ j1 dExit Sub. N) Q3 e2 y7 y0 K, t: S, K
Else % {5 m! k) `0 y1 L9 b; X, ^D = D * a(n, n) # D. T2 T# t- c( \% jEnd If 9 s! x* a; t m2 w% I& D* uPrint "--------------------------------"; [ ?" `" g! g1 I9 _
Print "系数行列式的值是:"; D ) l1 B) X% h! g, E" _: f. fx(n) = a(n, n + 1) / a(n, n)* D, C% y C; J( R, o6 {9 j) E( R
For k = n - 1 To 1 Step -1 '开始回代9 a+ ]+ z# N; J8 m& M& z2 Z6 F
For j = k + 1 To n " c+ g& X1 `$ J# d2 om = m + a(k, j) * x(j) % L$ I. X) _$ E. o$ MNext j 1 x+ p% I ^% d- u& k3 ^% y1 Mx(k) = (a(k, n + 1) - m) / a(k, k) 4 A. _# N5 G' H/ U# {1 P( ~. n6 L+ Sm = 0& F: S5 a' m" |& B+ t8 g% ~0 F
Next k '结束回代7 m2 P" @8 E$ M+ }. B0 h
8 Z5 s: C$ \9 G8 ~ _Print "--------------------------------" ! ~5 a! S% x+ YPrint "方程组的解如下:"0 l& ], _0 r4 \$ d% a& b) q# }
- z. M7 J4 [/ a& {
For k = 1 To n + |& t- G0 h; M* r/ x* w* _" O! ?0 fPrint * X2 Y9 J4 t l9 ^, d" kPrint "X(" & k & ") = " & x(k)1 B# ^& I n8 e1 D# ~% F% b8 o
Next k' c1 M* p( l6 M7 c7 p( V
Print "--------------------------------"; l J2 m% I/ J9 n% @9 u1 `
Print "其中各行Ax-b="" J/ ~/ j: M% g# `+ i5 ], U
Print 6 G5 O4 T, p0 f6 }3 V, ^! yFor i = 1 To n ) o0 l% R: J' c) [/ e; H4 u* T3 a/ o# _t = 0 ( k6 B! n) `. _# AFor j = 1 To n 4 h6 s8 G+ U+ `$ [, w* y0 P7 w1 Vt = t + a2(i, j) * x(j)8 k9 F, P( f+ Q! [/ U
Next j ) M, ^4 \ d$ i4 |7 [4 U- It = t - a2(i, n + 1) # ?3 n6 ]9 q6 PPrint Spc(5); "第" & i & "行:"; t + Y3 M' f, N8 X# |) K, nPrint& C: C0 O) T0 y$ y& ]: h
Next i) ~# N$ ~3 f! D) b) }8 K$ ]! s- i
' M- ~3 v5 m4 F6 m8 G. }End SubPrivate Sub gauss_Click() '高斯消去法 $ t j& @5 @+ rDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single ) k! ]( g# r+ e3 vi = 1: j = 1: q" P$ V9 }* s6 f1 Y2 p7 `0 W
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) # Z% m% W% b) [: R1 XReDim Preserve a(1 To n, 1 To n + 1)7 ^" k( b! T# R) E2 O
ReDim Preserve l(1 To n, 1 To n + 1) . p1 j5 L/ W# F9 v1 @Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single * `, {# J9 J, Y9 W' r' k9 xReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 9 ?6 `: x+ d3 ZFor i = 1 To n* r# w/ [3 ^- ]6 P) L, g9 i
For j = 1 To n# L# J1 ?, N* a) D3 h
a2(i, j) = a(i, j); s! I, B$ j# C( [- l& V0 ]
Next" O+ j& M/ [: ^; D: f
Next '将a()的值全部赋给a2()# C j4 [: ]/ ?( ?" t
m = 0/ E7 m0 ~; v9 {
D = 1 5 l; S7 R, Q/ P, LReDim x(1 To n) C9 `0 S) x8 u# d+ qPrint "--------------------------------" - F: q! m. h, c/ r- hPrint "您输入的增广矩阵如下:" ! d4 D+ j, h' E$ LFor i = 1 To n6 w9 t6 {# C; I) {, @- z N7 r* i
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))( F' L4 p) J8 s C5 L3 X
For j = 1 To n1 u8 L7 ?% ?, Q* R. m+ f P
a(i, j) = Val(Left(s, InStr(s, " ")))1 `; ~7 V) {2 O: g
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) ' s4 j* p, z) D+ B# ~Print a(i, j); % F; ?* T( t- D: ]3 Z9 L9 F/ w# r2 zNext* c% Z: K: d) H# r1 Q l
a(i, n + 1) = Val(s): V' `$ V$ `! `5 A
Print a(i, n + 1); : d: |) h% H9 r' W: B2 g7 e2 V% ePrint+ ?. f: ?* e6 k, p9 y2 e7 J9 l; W, b
Next$ W% y* o J. G9 D0 Z4 X! z
) z0 f' D* F& j, d: IFor k = 1 To n - 1 '开始消元 6 {8 R1 X1 [2 lIf a(k, k) = 0 Then$ K! i9 r6 D; L0 a p( h- X/ ^* a+ b
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"* E9 q' r7 j }+ I7 K
Exit Sub5 s2 `+ j Q/ P0 ^
Else # H; w# Z" r# j2 A6 R6 W' o9 nFor i = k + 1 To n 3 G' H% V# ^/ o; N6 i+ a2 {- L Q& ml(i, k) = a(i, k) / a(k, k) ) Y( l8 A. e# p9 P, y* EFor j = k + 1 To n + 16 n. H5 [2 e4 l! ]" @7 [* e
a(i, j) = a(i, j) - l(i, k) * a(k, j)) x/ R$ K9 v- f( E8 E
Next W/ C. n0 @' ?1 s8 C" qNext + e% Q* O2 A- K$ `; U: cD = D * a(k, k) ( z6 y/ J/ R7 {End If ) n9 `+ l- d- f0 ^Next k '消元结束+ }! n- K! k! e5 q
If a(n, n) = 0 Then! G5 W" F$ ~6 q, i
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" # \- q9 f) S' |Exit Sub) A R7 W1 }$ ^9 s: r9 A/ X4 S
Else% M9 D% ]# E6 J) B
D = D * a(n, n) - Y; v* M+ u6 J/ REnd If: z7 I! e4 D7 h; W. G
Print "--------------------------------" 3 q# G* M1 h) Z( i: RPrint "系数行列式的值是:"; D ' S5 j: g! _+ {: t5 L: dx(n) = a(n, n + 1) / a(n, n) 6 [, m: @: O. y1 a$ z. p7 u& BFor k = n - 1 To 1 Step -1 '开始回代$ K1 A; l* D8 o1 {0 l
For j = k + 1 To n F, o) n% V1 @& w2 y+ F4 {
m = m + a(k, j) * x(j)' _5 f, G# X! M/ x9 z4 a3 y6 l7 W/ |
Next j2 h! C3 c- N# ^+ ^" j& @' E0 w, B
x(k) = (a(k, n + 1) - m) / a(k, k) 2 H W. d# C! q3 C: ?) _m = 0 $ H* O% A* ] E! }Next k '结束回代 " j) }+ k$ }2 l+ J5 I 8 T# b. Q {, Z5 l& w* z3 B" RPrint "--------------------------------" ! b2 V: w6 G. c RPrint "方程组的解如下:" 2 x( q3 x& i6 o6 n& B; O) O 9 o; P8 X# j. ~1 p- CFor k = 1 To n 7 @& m7 o. U a# W: pPrint. g' ~' \7 i: U, D* r* t
Print "X(" & k & ") = " & x(k) ! Z c+ Z- G0 ? s" b+ ]$ S/ F+ ^1 {Next k - T4 U. i9 L3 p+ iPrint "--------------------------------" * c6 @* u9 C* y3 W$ ~3 s/ T- aPrint "其中各行Ax-b=" 0 S" V' l6 d5 W: oPrint , F& |' o. h: J z( h$ E }For i = 1 To n8 n& B0 v" W: }( m
t = 0; M9 d; K' c" _ w! F3 K
For j = 1 To n / @0 p3 T T" M. a- E# Ct = t + a2(i, j) * x(j) $ P. j" [% @1 c/ NNext j: J. Z. V! C% z" o# V* U
t = t - a2(i, n + 1) 5 h$ w5 L2 C' \' p; S' |Print Spc(5); "第" & i & "行:"; t ( l, p3 b) f* n+ ^' x0 t& XPrint 4 ]6 }! q$ X; B1 f ^( V$ C CNext i- ?! _. d& D, } d
4 c5 X2 q; M5 Q& l* b
End Sub