Private Sub gauss_Click() '高斯消去法. d( P& p) M2 o2 c
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single5 K) r0 m( x3 y) d3 K( S3 o' X
i = 1: j = 1 3 Z2 K( l" e- o! In = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) " N: N) v; P% J% P; QReDim Preserve a(1 To n, 1 To n + 1)/ L9 h1 [2 S* \
ReDim Preserve l(1 To n, 1 To n + 1)+ z7 U/ C# ~3 M
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single ! z: p9 E$ x* d6 q7 {7 RReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()3 w4 ?9 z1 q- [, D/ i$ K
For i = 1 To n $ Z6 d8 Z4 s8 [/ B. K6 E, pFor j = 1 To n $ J7 C$ K: S) \a2(i, j) = a(i, j)$ F+ L. a+ T" f$ K1 i. j* z9 ^
Next 3 W5 p" M; z8 g5 k% yNext '将a()的值全部赋给a2()+ i5 Z" O- E# {
m = 0 - e6 G' j0 `( X: }( X3 K8 ^D = 13 `4 [: j# T6 l6 ^
ReDim x(1 To n)# f. I5 m* _7 T, @& q# K
Print "--------------------------------"# ~0 Q; W ?* `6 R
Print "您输入的增广矩阵如下:" ' {4 s7 v4 V5 v5 L$ TFor i = 1 To n( Y7 W; g/ z }" M/ X
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))4 a Q" @9 f) ^
For j = 1 To n1 ^( i" Z- D- `
a(i, j) = Val(Left(s, InStr(s, " "))) / e, v$ D: O5 R, x o1 Js = Trim(Right(s, (Len(s) - InStr(s, " ")))) + x9 j% d1 @4 i, ?8 {9 t- cPrint a(i, j); 0 ^8 m6 V ]1 C% ~Next& Y' o" K4 U- I' W# B( z! ~
a(i, n + 1) = Val(s)0 D6 y1 s; o5 Q' q F
Print a(i, n + 1); / `( J0 @8 S! v6 c" v$ [Print8 @+ u4 n0 }% W( t) Q( e' n, J- l
Next% R- \* s) P& }, f8 Y% M( Y
0 D: a- s# F$ @4 wFor k = 1 To n - 1 '开始消元 5 t4 r4 Q! p, K/ u' {# eIf a(k, k) = 0 Then + c9 C0 @ l$ v% @, r/ e- TMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" 7 O2 u: E/ z; f4 I x# F& WExit Sub # K' p$ F% V$ _/ A, v( K8 {/ x: sElse# _: z& F5 ?$ I8 s$ j
For i = k + 1 To n0 ?' @' {7 l7 S3 T& m4 P M
l(i, k) = a(i, k) / a(k, k)' o: M6 w+ I+ E2 \) C- A. i8 ?% R
For j = k + 1 To n + 1' M- E6 D5 a! @: f
a(i, j) = a(i, j) - l(i, k) * a(k, j) ) z# p ^2 u: X6 ZNext 2 ~6 K% _/ r9 R, S- [& \9 y0 dNext, R2 p7 P( q* l4 D& j v
D = D * a(k, k) , X7 s2 x6 H: L9 S' K1 w) f4 ?' gEnd If 9 R, c: u* z$ K- q9 NNext k '消元结束 ) V p3 {! V( {If a(n, n) = 0 Then 3 ]2 Z5 R- [) D% `" T2 v9 z. O8 dMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" 7 Y8 \% \% Y J; l6 t) YExit Sub2 \& }: A- K9 H* [4 }
Else 0 f# U6 m5 X% ^& Q' ^9 A$ [3 r2 {D = D * a(n, n) ' z+ j4 ~+ @# W9 EEnd If $ N& w' F% Z1 ?! p0 gPrint "--------------------------------"" C; I) O" B; S4 T$ M0 n
Print "系数行列式的值是:"; D" c6 N+ q0 I6 Q& U3 G) i
x(n) = a(n, n + 1) / a(n, n)+ ^# p% E3 @, T) `! _: D @
For k = n - 1 To 1 Step -1 '开始回代 $ I3 a5 H9 ]! AFor j = k + 1 To n& N5 j" |4 A3 F5 O( z0 g+ M
m = m + a(k, j) * x(j) ' f( ?" N& r& b# B- tNext j 5 ?# `' U+ X4 d" d2 M4 `3 vx(k) = (a(k, n + 1) - m) / a(k, k) 6 y7 w8 ?6 ?9 \+ }" tm = 0 4 d) V7 D) p4 v* z8 I4 A( ^Next k '结束回代+ J' I# L( M- d) W; p7 I
; @' Q3 g* I- r t4 aPrint "--------------------------------"# S. B: [1 |; R. R2 g
Print "方程组的解如下:"6 a w) L, a: o1 U
7 ^0 s3 ?+ s! RFor k = 1 To n * T6 i& O+ f0 KPrint / |# r( O: p. _/ r$ @ W! E7 R9 U2 D. ~* bPrint "X(" & k & ") = " & x(k)/ Z7 B! f6 S. X# @
Next k' S" s7 V' I. y! |8 u& p! R" x
Print "--------------------------------"3 }7 y" X% F6 S" i7 D9 l
Print "其中各行Ax-b=" ' h* f9 Y/ x0 G1 p2 d" Y7 HPrint# N! K6 S p$ J, ]
For i = 1 To n ( y1 o: ^ S9 Pt = 0; A: U. U7 y `. f1 |/ f( B! T
For j = 1 To n : J3 C7 z# K+ u$ O( f8 M: {t = t + a2(i, j) * x(j)# ~& U! X: ~6 p* Z* {
Next j4 ]" O, P, R! Q6 @; k
t = t - a2(i, n + 1) 1 L) D( l& m R" ^) lPrint Spc(5); "第" & i & "行:"; t 4 n4 `, A+ B0 \" u/ pPrint, e2 F W8 k9 q* o6 A. a
Next i # c U" n, g, A! m4 v" E0 y% [# l$ C
End SubPrivate Sub gauss_Click() '高斯消去法9 w( H5 R5 Z( ]# ?, Q$ d9 e
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single / J% V% ~3 V" ^; x- r# f" @$ Ni = 1: j = 1# c" C$ n6 \; P' o4 @! q
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) ) G/ {$ M; Z6 N! H! b+ t/ m( E6 TReDim Preserve a(1 To n, 1 To n + 1)$ A6 J+ r2 F- t* ^+ L, f) f$ i. i
ReDim Preserve l(1 To n, 1 To n + 1)7 T+ ]1 ~; U" H7 `
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single 6 h: y" ?! m1 y2 qReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() - r' z; W9 O/ P9 N/ G0 T n% z& NFor i = 1 To n0 h: L( J% p# Q" C' Y0 b2 p7 B
For j = 1 To n / B$ E+ M6 o" N2 b6 l( Qa2(i, j) = a(i, j) 9 p$ F; ~: Q" z' x) L1 |* _; KNext. r- t; W% B7 `- I; b" v
Next '将a()的值全部赋给a2() . z+ A7 C: i7 I1 R3 Jm = 0 u1 d3 `7 W: t$ p
D = 1 $ V. Y* _* I( w$ A. x9 D6 t3 T- uReDim x(1 To n) T z0 w: X6 T# [
Print "--------------------------------" E' f% c$ C* N/ U2 T; R
Print "您输入的增广矩阵如下:" : \# C, ^9 L& y& D+ gFor i = 1 To n & J. F' R/ Y$ A2 O1 H- P) Ps = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))7 M" H8 V' y% `- Y4 s) M" V
For j = 1 To n2 C% H8 ]/ l! P) h9 j
a(i, j) = Val(Left(s, InStr(s, " "))) $ B; D) p8 X/ B/ Us = Trim(Right(s, (Len(s) - InStr(s, " ")))) W8 e. J' S: C& C
Print a(i, j);# e* r* U# x2 O! Q- n7 A9 |
Next# s* X8 w* P' J. ~5 P
a(i, n + 1) = Val(s): y6 s! v- y( s
Print a(i, n + 1); n' ]! N; [' R( x. J
Print9 w9 X# }! u7 O" c- x ~2 ] e( V( g
Next 4 V" x: y+ A! h6 @) @4 A3 l8 q# G F; }, Q! t0 |! X7 N
For k = 1 To n - 1 '开始消元 , |5 h) s. [7 A! gIf a(k, k) = 0 Then & s+ ]; H) A9 qMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ) s) [% m% y) mExit Sub* f8 d2 w4 P. K. t( \' ~
Else' k) Q$ L, u$ \$ J, O) \% k8 z
For i = k + 1 To n + k( G. f- a$ l# R- I' Ul(i, k) = a(i, k) / a(k, k) # {2 h( [2 x# d0 {For j = k + 1 To n + 1 ( [, R7 f# p; C8 Pa(i, j) = a(i, j) - l(i, k) * a(k, j)5 Y) R# T' f1 d% X3 B: s9 ~
Next $ k3 W1 |6 I. p. |' n9 s9 fNext . F5 D. D7 {: C0 U1 CD = D * a(k, k), K7 C4 ], f/ R) U
End If2 Y. K/ C- u3 M9 O! T) Z" G' A
Next k '消元结束 , ]% J' x! e* z9 ^9 Z7 AIf a(n, n) = 0 Then5 F' `. Z7 {8 ]. N
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"- X, U$ z# C6 B
Exit Sub8 x2 b7 ^# L: J1 k' T& @9 L: v9 O; z
Else ( {% ^, R4 y) e: m3 q7 JD = D * a(n, n) % i5 k" a/ ~4 yEnd If) n) J+ ^3 i- D4 M& |
Print "--------------------------------"$ V& N9 v" y, A( S4 z. j
Print "系数行列式的值是:"; D4 [$ c h3 |5 Z! A
x(n) = a(n, n + 1) / a(n, n)2 Z! ?1 B2 i) [: }* R/ H( B
For k = n - 1 To 1 Step -1 '开始回代$ D$ v# x/ R# y
For j = k + 1 To n 2 H0 `6 c3 B* f9 T4 u% {# km = m + a(k, j) * x(j) 0 |2 `, }6 h* c I( kNext j7 x$ _, t+ v V7 s1 d
x(k) = (a(k, n + 1) - m) / a(k, k) , p( J% {* K6 {; r# Y6 i* Zm = 06 K6 L1 j) b. r5 t5 w
Next k '结束回代0 f7 @. @ \: D- i: u8 g6 f
; ~ H8 l) w6 b3 F
Print "--------------------------------" 8 R4 o5 B/ {5 d( b u5 Z/ yPrint "方程组的解如下:"! D/ m! l" O7 l7 E: b) u6 a
- k5 Q2 E) h8 `# {For k = 1 To n7 A" i e' \6 X, g0 o+ U
Print % E: D( {. s6 q1 M/ ]) Y0 }Print "X(" & k & ") = " & x(k) 4 g, @' f9 N. S1 L4 ~% Z9 sNext k # E# d. e. w2 J/ pPrint "--------------------------------" S j3 i# r7 J1 nPrint "其中各行Ax-b=" ' L. O/ C. N; tPrint $ [9 O/ h6 V$ B' d' K. T! C. JFor i = 1 To n % @2 ]# j2 [$ J/ x5 f" _t = 0& ~5 O; N& D' F7 K5 G
For j = 1 To n6 I1 Y% P, N9 o2 k: O3 i/ l6 ^
t = t + a2(i, j) * x(j)5 ?6 [6 v( O: ~' \# C
Next j- R2 T; n# X( L' S6 @* }) }
t = t - a2(i, n + 1)7 h! k* k* S/ J' m! Z1 ~4 U) R
Print Spc(5); "第" & i & "行:"; t 5 y2 `3 P" o1 y( @1 Z0 IPrint 8 Q; @/ p' N1 \7 A, w/ ~Next i0 B5 T/ W" `) P1 L$ p
. |' Y" Z$ F1 K p3 [
End Sub