Private Sub gauss_Click() '高斯消去法- E* x& E1 M; {5 T8 K
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single 3 X: u- R8 ]0 x- B4 P6 @& Z Mi = 1: j = 1 ! j) s- P3 F O# Z) c& K8 rn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))8 z+ L5 R+ [+ _5 |4 _+ H2 O
ReDim Preserve a(1 To n, 1 To n + 1) 4 H0 o# U3 Y: b* G- _: X4 LReDim Preserve l(1 To n, 1 To n + 1) " n* j7 i6 G' y8 Z# g8 a1 _Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single ' p2 G1 U% t4 V- @ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(): A7 e$ f) m" y* v8 H8 l
For i = 1 To n; ]( Y9 ]& S' q K. u4 V8 T
For j = 1 To n+ v, b9 \8 v6 }9 H5 T
a2(i, j) = a(i, j)5 n9 f' K& h# ^; Q8 L
Next , F( x. R6 J/ k, KNext '将a()的值全部赋给a2()8 z3 s, c# X* s) M; r
m = 08 w# ^3 z3 L4 T- |) Q/ L: M
D = 17 O' J; _4 g3 d4 L' w0 u
ReDim x(1 To n) 7 S% ]) {$ Z( P; m' b3 S' NPrint "--------------------------------"" v% {5 }; T9 m, z- o' E
Print "您输入的增广矩阵如下:". V+ R- j/ T- ]" e1 ~1 E" ?# h
For i = 1 To n- [6 t* j- r, U" l1 K8 O7 ?
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) ; t8 h- c4 H1 R/ GFor j = 1 To n # [4 k' C4 x7 G* A2 }- ta(i, j) = Val(Left(s, InStr(s, " "))) 6 Q/ i: K, X7 ]" A- x+ E* ]2 hs = Trim(Right(s, (Len(s) - InStr(s, " ")))) 0 r2 n6 i0 T! Y' y( i2 o' ^Print a(i, j); 9 `( a [- i8 h+ M; K1 I. aNext' \% I1 D$ `* s' L% J4 J- z
a(i, n + 1) = Val(s) e6 B6 E+ Y1 M9 V" V4 X8 f( N
Print a(i, n + 1);7 Y. m* T" x5 d+ ^8 ]& M) `
Print) g# Q6 Q# C* I9 @3 E. B& t# q
Next 8 M5 d% b7 j% Q% g% _2 z- F& D5 V; z' q! y; W- [1 S
For k = 1 To n - 1 '开始消元* v$ X( E! {, \9 Y3 T( K
If a(k, k) = 0 Then$ U2 i/ t4 z% b# Y. E: X
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!": r7 h [0 Z4 j* a' E
Exit Sub& f( V$ w% u4 u% j; {3 i; v
Else 0 Y1 g8 b4 ~' R$ Y6 o# _For i = k + 1 To n * W/ Z2 }/ V. P9 K/ K- \7 p- ~l(i, k) = a(i, k) / a(k, k)3 q/ _: Y" f7 |' Q3 A, r
For j = k + 1 To n + 1 ) S) C$ _) G: V5 C. v1 ra(i, j) = a(i, j) - l(i, k) * a(k, j)$ W9 U2 \; ]' X4 m1 J. R; Y {
Next. m/ Y# m" {, f9 j2 g$ e
Next ; V! k4 f S$ [: t. L; ~D = D * a(k, k); [2 Z( T b- m+ \6 T: h; [
End If" }" T0 m3 `# J$ }& f& H: X% p8 A# o# C( }
Next k '消元结束6 u3 B5 T4 N q, i$ i: k4 g+ A6 y! v' V
If a(n, n) = 0 Then* `- O [/ V3 B T9 J' _ L8 u
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" ) Y7 c3 \* a! A5 |' N9 [+ B$ wExit Sub; k# v, B* O+ i7 L) f
Else - ] X2 h1 l$ t8 c$ x' \+ q+ R2 ~D = D * a(n, n)8 W- \, O; w2 [: {* R
End If - E- ], c% g6 E/ J- c3 V1 n" UPrint "--------------------------------" 1 K- Z$ E5 J5 J5 c1 o* e: h' nPrint "系数行列式的值是:"; D5 q d5 d" b" [3 L6 J) B6 Z1 s7 q3 K
x(n) = a(n, n + 1) / a(n, n) ; R* A* u9 n0 B Z. IFor k = n - 1 To 1 Step -1 '开始回代0 T# M/ W1 V6 E0 I1 m& y- [
For j = k + 1 To n" P+ {: b, j0 M& Q
m = m + a(k, j) * x(j)# M) V; L D4 J0 o D7 }1 u& h
Next j* }0 q: T* P; Q' C9 n# ~8 P
x(k) = (a(k, n + 1) - m) / a(k, k)# Y8 O, a5 D$ c1 k4 g
m = 0 ( e1 p" P" F* O; M$ bNext k '结束回代 7 i5 @5 r k$ b& A- {7 A) I' n' T. |
Print "--------------------------------"3 e; V+ n& i, }& p1 u
Print "方程组的解如下:"" Y* K0 t' E# U M1 \& E7 n
h1 a; j6 M6 i$ ^6 l/ jFor k = 1 To n8 g- s( | v1 U
Print$ [9 I O, m3 u# L# \/ J
Print "X(" & k & ") = " & x(k) t. F8 Y( D& V8 v7 N' |1 ENext k / G8 b: ]* D6 DPrint "--------------------------------" % e6 H0 W; z+ V% O. U% Z" G0 ~8 zPrint "其中各行Ax-b="' r! X5 @+ M# c5 }: S7 k
Print" e9 [, r$ R4 U% c
For i = 1 To n+ u8 R( x6 P& d$ f
t = 0# d- l" V3 ?0 F/ Q( G& G6 M' F$ I
For j = 1 To n / F/ X% U) W+ m* gt = t + a2(i, j) * x(j) ! \5 e1 t# [% r xNext j6 G8 I9 t3 K3 W, L4 G
t = t - a2(i, n + 1) , x% |6 s. c, {1 ?3 CPrint Spc(5); "第" & i & "行:"; t5 T0 i! g/ b" b; |& J! q3 n* W: W
Print ' S9 P6 r# W5 y1 gNext i& b$ v$ e2 i* R) k8 s4 Z6 Z
. R+ L1 F# W9 `# i6 P$ `' H4 fEnd SubPrivate Sub gauss_Click() '高斯消去法 0 ^& ^' y# c# T, p4 X m$ T! `Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single! Z. \+ S# \( V+ b
i = 1: j = 1 ( K3 }* B! R+ Q& k" e) qn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))/ Z% u3 C: H! T3 g$ p T
ReDim Preserve a(1 To n, 1 To n + 1), J8 c9 n: B6 s: ]/ w3 @: y
ReDim Preserve l(1 To n, 1 To n + 1)# o4 a& O5 N8 J# V$ {* X
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single . B9 j' [& @8 T8 H$ yReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 5 X o% t8 q6 r- l1 QFor i = 1 To n ' n, T! _ J+ }2 w0 ?For j = 1 To n 7 P$ E3 o( A* z3 }0 r; |8 h" ca2(i, j) = a(i, j) 1 l7 W1 J9 j' U' N/ t9 I+ [6 DNext. j( M! X0 D. M+ F X6 G
Next '将a()的值全部赋给a2()2 x, o9 e0 q0 ^8 D; h
m = 0 9 a) [, y' I7 }# uD = 1 2 i- G2 a7 [1 IReDim x(1 To n)8 q. G& c, ?0 r1 {9 C+ q
Print "--------------------------------" 2 v$ `& T! z" K* rPrint "您输入的增广矩阵如下:"" O. Y6 }8 B6 d, l7 G3 b
For i = 1 To n6 e9 [' J8 L$ N
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))3 j- |" a) z2 T; Y+ W
For j = 1 To n ( R7 A& o4 x5 y5 D8 A6 ia(i, j) = Val(Left(s, InStr(s, " ")))3 v/ ?/ N; s2 v5 w) Z7 R
s = Trim(Right(s, (Len(s) - InStr(s, " "))))2 R9 C* p# `: M4 V* S: k
Print a(i, j);+ J" F) [: c8 G7 s
Next ' U& M3 ?3 K# `3 ]a(i, n + 1) = Val(s) , a" J! E& m. JPrint a(i, n + 1);* p+ Q6 k9 J0 I% V5 @; Y/ j
Print ) z, n2 p0 h# T- [6 j! bNext& D: {3 {) h, \, e5 c; h" o: A
; j& e, \4 \. J3 VFor k = 1 To n - 1 '开始消元 $ Y* C# A9 h) j! a5 {( K* _, f* a0 _If a(k, k) = 0 Then# V& Q( Z/ T7 t# _& ~& z: G
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!": h- A6 z% I7 c) o0 d! f
Exit Sub8 Q7 H8 p$ k5 A. c: u1 T) j
Else' X8 {, _ e. b- {
For i = k + 1 To n 6 [8 p5 ` X# j2 Pl(i, k) = a(i, k) / a(k, k)+ u) z6 _& t+ `# Y
For j = k + 1 To n + 1 D M7 C( e" K- u1 @1 ]a(i, j) = a(i, j) - l(i, k) * a(k, j)* E, G) b! m: f
Next # P9 ^) D! J, M1 M( B' {Next 1 Y9 a) P. g9 n; G' l4 dD = D * a(k, k)- c2 Y, E2 E, T& T
End If + L8 t, O U3 |6 p3 d9 {0 ]0 h3 K0 eNext k '消元结束 / Y! _& K4 J; gIf a(n, n) = 0 Then @- M& y) D* Q& H. f2 O+ F, t7 DMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" z6 R% n Q4 o' I2 X+ D' `Exit Sub. l3 }: L8 _( v, @" Z* R
Else# Z1 Y4 _* A, ?. _; m$ I; J6 v" V
D = D * a(n, n)# m1 y" w7 F# c7 }# K- \3 Q l
End If & I9 t( U8 J5 C ^: UPrint "--------------------------------" 8 c' q; n# @4 T7 b! e* {* F: RPrint "系数行列式的值是:"; D5 |4 V2 @' Z; v" s* P: x
x(n) = a(n, n + 1) / a(n, n)1 l% I2 V( h) R; }6 O5 o9 v
For k = n - 1 To 1 Step -1 '开始回代 j5 }* ?1 b4 J, zFor j = k + 1 To n ( x+ O4 q$ A' ?# M! H, am = m + a(k, j) * x(j) $ X' O' |! A! J9 y" ?Next j 8 `8 T7 b7 V2 ^. _' g# Kx(k) = (a(k, n + 1) - m) / a(k, k)- |0 ]/ y1 I9 n8 I9 H4 T
m = 05 o1 s% [6 q" }. y# W
Next k '结束回代 K; i' L; e, p) o' X" d9 q
- o( G% h" |. m& zPrint "--------------------------------" 3 x0 Q E- m: ~2 lPrint "方程组的解如下:" 7 d6 s7 ~( `5 b6 ? 9 _) ^; r4 s; h% D4 r: ZFor k = 1 To n- k% e( ? l6 q7 e6 T
Print 3 J! T1 v) n# C, n5 m' L3 I/ |. _Print "X(" & k & ") = " & x(k) ; @5 h8 u5 t! n2 m* zNext k $ x4 O8 B1 R( @) X# C! ]& dPrint "--------------------------------"' U9 _* l8 m+ Y
Print "其中各行Ax-b=" ( D c( w) Y+ ]; `Print$ O& @2 Z, k# \. ~! E
For i = 1 To n5 d& ]8 I' n6 J8 u t
t = 08 I% c0 u4 k& n8 P# y/ @) y$ F9 }9 G
For j = 1 To n w) U7 R+ I& n& @
t = t + a2(i, j) * x(j) " Y5 F W2 Q# T* K3 l% l! ANext j 1 Q1 @: {) p6 _% u( e( J) ?t = t - a2(i, n + 1) ) [) k& o, \& }: ]0 W% {Print Spc(5); "第" & i & "行:"; t / O+ s8 E d/ z4 @ L, h2 R% KPrint5 i2 r* ^1 j( K% H+ i
Next i7 B' o) k6 y. d$ X/ m