Private Sub gauss_Click() '高斯消去法7 `0 J( g; B8 u" u
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single& }: E) S. S$ q( R* D$ d
i = 1: j = 1 1 L6 `: ?2 N! e3 S+ O" l( xn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) + t3 K, I( U5 m8 ^1 ]5 d) ~6 A# y9 J1 rReDim Preserve a(1 To n, 1 To n + 1) - i7 ]. C2 k# e- g, {0 [+ cReDim Preserve l(1 To n, 1 To n + 1)+ I" m+ l+ ^5 ?. N/ ^/ B
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single 7 w/ F U" t7 p: W8 a4 DReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(); n J& {/ o9 c
For i = 1 To n " K1 n6 c! L9 `7 bFor j = 1 To n ! F' G7 s) a Y- o! j# la2(i, j) = a(i, j) , ]; s" i. X: K2 A( b( gNext) I# W7 T4 K3 O) t
Next '将a()的值全部赋给a2() ) s( m# {# {* [+ k7 C0 hm = 0 I( F5 Z7 O! ]6 y4 q. p
D = 1 & q8 `+ v& g/ Z7 N+ f' v. M2 ^ReDim x(1 To n)" b! B+ u2 }7 [5 ]/ g" ^
Print "--------------------------------"9 n8 \# [; d" M! a+ g+ E
Print "您输入的增广矩阵如下:") z H5 `5 k# ~; R
For i = 1 To n/ H$ i4 }2 {6 b
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) - t, S. E' ~$ s/ R8 [# v3 KFor j = 1 To n) W% V3 @$ w: g
a(i, j) = Val(Left(s, InStr(s, " "))) 7 o7 Y( ^: _; L- js = Trim(Right(s, (Len(s) - InStr(s, " ")))) $ d/ r$ h6 o3 v3 r4 DPrint a(i, j);& ?9 B# e" l e+ j, o5 |
Next7 H6 I5 c( f1 O
a(i, n + 1) = Val(s) ' O+ Z2 s; }& Q" i8 w4 ` W* oPrint a(i, n + 1);* R# i# Q; r0 T8 T
Print. A4 ?- _# s4 m/ R: n
Next# {% u% Y1 O2 o2 x, i! p
' B } a: q1 D: H; Y4 d. V. y
For k = 1 To n - 1 '开始消元 % i. v+ l- I) d9 [( l( kIf a(k, k) = 0 Then 5 G* G6 o7 D+ H% w$ F# H% oMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" % C: R1 Q K* D# qExit Sub 8 ? D/ j* `& n4 a- V; \: @Else1 y' o& ]4 E& p
For i = k + 1 To n 0 Q0 B- G* U, f& u7 x( J$ D2 Z7 o6 dl(i, k) = a(i, k) / a(k, k)0 w5 o4 h2 ?& t3 Y: B' W+ i+ w
For j = k + 1 To n + 14 Z L J D; g: ?
a(i, j) = a(i, j) - l(i, k) * a(k, j) # c, ` W1 L! D. {4 W$ mNext 1 B: [. F7 s5 A8 Y5 m$ VNext 3 I( c) @$ Z' KD = D * a(k, k) h" Y5 l, d1 N; T" q0 V+ C' B* h
End If) g" u. g" |. Z6 p
Next k '消元结束 ( }! b0 i0 }* i: OIf a(n, n) = 0 Then3 T) p8 {8 A$ ^/ l1 F; w( ] M$ k- e' K
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!". @+ a, F; ~/ d% t+ J0 e
Exit Sub6 }7 r. ?# t3 s, |7 k
Else 2 u8 Z3 M+ R0 a# p" ^6 g( }. qD = D * a(n, n) 1 {/ o+ ]% Q% Y1 A9 HEnd If3 h% i0 V% g9 Y7 b" ]7 J8 h
Print "--------------------------------": P& S. E1 |' Q
Print "系数行列式的值是:"; D ' C, A& d& c. p, d6 ` Xx(n) = a(n, n + 1) / a(n, n)9 `3 X8 ?2 d7 q. x2 G7 N
For k = n - 1 To 1 Step -1 '开始回代 ( P/ c. v, T5 ?9 ]: S, kFor j = k + 1 To n + O- e) b' i0 p) A x7 E9 Rm = m + a(k, j) * x(j) w8 l8 M* d3 @2 f6 r
Next j # m* l& A0 G; }5 O; k9 M& _: wx(k) = (a(k, n + 1) - m) / a(k, k) 6 [7 m3 k4 `& X wm = 00 R3 `. j' R% _, C, M
Next k '结束回代 + X& M8 e3 d$ H 5 ?4 D# }$ D' J3 _Print "--------------------------------" 1 b+ V% Z5 ]* I# Z& q" \Print "方程组的解如下:"1 T( f% H- z: [
2 `: B+ C( L- e2 \; A
For k = 1 To n8 U& F. }# W! U3 b0 L, l$ ~
Print6 ^; P7 f1 ^+ p5 a' V
Print "X(" & k & ") = " & x(k) 7 ?! L. ?( w9 ~ `Next k) @* U! e. ^1 R0 g9 [. G
Print "--------------------------------" + a7 U+ @0 \5 a5 J4 }/ wPrint "其中各行Ax-b="& |' v! b* |" T$ R& O% y1 X/ n+ N
Print , _3 R6 _$ x) L8 b* w9 ]6 ?For i = 1 To n# {& d5 d; y# j1 _* K7 u4 L: _/ O
t = 05 ]4 T/ d+ q" b- W
For j = 1 To n4 o' n1 ^6 E3 u! K8 L- d3 K
t = t + a2(i, j) * x(j)4 E6 R4 U$ a6 R% Q: E0 d
Next j , A8 S: I! L5 Z: x$ i m2 F0 [7 Mt = t - a2(i, n + 1)1 r0 j, T9 M. V! I6 j2 u
Print Spc(5); "第" & i & "行:"; t 6 B! g, W: d) N* r- C( z& S/ QPrint 9 k6 y% d6 f. I, b7 E8 }Next i$ V7 _- G3 g/ W& m+ F+ ~
! d5 I. P+ ]8 ^6 b( Y, p
End SubPrivate Sub gauss_Click() '高斯消去法0 E' ~( w) r) W9 T2 U
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single / |3 I5 L9 j8 p+ Zi = 1: j = 1* w* O9 w9 H. @% i# R$ S3 q
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) " X/ Z+ O& s0 bReDim Preserve a(1 To n, 1 To n + 1) , {* Z* ^# a& U# p5 {; J! |ReDim Preserve l(1 To n, 1 To n + 1) 3 T0 h- Z* A: B) C' nDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single3 a; L( b! i! b$ X; r7 d8 }
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() p8 k( p6 S1 m& ~+ sFor i = 1 To n4 G( n @, G& M6 q7 L; R" b6 m
For j = 1 To n 4 c+ f e c8 O$ Z2 Ra2(i, j) = a(i, j); P! b$ O0 U7 K- C. s5 r
Next. S6 A s3 K8 W' E$ ]
Next '将a()的值全部赋给a2() # U) p4 z. y2 m" tm = 0 2 [# }0 q0 u9 [/ _: BD = 1 7 @. t) l) ~- n9 I7 S! {/ y" {ReDim x(1 To n)) _5 x0 [$ i+ V6 h# T
Print "--------------------------------" , b" @) G2 _+ C& p% oPrint "您输入的增广矩阵如下:" ( _7 [% u" J2 z$ m+ z' j6 F7 lFor i = 1 To n . R4 T* ?, a- T0 w& Ws = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))2 [2 A9 ]3 J) T; U& {
For j = 1 To n 2 H/ n8 p' C9 Va(i, j) = Val(Left(s, InStr(s, " ")))' A/ _" Q% {( o" _& o( I" T
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) - r6 C) F: q6 r) @Print a(i, j); 6 ?; }7 U& f/ U4 L0 [/ n% S5 tNext6 m0 w0 Q% q- E( F. Z$ l+ D' }
a(i, n + 1) = Val(s) 4 }# I. y2 O# \5 F& J, W; m* [Print a(i, n + 1);/ c: k6 |- X8 i0 b
Print 9 A5 }6 t& s" ^- n$ A! ^Next4 ?4 e, g; D3 Y
) ]( n: `0 Y1 m; Y
For k = 1 To n - 1 '开始消元$ i3 `2 a3 U* ^% Y1 O
If a(k, k) = 0 Then- R! K a9 t- L. T. w, x1 ?
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ! U& t" J7 d1 @, b2 L9 X& hExit Sub1 u6 A. V# i" d7 k' O! G
Else ( m1 s: l* d; `" n% B' v! RFor i = k + 1 To n . L& y; d3 p5 B: K+ k# o- v' d$ {l(i, k) = a(i, k) / a(k, k) + B. |4 |% T' X- {+ R$ SFor j = k + 1 To n + 1 7 u5 _" B3 J- O: H1 xa(i, j) = a(i, j) - l(i, k) * a(k, j) " p( t$ u( f+ k, |; i8 d1 y. YNext& B+ I2 n0 U9 ?( Y* H" _1 {. z! G
Next$ f4 C) ~0 _4 S, ] e+ ]
D = D * a(k, k)* v# \5 r) x) M; N8 t
End If 8 h: G6 r! q2 e1 j, ANext k '消元结束 - M* u$ x$ N' b. t. mIf a(n, n) = 0 Then/ g, c5 s9 S/ S+ _1 A% c
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!", L$ e' K9 n1 E+ e
Exit Sub . X- v5 X0 v9 s3 m- i2 wElse ! F1 \; E T& R' q$ p. ~D = D * a(n, n)# {' v( F# V% H+ y5 n
End If/ i# F: y7 S, a1 W5 s
Print "--------------------------------" @" s3 F8 _( g0 r6 s7 D
Print "系数行列式的值是:"; D . Q' b2 \% z+ ?7 A4 Ox(n) = a(n, n + 1) / a(n, n)5 d+ |( Q% {* k1 h4 ?
For k = n - 1 To 1 Step -1 '开始回代( {, {3 O" d, {) I3 k
For j = k + 1 To n, C5 k# e. C S1 l! b# Z+ f6 U1 N
m = m + a(k, j) * x(j)$ d$ \1 {! E+ t% t5 u
Next j$ j( A/ H0 J' \3 o
x(k) = (a(k, n + 1) - m) / a(k, k)8 ^5 \' v7 P1 ~) {8 L1 c) F9 N7 [3 b/ a
m = 0 & r) F/ i+ q+ e SNext k '结束回代: f/ Q$ w: t6 b$ Y+ ~
1 s. {& q( c5 z5 s3 r# T2 e
Print "--------------------------------" ! t! F. C# H3 f8 O0 P }4 jPrint "方程组的解如下:"4 q0 z2 S6 W$ w
& n& Q2 @+ A/ ~
For k = 1 To n " [, B4 T, V6 v. i9 gPrint ; X+ x ~0 s; j& A. S. Q3 U& |Print "X(" & k & ") = " & x(k)! F2 v( `% z% z+ U
Next k4 N8 y. `% m8 {( u* @7 |2 s
Print "--------------------------------"! Y0 t O; x% F# o" E! Q, i8 V
Print "其中各行Ax-b=" & y5 j& g# F+ Q; b$ e; e% C$ ~8 @/ EPrint* x. W m4 J' `; ~% ]7 y6 T
For i = 1 To n; v3 W# j8 v) _0 t6 U
t = 0 + X$ ^5 C" W, J, d8 SFor j = 1 To n ( A$ X% i2 y& I9 F5 s2 ]2 _4 U8 Et = t + a2(i, j) * x(j) 9 w5 s( B. o+ A6 n2 fNext j . a- q" z% |% ~) p' p7 |2 qt = t - a2(i, n + 1) . o9 R f6 ?. J, T; F0 GPrint Spc(5); "第" & i & "行:"; t 6 u' m5 r+ A6 ]3 VPrint . J# K8 _5 b! `" m0 b7 g8 z8 ?. c. gNext i 7 L# K0 G$ `. Z* I3 [# A& M . h0 y: C$ x$ eEnd Sub