Private Sub gauss_Click() '高斯消去法3 _8 h7 Z8 A9 d
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single* |# _# v5 a# v
i = 1: j = 1# H( [ w/ M$ [" p1 z; y
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) 1 U1 D. U3 q; S9 u, }ReDim Preserve a(1 To n, 1 To n + 1)* A, c2 s6 r- m5 b% @( y9 m l
ReDim Preserve l(1 To n, 1 To n + 1) 9 ^ A- Z j6 ?4 w) F& k6 e. l* yDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single 8 f8 `8 K8 n* cReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()* [! N* T* F( i9 ^" j# c6 D
For i = 1 To n( |3 w6 D; c) o' O0 }1 W# v
For j = 1 To n O- E2 ]2 X x& L, g
a2(i, j) = a(i, j) 3 J6 v+ e+ v- ]$ DNext5 Y4 B( ~" ^% h2 [
Next '将a()的值全部赋给a2()* z( w5 ^( W! C; N* C1 h Z$ b
m = 0, a' @3 S7 f c* D) Q
D = 1$ @" x" ?& I5 K7 Y; z! k1 o1 B
ReDim x(1 To n) " y; a7 \. z5 Z$ z* }% c7 CPrint "--------------------------------" ( c5 d9 O0 N7 J, I& d( F0 _Print "您输入的增广矩阵如下:" . w: [7 |" ]( g* ?: sFor i = 1 To n& q' b- ]* ~, T9 h4 R6 Y: J- y
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))/ C ~+ [0 Z. H. ~- Y, T
For j = 1 To n8 F6 j4 M3 E+ `& \+ I
a(i, j) = Val(Left(s, InStr(s, " "))) ) h7 X, \2 ~, i) gs = Trim(Right(s, (Len(s) - InStr(s, " ")))). W5 h. g+ T/ I
Print a(i, j); & v4 h7 f. p5 L1 M6 g3 [Next0 O/ p- o1 H4 ?& ~+ k, Z- K* Z
a(i, n + 1) = Val(s) " z) q' {1 C) j. h( HPrint a(i, n + 1); , b- u8 |% a8 s/ l8 B! }Print& M9 L/ L( `3 h* G6 ~( d
Next: D. h. ?& O5 ]9 W2 ~2 i
# @% M* p _1 i
For k = 1 To n - 1 '开始消元 2 u# f- c. w# Y L. f* zIf a(k, k) = 0 Then3 Y2 f& t' P- e8 Q
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"& b8 |/ i- l( }5 j
Exit Sub. k7 c( K! b/ {7 b0 v
Else9 q' q3 n4 X9 f ] F
For i = k + 1 To n5 ` c% k) k4 x: I
l(i, k) = a(i, k) / a(k, k) & R/ B4 M/ T# y0 xFor j = k + 1 To n + 1; j8 s+ }0 X' D; m, D8 m
a(i, j) = a(i, j) - l(i, k) * a(k, j) 2 \9 q+ r5 p" _2 r: @3 ENext1 `$ {0 L. _+ x7 b# Q6 Z2 \4 ~
Next ; q9 t% h6 S6 u$ ?( i$ ]' o+ eD = D * a(k, k)) N, l* o9 B+ y" q l) R' v* b
End If o& @0 w3 y8 c8 d6 M l7 e+ {
Next k '消元结束& Y- c8 ~5 H: |
If a(n, n) = 0 Then: ]) I* A( n2 S0 H: z1 o
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"9 V2 v* L+ T* x- F. X: I4 _
Exit Sub$ z7 {, X1 G3 N# V! A
Else# ?' R2 A/ f% s+ q7 S$ J5 J! a2 N8 i2 x) G
D = D * a(n, n) 6 j, }! H9 r! DEnd If0 g7 `" G2 I0 a4 v
Print "--------------------------------"# E @; g6 N$ }. U7 z# h
Print "系数行列式的值是:"; D . A* y- N- c0 k$ h6 X; Jx(n) = a(n, n + 1) / a(n, n) 5 _' ]% d: P" T. M2 K [For k = n - 1 To 1 Step -1 '开始回代 + _. N, k* L# \4 {8 AFor j = k + 1 To n : h) I& @ L. y$ M0 ^$ cm = m + a(k, j) * x(j) g% _( Q. o" S6 L
Next j ! H) r0 a( `% {1 e2 Qx(k) = (a(k, n + 1) - m) / a(k, k)1 [9 A4 e* a1 h2 U
m = 0 9 |$ m# z: {$ I3 |$ N5 {4 hNext k '结束回代2 B* V+ l9 l0 D0 P) G
. W/ F1 V% q- L; p0 k+ e
Print "--------------------------------" 9 M! i2 r6 Y2 K5 ~% q7 M6 F4 YPrint "方程组的解如下:" * ~, Z& D/ Y0 s3 j7 q Y2 E. _1 A5 t; j1 P: Y; t5 x
For k = 1 To n$ X7 y' T3 _9 x- T- h/ q: J
Print/ z* E1 t8 @) A8 I1 X' w
Print "X(" & k & ") = " & x(k)' I* L b: ]6 U; W" Y* K7 ?
Next k5 H; Z1 _4 x0 l! W( n3 B8 ^
Print "--------------------------------" * \! N+ e0 g# [+ ]) lPrint "其中各行Ax-b=". r% U" B; r$ {$ E2 _
Print4 w3 p; e# P8 I; ^8 ^. m7 M3 r
For i = 1 To n , c# p- I; B+ {7 a' E- ~t = 0 7 d! o- s# G9 N- {. ?& A% K) Q8 ^8 ~For j = 1 To n! m% s0 A! V8 D- o
t = t + a2(i, j) * x(j) % ?+ B3 U. O6 f: ?" nNext j# D' n% |3 V% `) p
t = t - a2(i, n + 1)) R0 A- e8 f' z4 V% J: {$ j
Print Spc(5); "第" & i & "行:"; t& v0 n v% r k* ?, D
Print) }1 f A$ d) n- `
Next i$ ]$ t* k% c; H1 E0 p* s5 o1 B
* m' O3 e& @2 ]8 x3 P( U7 T
End SubPrivate Sub gauss_Click() '高斯消去法+ a$ |/ C& s$ s Q% T1 Z$ _0 c: p' t0 F* ]* r
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single& Z I+ q, m+ [
i = 1: j = 1; C4 R/ w9 I% A: u: p( G
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))3 K% K. g) i/ W5 k
ReDim Preserve a(1 To n, 1 To n + 1)8 N0 [, m7 K: x& m* ~# P8 o9 y
ReDim Preserve l(1 To n, 1 To n + 1)1 D- b4 |1 q: F/ I+ p
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single 9 d7 V9 y$ _; X* t6 _1 eReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()5 S" Q9 p5 Z2 @ N
For i = 1 To n( y) A2 [ P# [( S' w2 p, D- d
For j = 1 To n 6 ]; w+ W+ O I# T8 H' i7 sa2(i, j) = a(i, j) ; F) z: X5 W$ y6 |( E, e* hNext" C( F- l9 e! E
Next '将a()的值全部赋给a2() , [6 U; H S7 j9 _m = 0; p! V9 v# k# C1 ~+ ?4 N
D = 17 ~0 p: l- Z/ ]" K, z
ReDim x(1 To n) * [! c2 `( ^* b7 |0 @Print "--------------------------------" : |7 q) |0 ] Y' |& I1 h, aPrint "您输入的增广矩阵如下:"( F; e4 \$ ~+ ~1 ^
For i = 1 To n * |1 F0 M8 K- B+ R6 U# }# V5 ys = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) 2 L: N+ | X& @+ s4 ]0 cFor j = 1 To n 0 U5 A/ {5 D$ ]' |" b# ha(i, j) = Val(Left(s, InStr(s, " "))) 5 ^ ^# w6 {( \( L: xs = Trim(Right(s, (Len(s) - InStr(s, " "))))$ Q" Z; M4 E7 c7 X
Print a(i, j); 2 b( E/ X) G( k3 p' T# y% MNext+ x8 e& B6 A" |1 d5 u" L: J2 \
a(i, n + 1) = Val(s)( N4 V0 e' P1 U) j3 g
Print a(i, n + 1);- l. G7 f, _) W4 s6 I# F
Print + j% k( }% V# U9 e& xNext 7 k1 y# U9 F6 D2 e" y0 j" V$ a, d5 x3 ?5 i
For k = 1 To n - 1 '开始消元; W4 s5 b2 Z4 X7 g. F
If a(k, k) = 0 Then ' c9 K* q& F+ {$ s; kMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!": u. ^6 Q3 r6 v R8 z
Exit Sub $ g4 A+ E7 }: o% K9 OElse 8 l) ]9 b3 ]6 D% YFor i = k + 1 To n* d+ [% g/ z8 H; z$ \5 r
l(i, k) = a(i, k) / a(k, k) . c( s3 v( v* u! pFor j = k + 1 To n + 16 ~ A2 |% a* D( R9 o- \
a(i, j) = a(i, j) - l(i, k) * a(k, j) ' k) L0 p$ h; K! d) B9 TNext U0 d$ d1 S* E1 m) iNext: s" F6 s6 h3 m% n. ?+ p W
D = D * a(k, k)/ A& U; @2 ?' I/ i( J) i% H
End If ( a& w7 ]0 a/ L6 P# r/ FNext k '消元结束. w# Z1 y% I& A1 t
If a(n, n) = 0 Then0 \4 a+ w5 ^' q6 I
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" 4 u2 j& c% V" d" {( \Exit Sub 2 Z2 \7 a# K0 V: OElse( N z" ?# a e$ G$ u$ M* g5 c
D = D * a(n, n)! Z1 f* N d3 x* k9 f0 x& L; v
End If: i1 _: D, G2 e& Y* y* L |4 S
Print "--------------------------------" 7 h$ n( g0 U. b5 HPrint "系数行列式的值是:"; D * {2 X- G5 `. x& c7 S* ex(n) = a(n, n + 1) / a(n, n)( I! i* |. g3 K% S& }
For k = n - 1 To 1 Step -1 '开始回代 - b' p! G% I# qFor j = k + 1 To n# z( I* I0 p! h% @8 J2 r6 \
m = m + a(k, j) * x(j) 0 h9 m3 a- n% P: H+ f, xNext j+ P# f3 }& G' O+ K y
x(k) = (a(k, n + 1) - m) / a(k, k)8 S/ Q( {$ E9 k. V
m = 0 % w) @4 O$ P) ?$ u5 j9 {. ANext k '结束回代: x5 w" a$ _) Q
3 d/ D* j- s& f) M7 k6 aPrint "--------------------------------"# R9 D4 u) h8 o7 S# D. z3 d
Print "方程组的解如下:" 0 A% ]6 S5 [0 v8 w7 W- F * {) M$ o( B4 I, aFor k = 1 To n 5 `9 x; `( l; M7 o5 C6 rPrint9 W6 D2 i0 Y8 ]) R
Print "X(" & k & ") = " & x(k)3 x( `# O( L2 h: V( \
Next k ; c1 F) {6 ? i2 {3 o+ vPrint "--------------------------------" 8 _- k- j! O# ZPrint "其中各行Ax-b="6 z G5 _8 d% Y9 O2 K. P
Print" J5 G5 q, {( ~* q
For i = 1 To n) d7 ^( ^# `9 O/ X1 b3 I" I/ z
t = 0 8 u8 O8 {9 A: s) i& mFor j = 1 To n3 ]- x# v" B: Q
t = t + a2(i, j) * x(j) % M3 ^4 \4 g u: ANext j 7 ?, r6 ]) D' m) V, }" j7 A# Yt = t - a2(i, n + 1)! B8 B1 M s. r; B5 P# h
Print Spc(5); "第" & i & "行:"; t9 f. A3 F7 u! k' y
Print A$ E! C5 c' H" k3 ]9 T- z
Next i ! ^$ X* F; V0 I0 ?. p9 G/ l$ f' C" Z4 y8 E" U d: A
End Sub