Private Sub gauss_Click() '高斯消去法 / \( m7 D0 w: N: }4 d: I( i6 XDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single9 Z3 ^' ?+ j. b; c- P" v& S0 s
i = 1: j = 1 ( J7 e S% s9 Z; v ^n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) p$ C3 r) _7 `( t! dReDim Preserve a(1 To n, 1 To n + 1)2 _8 p$ w9 F) D! T4 \+ w
ReDim Preserve l(1 To n, 1 To n + 1) % }# ] ~& c- }% @7 }1 GDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single ( C- { x& d# m+ KReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() a- C: b! H2 N: E# ?" C( K1 |
For i = 1 To n 8 `( }! U5 M9 n2 }6 ~' EFor j = 1 To n - j* y, i1 l6 p3 ?! ba2(i, j) = a(i, j) + i0 _! r6 M/ G8 N f" z1 eNext 1 k; j. Q0 K0 Q3 l, {% ~) tNext '将a()的值全部赋给a2() 0 }. Y5 \- s9 W. }9 B8 c4 h) Im = 0% w; i- [$ N9 `: L6 B
D = 1" s* v, o* P6 a6 i2 S6 B
ReDim x(1 To n)# r7 n1 f! [ X F: `. w
Print "--------------------------------"1 t# k, v0 I+ c& Y4 g
Print "您输入的增广矩阵如下:" 5 x- b) {7 T3 S/ E/ V9 JFor i = 1 To n, Z$ |: F- [/ ^: U% `
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) % L( _8 v6 J# Y; I* d% {( aFor j = 1 To n 9 ~( V- e P0 k! z! Z0 i0 ?" ma(i, j) = Val(Left(s, InStr(s, " "))) % Y) U. t( @( L* y, [0 Ws = Trim(Right(s, (Len(s) - InStr(s, " ")))) * [3 v& E0 w+ x" ~1 u1 x: y+ Y' aPrint a(i, j);6 ~8 ^1 Y, A/ ]6 [. z
Next7 x$ |; |" I; L: X6 O+ Z' t
a(i, n + 1) = Val(s) 2 t% d3 `) [( W7 ^" nPrint a(i, n + 1); : Z# Y2 ?6 [* u6 }! t2 APrint . ~& x+ s; K" j( TNext/ z" k" J% K% ` u3 a' m5 l1 {
& c; t( n/ |3 H9 H/ |9 V
For k = 1 To n - 1 '开始消元 . a0 e/ S: S) k% H# `7 YIf a(k, k) = 0 Then , ~0 B" }# `8 J, gMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" 6 P* b# b, z& H+ k) S; a7 iExit Sub0 F" Q4 o# ^7 G) @" u1 v9 c
Else! M6 m; P- k( l4 W) Z
For i = k + 1 To n / C( s- k5 y1 ?. ~1 w5 i( Ml(i, k) = a(i, k) / a(k, k) : `0 ^6 s4 q K9 f( oFor j = k + 1 To n + 1/ w9 X7 G5 W5 Z: { {3 R6 z, J
a(i, j) = a(i, j) - l(i, k) * a(k, j) 9 a) x3 b+ T7 o) mNext D, k3 A; t- X8 U1 x' \
Next ; F" A- y) T, \& Q [/ }. ED = D * a(k, k) " ~! ^4 K+ ]& p9 bEnd If / q# ^1 z% Q) l' r& a0 T0 d2 RNext k '消元结束 I5 S. Y- g4 p7 E2 |/ e
If a(n, n) = 0 Then ) M0 I: i% i' S" ^1 a; r' eMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"( H; L6 w5 n; N$ Q8 P$ [
Exit Sub & O& J6 w* d P# oElse 0 f$ B8 C* N- |3 w+ d# C* P2 S, G/ vD = D * a(n, n)7 [1 z, q# j6 E
End If! q- w- _) n7 ?
Print "--------------------------------" 1 L$ N; v. C9 e% r8 vPrint "系数行列式的值是:"; D. N6 G% z$ U \* ?3 A' C
x(n) = a(n, n + 1) / a(n, n) , h# H0 s8 G4 M0 T4 u hFor k = n - 1 To 1 Step -1 '开始回代/ q6 { s; i* \5 F! K% ~
For j = k + 1 To n$ X6 e6 b( k1 C) W1 }2 T' _& ]
m = m + a(k, j) * x(j) : o6 i$ a8 p5 ?. f. f" Y+ g. z* {Next j. n% Q6 H# f& ^, G$ P
x(k) = (a(k, n + 1) - m) / a(k, k)2 u+ d0 G$ k3 W1 I; i# a6 i
m = 0 * d( ^$ F; ~( o) ~Next k '结束回代/ A- L4 k$ o, w; O4 x
7 E; ] ~, q2 N; R2 tPrint "--------------------------------"6 o$ n' A1 f2 p! r5 o" `
Print "方程组的解如下:"5 J% U, m3 {* x, _8 T
! i. Q" x: z* s" N5 i
For k = 1 To n , Q% y! R; t8 v, Y2 sPrint 8 L7 i/ u/ ~9 U; A4 IPrint "X(" & k & ") = " & x(k)! o" b# \# R9 s8 ]( Z2 o z
Next k* \/ J( z* k5 x) k
Print "--------------------------------" 5 d) m1 T8 ?3 `5 G! HPrint "其中各行Ax-b="1 S4 f5 h3 T+ b' U+ @" R* d. P& t
Print 0 Y" s+ L" h" s0 C& U! UFor i = 1 To n 4 N0 Y' h' ~ ^/ @t = 0 * n# k% q" w( b( L* ]$ ZFor j = 1 To n 2 e; L" M8 r! @2 h, i% bt = t + a2(i, j) * x(j) . N. k+ u' i, a$ MNext j6 l8 e; a* M( x; v: x; W
t = t - a2(i, n + 1) , _7 h; F4 Y6 o. Q, CPrint Spc(5); "第" & i & "行:"; t 8 d! }! [0 d \' L- g* G6 ^' p% NPrint+ u, y5 l& {5 C, Z
Next i" q/ k1 `" [8 \1 [8 ~: b" @7 @
l8 ^2 Y, i9 l
End SubPrivate Sub gauss_Click() '高斯消去法9 W4 T# w6 {, }- |7 T& V
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single) O7 w- ?( b u/ G1 @
i = 1: j = 15 W. x2 y$ j) m9 T; p& }4 B* W
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) " J7 L" U% B9 H0 }/ u: OReDim Preserve a(1 To n, 1 To n + 1) 9 Z2 T& k) C. Y- QReDim Preserve l(1 To n, 1 To n + 1)5 U) ^: X9 ?8 W: x0 V6 P! C
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single 9 y6 s0 h* w% {% F' Y0 vReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 7 V% x( c% u6 x/ HFor i = 1 To n . y+ W7 B& q1 q# T6 aFor j = 1 To n ) K0 q6 _ T* p8 P& V& `# \* sa2(i, j) = a(i, j) ) W' v1 _! k2 JNext6 G$ w1 B! G: N. B+ \: |7 P- D6 F
Next '将a()的值全部赋给a2()+ g$ g) L7 Z. O5 k: F8 O: c0 |9 C9 [
m = 0 ( W+ V) T4 J* V/ }/ b' CD = 1# K) `5 r/ @2 Z+ x( \. v/ W
ReDim x(1 To n)3 r; U( }& S$ g
Print "--------------------------------"( K W& f, r: d6 j4 p" r& P
Print "您输入的增广矩阵如下:" 3 K3 y7 j1 R) eFor i = 1 To n7 K3 o3 K7 w$ F6 K( i( \/ [3 h
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) . l( n! a3 F% ]6 cFor j = 1 To n 9 z1 \* v! g" X; |7 K8 {9 m8 Sa(i, j) = Val(Left(s, InStr(s, " ")))) w8 t# M4 c. A+ R+ k
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) # ^/ A" X& `+ \* I C/ @Print a(i, j); - A0 \- x7 Q# w6 c: \! eNext F9 c, F$ p- y1 c5 q" z$ Y3 r
a(i, n + 1) = Val(s) : I+ y, n% p; h& GPrint a(i, n + 1);2 a6 i( V' H% c. _
Print . e9 z, g; J$ b7 mNext+ W7 ]- c5 ^, O( I6 d% Y3 t
6 q1 N3 v8 c1 w6 ~( Y1 KFor k = 1 To n - 1 '开始消元4 F5 P! N! r$ [# A. t% G9 w- _7 S
If a(k, k) = 0 Then. p$ P+ h; W6 ~' R/ E) o8 u
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" $ b( |3 w& D, h( N! L( E. fExit Sub - V7 Q; @! G- I) hElse 1 F2 h2 o* d2 E5 w$ IFor i = k + 1 To n # Z% \4 f' D, f+ o3 [' P9 Bl(i, k) = a(i, k) / a(k, k) ! T9 C' o) C4 @0 c w0 B/ a; kFor j = k + 1 To n + 1& E. J0 G% f/ J& |+ \ E- o* ~
a(i, j) = a(i, j) - l(i, k) * a(k, j)$ g, @, d8 H$ Y: I% U/ d
Next' D6 h6 z$ M S! c; M: ?
Next ]# x+ t$ F0 X ^5 |- J# s. `0 R: j9 CD = D * a(k, k)! Q2 U% [4 e8 x6 ^% ?
End If" b$ T. b. X+ [& W! g# {7 ^
Next k '消元结束) A4 n f7 P3 g* B- y L: J
If a(n, n) = 0 Then & g8 h9 R! I% DMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"- m! t$ b2 Z% Z) z Z+ ^; u
Exit Sub2 B `6 U) Z* R: U
Else) r9 R$ V9 K6 v1 \& H$ }; @( P
D = D * a(n, n)* e& C7 D* ^5 i( p9 Z
End If' N3 T! h {+ U6 W, s0 ?+ O3 X
Print "--------------------------------" 4 H) }! n4 r$ X7 _# a3 R" @Print "系数行列式的值是:"; D$ ~( {+ i9 A0 O4 p- d* e J
x(n) = a(n, n + 1) / a(n, n)# T- x$ M7 e }, i1 J
For k = n - 1 To 1 Step -1 '开始回代 ; n+ N) ~0 Z% k8 I0 OFor j = k + 1 To n + P5 X O! r. v! l* Nm = m + a(k, j) * x(j) % ^. k0 |) E6 UNext j ' j) m/ a; k: `- u2 L* ]3 W( Q# B3 j9 kx(k) = (a(k, n + 1) - m) / a(k, k); z( s8 T0 K$ k# Z/ n% k0 Q4 }8 Z" @# u
m = 0 , ^6 f+ D% b4 [; y4 P3 D G) d( \+ m oNext k '结束回代 , Q+ a3 K, _' Y$ ~+ ~- i* _4 m, T
Print "--------------------------------"3 ]. Q' a4 B! J( X5 o1 _$ Z( X A% D
Print "方程组的解如下:"3 @ n3 D) o, k
$ Y3 y# _. c- F! F
For k = 1 To n @8 @6 }5 a; d1 K7 [Print 3 y7 x/ f) F. m/ ]/ GPrint "X(" & k & ") = " & x(k)$ u' [4 C# Y# N2 D
Next k 8 @" r7 R! W! `, N2 ]Print "--------------------------------": k) U1 @3 z4 K2 b. q# }0 M z
Print "其中各行Ax-b=" 5 ?, |- u) T6 }) a2 `Print ! l* U1 w; ?+ U- t' Y/ xFor i = 1 To n - V* C h6 k- F! u- c" g, et = 07 ]% _) M' W$ U5 r" {( B
For j = 1 To n" @4 O9 X, N4 k: w
t = t + a2(i, j) * x(j)9 ]# p: i9 e# b5 A- D; l
Next j p8 P# N9 t G9 J; w. Nt = t - a2(i, n + 1)& D) f- k9 k& f+ |
Print Spc(5); "第" & i & "行:"; t 3 [, K2 q& I$ ?# s! s2 \Print 6 O: e" D$ X, ] @. P% U+ uNext i9 ?( t) \; ~( x
9 t7 r8 l$ i9 [' N
End Sub