Private Sub gauss_Click() '高斯消去法 5 u% O% g$ F5 f N0 w! ^! Y# dDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single : `6 c+ M {1 W& j4 }i = 1: j = 1# n4 x5 U' F4 q- ]! U
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)); s- f! p, P8 s+ |1 E
ReDim Preserve a(1 To n, 1 To n + 1). y' G @8 p( S5 D: U
ReDim Preserve l(1 To n, 1 To n + 1) 6 m6 B4 t6 O* H$ T: SDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single 3 {5 {) N M( @) IReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()7 M/ ]6 B7 P3 ]6 H) B8 D4 d0 X+ P2 k! k
For i = 1 To n! {+ R2 t* ^, W; Y& P+ S
For j = 1 To n _' k7 ?5 P5 _/ va2(i, j) = a(i, j) ' L& t$ [6 w x# V% s0 p; [! mNext + Q. A1 [) Y6 |8 d5 gNext '将a()的值全部赋给a2(): Q- D4 z+ c0 \9 c, B+ j
m = 0 ( m4 L) c* P8 _! A1 pD = 1. e& K0 n/ O8 I; V$ ]
ReDim x(1 To n) " v' c1 U' N9 q! e% NPrint "--------------------------------": N1 O7 u' M2 i1 ]
Print "您输入的增广矩阵如下:" 4 ]1 J0 E% M1 K, y8 m" EFor i = 1 To n2 d- j% [( Z! z# e, M
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))2 j+ I8 G0 n7 P4 G1 j9 {
For j = 1 To n ! k5 U) p. A9 n( {- R2 i& oa(i, j) = Val(Left(s, InStr(s, " ")))2 ^0 ~6 `" E+ s* H5 A
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) $ P& h" d8 H) ?Print a(i, j); 4 u2 j& L. I% G6 ZNext V3 ^1 ]: m, ]' v9 X# o1 |a(i, n + 1) = Val(s) # u3 _: I! ^- V) a; [. C5 N4 NPrint a(i, n + 1); 3 g2 Y+ {2 Z( r+ ^* [# KPrint 6 e& z; N: d% MNext7 ~' s! h, a* e& S6 T
; j2 g4 h5 \& T
For k = 1 To n - 1 '开始消元 6 Q, ? p/ j) N5 ^, s7 j+ @) q" sIf a(k, k) = 0 Then / Q( F: @6 o0 J" wMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" 1 k$ e* y9 t3 |6 ]1 i) CExit Sub; N( B# O7 b4 t1 ]& j
Else q- n; Q* L/ @- i1 \4 e1 W9 ]
For i = k + 1 To n H. l- @2 J7 O! G& X4 }
l(i, k) = a(i, k) / a(k, k)& T3 ^* p& O% C( W
For j = k + 1 To n + 1 1 t+ f0 z7 S, u- {0 \: ea(i, j) = a(i, j) - l(i, k) * a(k, j)& D& `" V8 M/ d
Next! z" T! j5 O6 t
Next7 e9 O. q: ^( L0 t" p
D = D * a(k, k) 1 J5 E4 z" [* F, y5 V% d- \( ]End If & S L$ U, R. Y* R$ D( aNext k '消元结束+ @9 c) z3 q' o: c- f7 S
If a(n, n) = 0 Then8 I+ R0 d7 \/ R% }6 r
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"2 }* c4 S. U3 O
Exit Sub- ?$ p$ x; Y2 b2 \
Else' h! |9 H( ?. t2 g% ~. w5 E
D = D * a(n, n)- G0 I3 N7 N8 ~
End If , D7 @# X! @0 f p3 J& i( yPrint "--------------------------------" 7 L4 `! g3 O8 [. V8 S4 bPrint "系数行列式的值是:"; D 2 {/ c3 a# W- h8 Ux(n) = a(n, n + 1) / a(n, n)$ W/ \! o+ w h/ v, a3 ?
For k = n - 1 To 1 Step -1 '开始回代6 a( s3 \+ r0 _+ ]* P+ B- l# @
For j = k + 1 To n/ d0 C- m0 }/ ` U, P) S
m = m + a(k, j) * x(j)/ c3 N, a( {, L5 T$ n
Next j, r2 v* N7 ?- E$ }4 R
x(k) = (a(k, n + 1) - m) / a(k, k) ! Z6 n1 R+ H# b4 F- km = 0 ; y4 X: x" P {; W7 b8 g3 }6 qNext k '结束回代% f+ [& j* V/ d' u% ]5 p9 K
6 I# e3 }( m8 a% [
Print "--------------------------------"1 _7 `0 H# T$ y' m
Print "方程组的解如下:". @; X' |- v% M2 F
6 H& J& K9 A8 U! B% h
For k = 1 To n % Q; ~% Z* F. G! |* e6 MPrint * x9 n3 B$ z D& C& ^0 I% N: oPrint "X(" & k & ") = " & x(k)! T& H* k- R. y3 ? y* \( K6 y
Next k+ g$ T# M& B& R
Print "--------------------------------"$ x0 W# @/ W( F- e0 a8 Q2 s/ L
Print "其中各行Ax-b=" + w- I8 w$ G" |% f6 n# q7 lPrint ' t# ]4 V( N! T$ L: c! m* i: ^For i = 1 To n . i7 B5 R/ [' u6 a: i: }& P( Ft = 0 . l: A; c" h. J% o8 |. r2 r5 U0 VFor j = 1 To n $ |" U; v- {' E `t = t + a2(i, j) * x(j)# ~. s: ^% u/ H% x6 B! D
Next j 5 K* C* T; H) C+ h$ `& h5 }* U) ut = t - a2(i, n + 1) 0 C3 ~5 t3 N% z, v( s1 r$ @Print Spc(5); "第" & i & "行:"; t9 P! d1 |, j0 h
Print1 [, k- `. @8 l* V& k
Next i- s6 B3 R e, ]% {; P6 C
' h0 ^& W! t0 SEnd SubPrivate Sub gauss_Click() '高斯消去法5 |! z# q1 z: |# U! U N
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single * L0 |6 {3 c2 u; s Ci = 1: j = 1. y5 c2 |# z& W
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# i) l8 y0 Y+ l
ReDim Preserve a(1 To n, 1 To n + 1) 6 G( {( H# a7 ` Q7 {ReDim Preserve l(1 To n, 1 To n + 1) 7 g2 w6 M1 t% p* e, S- F( k7 cDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single , |: P; h, d3 K8 m$ AReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() * c7 N0 d P1 s( C( u: I0 S6 }For i = 1 To n - b5 g$ p, E/ _8 LFor j = 1 To n0 z/ F/ |* N' h2 v2 {# O z
a2(i, j) = a(i, j)' g& l& H! ^" M2 ~
Next7 ] Z. d" h: `- y9 T, G0 E
Next '将a()的值全部赋给a2() , R: o4 l! } c; r. }! mm = 0 1 @+ I0 ]) V, q7 gD = 1 3 x* M: f4 ^7 W/ IReDim x(1 To n) ( ^# p. c( e! jPrint "--------------------------------"# A* d) N4 Z# _" ]0 u
Print "您输入的增广矩阵如下:" ( D3 u" Z/ q& A% d3 f) H: WFor i = 1 To n ; W, ^% X" K9 U4 z ?s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))% z, \. w2 a7 k% p; P
For j = 1 To n " h* K0 U+ l U7 P, {1 z0 v. Ta(i, j) = Val(Left(s, InStr(s, " ")))4 x+ ~6 G' T: q, y+ _1 z
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) - [" s! W6 B& j4 `' S+ @6 SPrint a(i, j); + j' ?/ C* d/ F uNext) J! G1 p! u3 Y
a(i, n + 1) = Val(s)0 l. f4 [$ V5 k0 i6 G" i
Print a(i, n + 1);% ]4 V4 b$ E+ n& v/ ]7 B! {! P
Print/ D& F/ g4 i7 a
Next , ]% P# c# M; X# G6 x# P 4 X% ^ v6 x: _. aFor k = 1 To n - 1 '开始消元 # b7 y7 s- [ i _4 XIf a(k, k) = 0 Then % J! S) h. D+ v, bMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" 5 {! X0 P, t# U: v' `Exit Sub0 Z" m+ `' W+ I3 I
Else Z$ X* V6 c$ n$ ?
For i = k + 1 To n: Y4 I3 h7 o# A# x) Y0 T
l(i, k) = a(i, k) / a(k, k)+ F7 I3 G* h5 |- b
For j = k + 1 To n + 1 8 k8 D$ t$ F/ v' o! y* U3 F: N t! Na(i, j) = a(i, j) - l(i, k) * a(k, j) / w8 o9 F/ S8 Z2 A1 K# MNext2 W2 i: k" P: C( N' g7 m: ?: c; C4 s
Next c4 k" D! I; x3 R% H+ N
D = D * a(k, k)$ H8 `7 t, K j! m) f( S) c
End If ( y: U; i. Z) [: }. H, [2 yNext k '消元结束4 k3 N6 W$ \" b5 ~" N9 X( f
If a(n, n) = 0 Then * v9 ?% R# h6 T; ]( Z) i B& u! sMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" ! o t! }9 ~3 y& X' m# x5 F/ JExit Sub 2 z! t) \ j7 h& ]2 S' q% hElse3 g# Q* `. R$ E+ G6 H
D = D * a(n, n) : B4 u6 V0 z! A, |End If 9 q) v q# j s: U- y$ vPrint "--------------------------------" , ]1 D9 \1 {+ xPrint "系数行列式的值是:"; D % \/ V. U: e8 i v4 V- u9 vx(n) = a(n, n + 1) / a(n, n) 4 c* m$ E, o* ^' g7 i6 J3 hFor k = n - 1 To 1 Step -1 '开始回代6 O- S- z6 X) S6 M& _' B+ a
For j = k + 1 To n + |$ X1 W' z/ ~2 A: Dm = m + a(k, j) * x(j) g8 V/ H& R, ` J* }Next j 0 J) K5 C) ^3 t. {3 G$ p9 U5 ix(k) = (a(k, n + 1) - m) / a(k, k)' Q e' T4 r1 A9 f$ _
m = 0 : O5 Y" x% l/ r- {Next k '结束回代 9 {& i U, Z1 Z( K* ]/ t + L% W( M: W: a7 j; s+ J3 |Print "--------------------------------"+ @/ ]5 R: h& X( I. h
Print "方程组的解如下:" 8 }! ]: B. K: U, C, I8 [! C- Z/ o. G- k( X! L
For k = 1 To n9 e* {& N" O M5 p, V
Print% ~5 L% l Y, F9 P) k) g
Print "X(" & k & ") = " & x(k) 6 @% P' E- r- H2 b0 HNext k u9 [# G7 V! J$ U$ u
Print "--------------------------------" $ H5 B; Z2 J" r% Y! |Print "其中各行Ax-b=" 2 B; Q/ s2 U7 G3 M% s5 FPrint @2 g3 [- T2 W2 d, a5 ?% |For i = 1 To n 8 `3 m' |1 L0 f$ Z& A/ ~& _t = 0 3 m2 h7 u, O% W0 P, b! R7 pFor j = 1 To n 8 S0 l$ ]1 v8 c0 H2 ^t = t + a2(i, j) * x(j)$ i. Q! ~+ K' x( @, r* d
Next j 0 j6 F+ o+ t' _+ e1 z, Ut = t - a2(i, n + 1)$ a+ P. g2 d0 F% L. m
Print Spc(5); "第" & i & "行:"; t( Y8 b6 F! `# ]/ {+ V* h
Print4 r' X2 Y y7 f7 |1 u% \) g8 o# O
Next i/ m9 {! Y8 @; D9 f7 r