Private Sub gauss_Click() '高斯消去法 : k. K$ Q; D0 dDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single `& ?6 Z& P, p t" P8 X3 j
i = 1: j = 1 8 `; G) X9 X h3 a( `5 kn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))3 ^# q9 ?7 y v- p
ReDim Preserve a(1 To n, 1 To n + 1)0 t9 U- U8 T7 y* {3 j% m; t
ReDim Preserve l(1 To n, 1 To n + 1)- v2 W7 D; x( _( w% A) E
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single ! y+ h- z8 U2 o0 TReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 3 E8 E/ t) Z, r7 a. [8 nFor i = 1 To n3 e/ e5 T$ O4 R- }" K8 U2 G
For j = 1 To n : h1 j5 V& m) g1 n. ua2(i, j) = a(i, j) 3 b" M% T9 v1 \* o5 B' F7 I5 d2 G" w( QNext + T4 e/ M4 V' I3 _: sNext '将a()的值全部赋给a2() ! w" a- k9 T* {& e. {m = 01 u/ [' s. h: B6 D9 I: A
D = 14 {& Z c% P4 D4 F8 E, Z
ReDim x(1 To n)- B# Q! |+ R& B; ^2 y, W
Print "--------------------------------" 2 x: B( B& |8 [/ y$ SPrint "您输入的增广矩阵如下:"$ j, Q, M/ n; Z) B$ X: T; j* H) ^
For i = 1 To n' f- |3 Z/ H: i4 M) _
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) " A3 W% h! R" w" SFor j = 1 To n3 m$ U$ A! {% R$ v
a(i, j) = Val(Left(s, InStr(s, " "))): u! o2 w7 s5 O. h: G. R" |6 C+ n5 N
s = Trim(Right(s, (Len(s) - InStr(s, " "))))6 Y1 ^# c0 E& B2 } N4 t& v& x! F
Print a(i, j);1 h: a1 Q* s; @- o8 Y* J
Next 9 o" Z# g* Q" [* y. o, L ra(i, n + 1) = Val(s) : E' z/ z' t0 [* NPrint a(i, n + 1); 2 ]+ U) i7 G: K) V1 }Print$ i [$ @% W; e: w% J, q
Next - X$ W! s5 T% |# d, C; O# r2 m/ B4 |& L7 Q" o' ^& p; P( Y
For k = 1 To n - 1 '开始消元- m% j0 e" x; _% U" ~6 [
If a(k, k) = 0 Then 6 }9 }: |+ f, R& wMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ; W. E% I0 p p+ \2 @Exit Sub - m. `% E- `/ {, O7 o7 BElse 8 V( q# R) ~$ }: c2 r9 M9 @For i = k + 1 To n : }/ }) c# T( u" I4 {8 Fl(i, k) = a(i, k) / a(k, k)4 s2 Z, h, Q8 _
For j = k + 1 To n + 14 d) u/ e/ l7 Q( E% _. S+ W
a(i, j) = a(i, j) - l(i, k) * a(k, j) " ~& I3 h2 f% M8 K; M& J2 c5 D8 ^/ r, KNext F& ^0 o5 Z; J7 F& H3 I( t
Next 5 B4 f J- l2 Q# P6 A0 rD = D * a(k, k) # ^5 c& _1 E! a2 T1 LEnd If% O+ Z; I" w2 K0 j
Next k '消元结束0 y, B, w; E( _ J* A/ ]+ a4 n
If a(n, n) = 0 Then $ D3 m) O7 R3 D& e6 qMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"' I+ V3 {! E% E& ]
Exit Sub8 u* t4 Z: s) Y8 ^
Else* z! @- F' v3 t' W* Z# t
D = D * a(n, n)" F' }( Y& b! Q
End If 1 M6 k9 S* [' \/ PPrint "--------------------------------" , i7 ?" H) j3 Z" ~" {Print "系数行列式的值是:"; D |3 U1 t. r' u# W* s* V
x(n) = a(n, n + 1) / a(n, n) 8 G$ z. x! V" q; MFor k = n - 1 To 1 Step -1 '开始回代 4 O4 ]# K) I. j* R- t+ g7 {: vFor j = k + 1 To n + ~+ `( d, |9 Y2 A" A, [m = m + a(k, j) * x(j) 8 q* n) z$ ?: ~ V1 k/ A# PNext j - N/ Q9 g; _% Tx(k) = (a(k, n + 1) - m) / a(k, k) 9 m& d c, F8 @( U8 nm = 0- n3 h) g W3 A9 x( e. R* Y; E. ~
Next k '结束回代. [/ @: E! X- D3 n1 G
1 |$ r+ c& H0 k& l3 A' `
Print "--------------------------------" 9 J; o$ B. U! c; Q* yPrint "方程组的解如下:" s4 i2 \9 \( X# a% `- o
1 U; O% G9 R6 o7 t6 M' F; r+ q
For k = 1 To n" F7 W: w' H0 g/ o: q2 m
Print , x( k) |# }$ W, |6 _* A( \$ nPrint "X(" & k & ") = " & x(k)! H' e- ^" d/ a. N
Next k) [- R: M1 ^5 ~
Print "--------------------------------" 1 L( l% J0 j m) ]7 q. o7 J2 f/ RPrint "其中各行Ax-b=" ' S' ~' m, T1 F# A5 c" [Print, c2 @) b6 p j" h. d9 ~9 f
For i = 1 To n ( s7 p. N- ?* g/ bt = 0+ o) f; R& B6 D" M# R6 c
For j = 1 To n9 Z, N- ^# Z; N5 j
t = t + a2(i, j) * x(j) [0 m. Q: w; B6 U2 _6 n
Next j B/ S, | ]5 Wt = t - a2(i, n + 1)9 b0 u+ d5 q1 V8 h) [) x8 @5 Q
Print Spc(5); "第" & i & "行:"; t " ?- R' z7 Z v9 \; E: cPrint( a; O# y" l& \; H) X7 I0 c: G
Next i# ^! z+ k8 [9 V4 d9 r
r. P* x Q2 T2 k" d4 cEnd SubPrivate Sub gauss_Click() '高斯消去法 # T( t. v* b2 b6 P r6 ~5 aDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single( v# E* {; F7 A+ T! F- Z: Q; s: E
i = 1: j = 1 - l1 E" g+ h% u% v8 G; pn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) ' ]3 Y) z- N+ B1 I& [2 ^1 UReDim Preserve a(1 To n, 1 To n + 1)7 @. T0 l9 d& k8 F2 `/ \! [5 n- |
ReDim Preserve l(1 To n, 1 To n + 1) U+ [, Y: }( a, L( X/ A/ WDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single' r6 [/ r# A+ m2 {
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() , I5 A: k' P4 ~' M( u- ^* M: U' JFor i = 1 To n h6 q! G/ B" I1 `
For j = 1 To n8 ~1 x; `# \* ]) |7 ^# u4 Y' k* d
a2(i, j) = a(i, j) / z- A- N3 W, S# U$ lNext* | Q0 g0 w$ X
Next '将a()的值全部赋给a2() 8 _0 @$ f$ ^& T) ?8 r* i5 ym = 0 4 |8 ~5 a: _4 L9 x6 @; {" DD = 1. B- F, R! g2 j9 R. S% d
ReDim x(1 To n)! ^% \, A4 F1 K% ^3 N
Print "--------------------------------"( i$ S- t8 }" V% y; N2 }! }6 \
Print "您输入的增广矩阵如下:" 1 e. w: h9 N$ d3 D, C; lFor i = 1 To n : o/ [$ z, W8 Is = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))# w% Z4 k* |8 ]
For j = 1 To n . Y+ f1 ^1 q' @" @a(i, j) = Val(Left(s, InStr(s, " "))): d& r* k% ~0 C8 R1 R! ? `
s = Trim(Right(s, (Len(s) - InStr(s, " "))))' W6 A* Q$ W/ Q" v
Print a(i, j);" F& [- J# j: \3 d) ]; D! j7 W3 E
Next- {- b/ X0 G1 F
a(i, n + 1) = Val(s)+ f3 g- A( C& @. l
Print a(i, n + 1); 5 e6 p7 v; X7 y& r, K ?Print& e: f ?7 h8 P3 l6 z+ B
Next ) Q3 f7 f' o$ L5 h% Z& K0 r0 Y. C4 F0 {* G+ Q& |" _
For k = 1 To n - 1 '开始消元 # x( Q2 m7 I/ `If a(k, k) = 0 Then1 ?8 R. t9 |# z2 |2 S7 D. x
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"/ M3 `4 J' a/ j3 L5 b' N
Exit Sub % d b# R8 d7 ?. t( e7 Z4 AElse. a+ N' v ]1 ?# ~0 \- g2 `2 R
For i = k + 1 To n , _. B) B0 o4 K- K; Q/ fl(i, k) = a(i, k) / a(k, k); M L- H6 N5 f4 S M4 G" E
For j = k + 1 To n + 1/ m0 L! t% I# p
a(i, j) = a(i, j) - l(i, k) * a(k, j) - \' Q" Y% W5 y5 P- kNext ! H( S- {5 q) I/ gNext; F( l2 {$ m# _/ T* D9 e' ~" M1 p
D = D * a(k, k)% E$ m/ g6 V W* Z! t6 k
End If. `/ d# p9 m0 |9 Y B
Next k '消元结束 . h) P( u( _# G2 @$ J! T7 f7 IIf a(n, n) = 0 Then 9 t# W6 O2 U2 _" A, XMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" ( C$ o3 G% P9 k! zExit Sub. `$ [! j8 @6 d6 Q7 d
Else c5 J) H! n5 vD = D * a(n, n) " d4 h1 o, M z9 ZEnd If# k# [1 t4 i% d
Print "--------------------------------" & p2 R( W, V% v0 g+ K kPrint "系数行列式的值是:"; D$ c0 r& y. i0 Z* D5 ^
x(n) = a(n, n + 1) / a(n, n)3 O. B# d8 [* ^0 ?" f
For k = n - 1 To 1 Step -1 '开始回代; P! m7 s% w6 H3 w; M$ U1 {% U/ T
For j = k + 1 To n $ r A" E( ?# i# Tm = m + a(k, j) * x(j)8 j% d6 v. e D+ a& H6 `' |& h* g7 N
Next j - T2 Q: E. p. K1 jx(k) = (a(k, n + 1) - m) / a(k, k) , S1 T; I% f3 i, A; r% Wm = 0% E' C: F+ |% }0 h: q+ l
Next k '结束回代 , P- p! j0 z$ K( h, m/ O+ p) ] 9 W; g, Q; Q b" ?$ Z, T( fPrint "--------------------------------"5 ?' T' H- \; e. @" U* J
Print "方程组的解如下:"1 w& e% s: k& R3 C) H7 ]
+ Y, y6 I% v7 [7 j" g, p- y/ xFor k = 1 To n - p R, o9 R# i; v7 e R' wPrint) |1 I$ K- J2 ~- d
Print "X(" & k & ") = " & x(k)# d: J! e8 w( Q- \$ d& r
Next k. u4 B! A+ N0 n0 S- q8 ~. S$ C
Print "--------------------------------"3 g" ^, v1 ?: r' J, g
Print "其中各行Ax-b=") B& J* f9 S u% l: y# Z0 c
Print 0 F3 W2 G& ~4 uFor i = 1 To n5 U$ j# W( G g
t = 0 9 K1 J4 J. h) q- L5 a. vFor j = 1 To n0 \3 a# B; `: Q% g$ T/ ^+ A
t = t + a2(i, j) * x(j)7 \) `. y* n; }+ ~; T, i
Next j/ C8 {! r1 d* k9 e' z
t = t - a2(i, n + 1) ! I; q4 C( P; a3 `Print Spc(5); "第" & i & "行:"; t . _8 t3 x. J3 J- i2 I& zPrint 7 t% O& ^& {7 G( M$ ?( S4 PNext i " S" D' g3 l# H6 g2 y8 s6 _, I8 k6 K8 J) W" V$ }2 f/ \
End Sub