Private Sub gauss_Click() '高斯消去法 2 t: |( E. F4 Y0 tDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single , w0 b/ O* C' ki = 1: j = 1 6 w$ d' M! X, _: G: yn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) ! R' ?" {. C' WReDim Preserve a(1 To n, 1 To n + 1)$ w6 p- E" i# L. k
ReDim Preserve l(1 To n, 1 To n + 1)3 X6 m, y9 }) z/ e4 Y( i
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single2 T% r3 w* p* A1 r
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(), S4 [2 y& f4 ]% T! O$ f" _0 K7 L
For i = 1 To n 1 s0 K8 H0 f4 j/ t/ GFor j = 1 To n ; o& t7 z+ @0 h5 v* u7 ^+ w: ra2(i, j) = a(i, j) * g) j% G! ^% B2 V" F( ?Next ( Y: Z* G5 Y! y* c' _Next '将a()的值全部赋给a2(). B( ]+ G3 P+ n/ @! n
m = 0 ! G9 e! Z. i9 i' p& s: H CD = 1 ! t9 X- w1 I. S( M# ?. h9 [ReDim x(1 To n)+ d" e0 ?! C. c4 n9 a: t
Print "--------------------------------"6 }5 |: K% k/ w* ~9 x% Q
Print "您输入的增广矩阵如下:"( r1 K; W( Q4 r2 k) D
For i = 1 To n, K: F/ [3 R& D! S4 @* L+ [
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")). J0 d3 C0 p7 t3 U
For j = 1 To n$ w7 H* K0 W1 |8 o8 U9 ]
a(i, j) = Val(Left(s, InStr(s, " "))) # f }$ r% a; t6 J6 fs = Trim(Right(s, (Len(s) - InStr(s, " ")))) 5 V5 @) [; a6 }9 Y" L: F8 pPrint a(i, j);1 c+ C% [' u2 K5 B1 Q) Z0 h
Next% H4 g3 Q( G9 q$ [2 ?6 R1 o$ _
a(i, n + 1) = Val(s) + x) R, T$ G+ K2 f7 lPrint a(i, n + 1);9 Y6 j0 H7 B/ i. G
Print5 j6 p; l+ ]* Q- a' L
Next* A# K' Z7 u1 w+ \5 J, w
3 I* `1 U- O) y) C8 n# oFor k = 1 To n - 1 '开始消元 * d4 y, n* u$ G" R- i( T7 V4 WIf a(k, k) = 0 Then ( l9 W; Z* [. c3 s: Z% R; CMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" " Q/ c& p0 |" d4 h: iExit Sub ' W" A C% @( l, xElse : K9 f! v: G2 v' R% vFor i = k + 1 To n7 c- y$ X N/ ]* t( t2 v, h
l(i, k) = a(i, k) / a(k, k) - u, A# L! O/ GFor j = k + 1 To n + 12 h& X" x/ `9 M% A) r
a(i, j) = a(i, j) - l(i, k) * a(k, j) + S1 Y9 R. x6 y# _9 P% F2 ENext, h2 p9 J" C P- o6 i! x1 o
Next 0 b; ]8 I/ e4 ?* E7 Y4 yD = D * a(k, k); N" P/ R W/ z) J
End If: k) K$ i. A A) T
Next k '消元结束6 {8 `7 e0 o( U. x( c, l; P
If a(n, n) = 0 Then & a2 z. f' J4 D9 P2 ^; X; @MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"$ ?1 }0 s" X/ {1 {' s
Exit Sub 7 a# D9 s$ k4 u5 R4 g; x8 f( FElse - Y9 [# q$ f# nD = D * a(n, n) ; P2 R+ F1 G! F0 I" A, c2 i& IEnd If% I8 D* }7 X3 b# j) }+ t0 a
Print "--------------------------------". C2 Q1 W2 p( i
Print "系数行列式的值是:"; D & R3 M" x# j: e& `$ S3 U( o; `x(n) = a(n, n + 1) / a(n, n)- s4 w, R7 E1 W; A8 ~# C! ?. i9 m
For k = n - 1 To 1 Step -1 '开始回代1 }% ]& B9 v9 j; F! U
For j = k + 1 To n; D% J! u* t7 V& F4 p c
m = m + a(k, j) * x(j) # q& _) k) z# Y: W, r( LNext j& U6 t' B5 Y$ P8 Q+ M
x(k) = (a(k, n + 1) - m) / a(k, k) ( m5 C1 C L8 e& J" I" |1 vm = 0 ; z' A3 Q' H4 m1 O3 s! ]Next k '结束回代, D( x8 |5 h. c! o8 l
4 g1 `/ ]" m: f0 _# U- D' B
Print "--------------------------------"% i& w6 \: n+ d2 d$ Z0 Z" d- o
Print "方程组的解如下:"1 [* r6 S9 b6 I3 X- U& |8 w
( b# J5 k4 d5 M+ t# ]2 rFor k = 1 To n* |) J9 l$ R, S5 V/ h
Print : c( ~. ]7 N/ L+ Y& c; h: @Print "X(" & k & ") = " & x(k)" g: E: a3 u) G! P& f( s9 j
Next k / Y. H# S; k( X5 m& MPrint "--------------------------------"* o" N5 S) E0 {# v% c' D$ T$ i
Print "其中各行Ax-b="5 W0 K; o/ z) n9 b# @6 a3 E
Print 3 S3 e6 H8 U1 {0 d" SFor i = 1 To n: {8 ]* b( `! v4 r+ Z) r* E/ F
t = 0) v- s" ^5 }! A
For j = 1 To n 5 X6 p1 V; D1 g/ r: V2 @t = t + a2(i, j) * x(j)+ I* j$ N- I" K$ [5 p& g7 s6 Z
Next j # m6 |) g4 W8 U7 rt = t - a2(i, n + 1)* b, @: M* I- |1 |' u
Print Spc(5); "第" & i & "行:"; t ! H8 {! C: C2 Y$ h7 cPrint & |0 V0 I5 _/ VNext i 3 D6 G4 d. c5 I: g 9 ~* Z- k# \% ^. [End SubPrivate Sub gauss_Click() '高斯消去法 5 c* E* ], o1 t; m ^8 mDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single9 o0 d' L% B7 l" ^
i = 1: j = 16 \; `: v% r+ e8 w7 L
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))) z. x, o1 N0 a, [0 Q5 s! `
ReDim Preserve a(1 To n, 1 To n + 1) 5 ^& C9 [+ c2 E4 S5 w1 BReDim Preserve l(1 To n, 1 To n + 1)! t' h( {- X8 O
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single . f" L! q9 `- @+ k) H3 S; DReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()" y& y) z. T* u. [' V
For i = 1 To n/ g6 P5 ^3 K5 S
For j = 1 To n - w7 B9 T1 [9 x" Ma2(i, j) = a(i, j) & ^ v- z# r, s. }Next' w7 C: ` g/ U5 t# _0 C* P6 k3 C
Next '将a()的值全部赋给a2()1 O- c' H- t& Y8 Y$ m
m = 0 ) m+ o! }5 B' f8 M* z9 [D = 1 3 c5 o% m3 t" G- A: `ReDim x(1 To n) ' C# R/ |9 _% O& Y0 @) e8 NPrint "--------------------------------"( Q0 G$ b+ e2 ^9 v! B& }, e
Print "您输入的增广矩阵如下:"0 c" P2 T# ` R! Q6 V
For i = 1 To n , {3 j& C& R& Y. R+ y$ ^8 @s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) " r$ [& O" B) x; i; O5 hFor j = 1 To n% h, o6 X5 ?9 S. P7 V O' H
a(i, j) = Val(Left(s, InStr(s, " "))) 3 l8 L* t8 S; \7 ?* a7 X# e9 w/ os = Trim(Right(s, (Len(s) - InStr(s, " ")))) * A( f; w7 B ]Print a(i, j); : u& ~/ Y. g% u! X0 a" XNext, P$ E2 {- {2 X- m- [# i+ O
a(i, n + 1) = Val(s) 4 [! \% I7 y6 J+ z- sPrint a(i, n + 1); . N) J2 E' ?) @, `, a" C; ]- uPrint * n# u$ d+ G1 Z: g& LNext/ @- B/ ?) Q7 N% [% t) q$ m I+ R% P" K
/ s3 n T+ e4 x' UFor k = 1 To n - 1 '开始消元 / U& I3 R" m9 N1 a( _! ]2 W$ s5 QIf a(k, k) = 0 Then1 y0 S6 C( S) j' `
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ; p/ `# M0 [9 F0 I" ^) IExit Sub - M- r% N% |& C! W3 M7 J) WElse 8 H8 r9 s6 f1 H$ DFor i = k + 1 To n 5 w* Z! \ v4 k% z8 T4 o; @$ A% {l(i, k) = a(i, k) / a(k, k)3 h$ Y; H( E5 l8 A' i; ^: F! o/ Z% h" F
For j = k + 1 To n + 1 ( Q" M5 m" g% M. s; ga(i, j) = a(i, j) - l(i, k) * a(k, j) 0 b+ ^, c7 i, V9 {, V8 VNext 7 ]# R9 y }% V! A Y% ~8 D, O& DNext, [9 }4 C7 t/ f/ X
D = D * a(k, k) # l5 B* i2 ?# u. f" nEnd If. }6 _" t& s3 I8 |* X w& S
Next k '消元结束 ' H, X" |* {4 A4 q4 y# M! u# @: ]% dIf a(n, n) = 0 Then + Q" T+ H" E7 H. _& C) u x( Z6 EMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" 7 u8 M4 \1 E0 b4 C" }6 B$ lExit Sub ' E' T. h& J$ `% [Else # g+ z) j) S+ sD = D * a(n, n) }# x6 l2 [* X, J, n: w8 WEnd If( ?1 v, ^4 D" d# e }
Print "--------------------------------"$ p/ K/ N0 R/ P4 K( O
Print "系数行列式的值是:"; D 0 I! M9 e) N! Nx(n) = a(n, n + 1) / a(n, n)( V; P( W F& W7 z9 v5 G' ?
For k = n - 1 To 1 Step -1 '开始回代 ) d( ]4 ?6 K( m3 z- |; TFor j = k + 1 To n! W5 d a( ?3 ]) Q) S; o& S0 ~
m = m + a(k, j) * x(j), X6 C u3 |4 y' j
Next j& C, s1 R, T: I, U+ [9 P0 M: A
x(k) = (a(k, n + 1) - m) / a(k, k)6 {9 e6 x. B! P+ t6 `' x
m = 0 % g( l; S7 }1 R! R2 Q: A8 F6 pNext k '结束回代 , n; V( u0 a+ r2 H , Q! t4 r# r$ {) _% Z! TPrint "--------------------------------" : @! h5 d9 Y& O2 zPrint "方程组的解如下:" ' E" N: M' X. `. m6 A( h7 r1 y6 T$ d& L$ t/ A
For k = 1 To n ; Y) N) b/ U& SPrint 0 l8 v1 t( Y# p( ~% Z9 l/ qPrint "X(" & k & ") = " & x(k)2 ]6 i( S: ]$ v% Z: g. X
Next k ' @4 p. f0 d& L5 X) f" d$ U0 o9 RPrint "--------------------------------" 7 ~2 [" J. k2 ?9 X9 h5 U1 \/ CPrint "其中各行Ax-b=" 1 @8 j3 ^: [- N& FPrint 3 P9 p4 f" Q* [) A* t, uFor i = 1 To n : V1 P. q( e/ c5 D& u$ At = 00 C3 ?& z2 r! j) X- F; `
For j = 1 To n; {9 x2 ~* y) G0 ~( ?8 t
t = t + a2(i, j) * x(j) : B o, U5 w1 h2 s, G* c3 D, uNext j : B( P5 y5 J" B+ M) I: Ht = t - a2(i, n + 1)1 A8 }& J, ?4 \6 e- ^* B: v9 U) M
Print Spc(5); "第" & i & "行:"; t! O W" ~# C7 \3 F' J/ ^
Print & Q' A$ P1 p% hNext i; @" U( _8 D; v' O: ]1 Z
3 p" z" k( h$ `+ k( |
End Sub