Private Sub gauss_Click() '高斯消去法# {& U7 _) Y9 l. W& I" l3 j
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single) i5 J/ {* C# z$ [: a7 P0 b4 j
i = 1: j = 1: _/ G7 E4 O h5 p9 q2 E
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) 3 b( _' y' K+ C# a# F9 SReDim Preserve a(1 To n, 1 To n + 1) ' h5 z1 ?; @9 i* E& A+ P8 PReDim Preserve l(1 To n, 1 To n + 1)8 `8 F( ^% x' `3 F/ Y- ^$ Z N
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single( l2 d, W7 J! Y+ i( T
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(): L/ P2 D0 \2 E0 J4 H
For i = 1 To n 8 O5 D" B; Q2 m1 u( l x, x c3 r: OFor j = 1 To n 3 Y5 ]. }- ?! ]$ }a2(i, j) = a(i, j). m- G. x/ y! {3 G0 [
Next 0 ]' ~# P4 f) p4 S, R+ O& N. ~* e6 kNext '将a()的值全部赋给a2() 9 ]5 `4 }3 a3 m: \( C8 h* W+ ~3 Bm = 01 W; W, ]' d" B* x, ]
D = 1 " {+ e4 K) N% gReDim x(1 To n)& j: r; ?; e ~/ u. e
Print "--------------------------------" / a- Q+ j0 e8 Q* l' j+ v$ k2 pPrint "您输入的增广矩阵如下:" ( B6 s6 S: I! [* V8 H3 U# p3 `3 cFor i = 1 To n2 _8 \8 V& }& `/ Z5 E% J& ~- i" D- e1 ?
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))# L+ G* n( x, M: r5 W" ^
For j = 1 To n+ p; n* z3 Z* _4 Q$ ?: ]5 T
a(i, j) = Val(Left(s, InStr(s, " "))) , H& s$ q! {. @s = Trim(Right(s, (Len(s) - InStr(s, " ")))) $ b7 I* n4 f; T, cPrint a(i, j); c) k% S: H( g% B, m! fNext 0 _9 S" y! ]- G: z' K! Ga(i, n + 1) = Val(s)+ D) i4 S0 [+ F, J0 `* h
Print a(i, n + 1);* \' d5 u0 R: _; W3 V9 D
Print9 W; n8 Y% L0 Q7 N- Z# c! M
Next / D" W2 j4 D# i! Q3 R : k3 T: v/ X! w' PFor k = 1 To n - 1 '开始消元. e& ~2 H" ^: q
If a(k, k) = 0 Then . o p# y S1 m; \MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"! K3 X8 B+ c% U- K
Exit Sub & Q* E3 m; g5 z$ S7 qElse0 s1 N/ f' \% m" I
For i = k + 1 To n4 t/ F, \" G+ d
l(i, k) = a(i, k) / a(k, k) 2 X% g5 |) \' `: e; AFor j = k + 1 To n + 1$ d* W- ^; _* j7 W7 ]
a(i, j) = a(i, j) - l(i, k) * a(k, j) ) b1 z1 L5 F5 e6 @, BNext, |9 X5 z5 k1 C/ e0 f. @
Next1 V- z5 n3 ]/ Y1 W4 Q7 x& _
D = D * a(k, k)! C/ v7 R/ E6 W; L2 |& U+ W
End If* u7 E `, Q0 B5 m6 s
Next k '消元结束 , A* p* {' }2 a' O& r* o( m4 W% |: G- tIf a(n, n) = 0 Then- J) W& U: Q; i8 w Y4 m. {8 e0 w# a
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" $ _# p) t( N2 C# Z& kExit Sub+ P6 k$ F- z) t; p5 E; W' ~: }8 l
Else 0 Q7 @% H- f: Z, fD = D * a(n, n) % Y% I0 j4 s" X" ^End If+ H+ ]4 _7 C8 Y+ P& o2 \1 \
Print "--------------------------------"7 v6 u9 G% F: V7 B# W9 f" I+ \3 n' y
Print "系数行列式的值是:"; D - h) k( @+ v6 Z* fx(n) = a(n, n + 1) / a(n, n)% _# Y) z1 y6 y4 U- u0 q B
For k = n - 1 To 1 Step -1 '开始回代 0 J. q. L: x% J3 v) M( ~& k) u0 XFor j = k + 1 To n5 ]+ g0 G( m# h7 _$ E
m = m + a(k, j) * x(j)! @1 k v3 r5 ]# Q) I0 ^
Next j! p. }4 o! L+ y) _+ c1 e
x(k) = (a(k, n + 1) - m) / a(k, k)( z' c, h" v& `) _
m = 0 2 f- B. E" E2 U8 HNext k '结束回代 / d$ ^9 n/ V, \' h/ ~6 i$ e$ ` ' S' S" M4 j0 C# u6 @Print "--------------------------------" / B. s% [. f9 z iPrint "方程组的解如下:" 6 @ y* Z# m" _# d) e2 d % s( c; Q4 t( p* [' r, RFor k = 1 To n+ _2 y; e* J/ Z$ u1 K8 \
Print * z5 ~4 U8 {3 P: ^Print "X(" & k & ") = " & x(k) ! J) ?- A9 ^' i$ x2 j' ONext k 2 G5 M A* Y L4 q% sPrint "--------------------------------" * T8 H$ K8 k& f3 ]$ lPrint "其中各行Ax-b=" 4 i! A7 f- s$ D9 Y5 G# [Print, ]( D- B7 t7 m
For i = 1 To n8 g3 x: r( f7 L f# l% f
t = 0 2 T" K F, {& ]) Z yFor j = 1 To n$ v4 u( r# k F
t = t + a2(i, j) * x(j) , b6 Q( ^9 Z* [/ E( U5 ]Next j 1 j2 H! I- a) S- P, e" tt = t - a2(i, n + 1) ! a' S9 v, I! {: \# nPrint Spc(5); "第" & i & "行:"; t: N7 T2 Y3 V4 \( ^$ ^! X9 F
Print& d# X a: A3 U- K; Q+ K# \
Next i& M) v' [$ o! [+ ~7 q2 k
4 O; `1 P9 h0 V- {End SubPrivate Sub gauss_Click() '高斯消去法; f. J8 x7 V) |# i0 Y6 D
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single 8 r9 L$ t& [2 x+ W' Ei = 1: j = 1 * I7 t3 |( x3 F# n d1 ]n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) % ^! k* T$ o9 J, Q7 J* _/ i/ J. \ReDim Preserve a(1 To n, 1 To n + 1)9 i, q( }5 s! M" B0 Q1 x8 X
ReDim Preserve l(1 To n, 1 To n + 1) , r) b* A0 `8 ?% GDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single$ `5 J, B! j1 e" x* a
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() / s! i; _+ c/ D7 h q5 T+ d. EFor i = 1 To n 5 P9 i0 \6 c' Z4 Q$ a+ NFor j = 1 To n# P4 `4 R2 O& d6 B
a2(i, j) = a(i, j)8 i5 E, `* W5 E5 y1 e
Next4 E, a6 Z4 ^( t. w: d5 J/ \
Next '将a()的值全部赋给a2()- M$ j0 ~' q: m6 n% h8 ~: p
m = 00 _/ t0 H5 F! f/ `2 S% H1 v
D = 1 7 `+ p* I3 Z* t; G' EReDim x(1 To n) - }2 D% _+ \0 k! sPrint "--------------------------------"+ D% _/ P( O @% c
Print "您输入的增广矩阵如下:" ( z) x7 u6 ?$ b% B7 u+ F3 sFor i = 1 To n( b$ k% r3 {7 a3 P
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) ! ?. R$ t4 z0 U9 n+ GFor j = 1 To n & H3 i8 B9 l$ ja(i, j) = Val(Left(s, InStr(s, " "))); j; a N1 m3 v: h% ^8 _/ Q, K
s = Trim(Right(s, (Len(s) - InStr(s, " "))))" h! O, P8 g4 T; o
Print a(i, j);4 c4 I" b" T: G' e9 O
Next 9 `9 z3 a, N: n, P) D2 ?" Z ?# }a(i, n + 1) = Val(s)! V( H+ Q; @* P* i4 W# N
Print a(i, n + 1);8 ]3 Y% q7 \1 a8 c# B
Print. W9 |' d3 Q# f+ {
Next' S/ a$ ^0 C$ d1 R) s
" @ C$ t. B# Y- d
For k = 1 To n - 1 '开始消元; K5 W9 @( x- N* [5 y& N- X% b6 A/ @7 B# D
If a(k, k) = 0 Then ) W0 g0 `8 _+ G! |MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" 0 d/ A! W: U- }. p0 J/ {Exit Sub4 {0 s0 J# F9 ~* {! z) }0 \ \+ a
Else $ V8 a6 l- t: m- c; _2 s4 G0 }+ j: E% V$ vFor i = k + 1 To n ( A6 q2 \7 H/ O9 f) T Ll(i, k) = a(i, k) / a(k, k) ( G/ I/ n8 r' b! \6 y9 ~2 F& QFor j = k + 1 To n + 1/ [! b7 I0 m0 l4 Y3 K
a(i, j) = a(i, j) - l(i, k) * a(k, j)9 q- E; n. r* F2 Y' O
Next & D: E& u B" HNext 3 |6 W) v: X* u7 T# A) MD = D * a(k, k)- ~: T8 }3 @# D$ f, \9 i# o
End If8 x) F N1 i! r) j
Next k '消元结束5 }! G: n3 z6 Q' U3 @
If a(n, n) = 0 Then 6 {/ u+ I. C( r# |( o" rMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" 6 _# {- L9 C/ T, c: ~8 cExit Sub# C1 J" |$ w: Y1 R+ [9 D
Else" f8 L6 M9 a" N, L# n
D = D * a(n, n) , f1 s2 z+ B* u) i( j) Z' jEnd If . v4 `) z! g0 K, ~7 n2 [" u% lPrint "--------------------------------", C% b) A, D+ d
Print "系数行列式的值是:"; D / v8 Q. a e1 h0 K( M4 \" r4 _x(n) = a(n, n + 1) / a(n, n) 2 U. \7 O1 X. }# ?! [. x" FFor k = n - 1 To 1 Step -1 '开始回代4 x1 A1 q! C j% ^" c3 M
For j = k + 1 To n , T1 |- ^. a/ J2 Em = m + a(k, j) * x(j)5 G% h, G# f8 F- f0 L" c2 s
Next j0 @4 q+ j0 U+ }( D3 K2 V
x(k) = (a(k, n + 1) - m) / a(k, k) ) q6 j. _$ G! [; z, t4 M3 pm = 0 ; c# {5 o; B- f4 N5 \. uNext k '结束回代* }+ x5 H) v; Y3 s! K
6 P0 W9 A* I' {" M( aPrint "--------------------------------" ; _ Z% H, q2 EPrint "方程组的解如下:" ) P3 R4 R+ j2 H2 ?& G6 D$ U% c , g% @$ W: q) \4 u! a: PFor k = 1 To n ; x1 P. H7 O% R. _1 j" e& g5 {Print' e, E( j+ S4 p2 x! A n0 @1 K
Print "X(" & k & ") = " & x(k)" N6 v; y& O! L" |) }+ c
Next k1 g" ~! ^$ d/ @) }
Print "--------------------------------"4 a$ F! \, }, o8 K t. }) K0 x m
Print "其中各行Ax-b="+ X8 b/ e& {5 @4 z8 L- s8 Z; M
Print& K7 c) I7 z, P/ U6 f3 d$ ]
For i = 1 To n , X& @1 Z* p& _1 bt = 0$ O- r1 \- y2 E7 W( \
For j = 1 To n/ ? R7 r. u# ]$ t4 g; z
t = t + a2(i, j) * x(j)5 d q! H# z& w; [8 n3 [) c
Next j l ?& H8 s# L; w$ y2 X5 i7 [2 z/ z
t = t - a2(i, n + 1) 2 Y# ]) N% J5 s2 u0 S/ A/ b, F+ wPrint Spc(5); "第" & i & "行:"; t5 U& j* D6 M' m/ j) ?1 {! j( I
Print t! Q' K% `2 o, o+ h
Next i % _7 j8 L! N& ]/ K+ |/ R' k% u- p+ n5 `: j% R( W& b2 W! h* e. e
End Sub