Private Sub gauss_Click() '高斯消去法 : N5 G! g$ D4 n. P* j6 d- x& \Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single7 x! }! ]0 `0 i3 J# z y
i = 1: j = 1& \8 a3 f, e. ?" v
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) 4 j0 v+ m+ |& ]' ~$ mReDim Preserve a(1 To n, 1 To n + 1)" I4 E7 [, Q8 ?3 M7 N
ReDim Preserve l(1 To n, 1 To n + 1) & C8 n; d& Y, N" Y9 ~Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single5 R4 g& @. {! S# a
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() + V/ N4 e# O8 _( \: y+ p3 ~For i = 1 To n" N* X8 @4 R, E3 r% |- I
For j = 1 To n ' Y1 O6 r( j' ]' R% x9 Ea2(i, j) = a(i, j) ( u. z% O0 L h- a6 Y# q! ^Next5 E$ [- \. D7 x
Next '将a()的值全部赋给a2()) v p3 Z$ [1 F
m = 0& I9 V% N3 T1 g7 `! M
D = 1% i( g4 p* Q6 g# \" E
ReDim x(1 To n) t9 }) ]& h) ?9 N9 Z
Print "--------------------------------"4 F6 D, s" J1 g; v9 u9 U: }/ Z
Print "您输入的增广矩阵如下:" 9 b: r+ O# F0 \; C" MFor i = 1 To n8 L8 d3 |6 n2 A
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) ) ^( ^3 u4 b4 L3 c" `' s) sFor j = 1 To n9 Z$ J! A" k5 g" @/ H
a(i, j) = Val(Left(s, InStr(s, " "))) 0 R' ~' G9 ~& p1 N1 ds = Trim(Right(s, (Len(s) - InStr(s, " "))))) ?8 U+ c% g, G* K7 w, e6 k
Print a(i, j); - A5 M$ k* d: ?0 L4 ^Next 1 F q* q5 W. \/ @a(i, n + 1) = Val(s)3 O# { k! T! c8 m- I1 ?* N- I" F
Print a(i, n + 1);5 C2 V: b3 q& I& I! d
Print* `2 D% t( f [( A9 ]5 D
Next * u0 a7 l3 I+ t) S' n7 j* G. J+ [5 u4 n# N' X# Z* [
For k = 1 To n - 1 '开始消元9 @, F' ^& ~) ], X- g3 ~
If a(k, k) = 0 Then- B% d6 G% Q. n E) o* Y) C: c+ D
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"% n- w+ W& t( |: G/ k! {# Q4 S
Exit Sub * Q& M: e% w6 T! bElse( o4 O; V# d) t
For i = k + 1 To n 6 h( Q# h4 r# U; Z6 r0 Yl(i, k) = a(i, k) / a(k, k) % T% Y9 R$ j( s oFor j = k + 1 To n + 1 " _0 z& R6 d5 i0 F, m1 na(i, j) = a(i, j) - l(i, k) * a(k, j) $ [1 D* s4 B' ^ u! `# W: @Next' v1 g/ g6 z* F
Next- N U+ z$ C9 G9 o- ^" M& F* B
D = D * a(k, k)6 ^; p1 N" e# l2 h3 b4 P
End If 1 p0 z! @* r: Q8 s7 R" {0 gNext k '消元结束 1 W& ~+ H! J- C5 O3 s: zIf a(n, n) = 0 Then/ b/ E- P# p% r8 X* W# U# M" A2 V( |
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" # E- c2 D/ O" q1 H% iExit Sub+ I2 W3 O& R0 @2 W. _* V
Else 4 \0 `" S9 `2 B6 CD = D * a(n, n) ; v" g3 l& W7 r+ C* a0 ?. H' PEnd If2 J% @) n1 R* a; U2 |4 {7 A) B
Print "--------------------------------"$ E: }% ^: G. M7 M* `. T
Print "系数行列式的值是:"; D , k! j3 s) p7 ?: N" J& nx(n) = a(n, n + 1) / a(n, n) 4 z7 i; [! s4 F5 b0 WFor k = n - 1 To 1 Step -1 '开始回代 ; ]2 p! V6 I0 `& \7 Z/ b y3 F ^& KFor j = k + 1 To n" {3 I* z5 A8 e# z
m = m + a(k, j) * x(j) ; v5 z& S4 u- X* X( Y/ N" L7 u/ zNext j . B4 [' A! }3 L/ S" \0 M7 R8 D4 Kx(k) = (a(k, n + 1) - m) / a(k, k)8 T. r( m: Z8 d/ r, n8 [
m = 0 0 V. w0 O L2 g3 k& \/ j/ HNext k '结束回代2 v) @. l. l* r( p$ I, W
0 h2 n7 g e8 s$ M
Print "--------------------------------" % f1 s) Q, d( D! OPrint "方程组的解如下:"1 O2 j: {( A# b
2 V/ e3 _8 G; N8 n D( hFor k = 1 To n. \! k9 s' L) o; V' C$ Z1 K
Print4 S" e$ J5 Y& y, u# A2 | u
Print "X(" & k & ") = " & x(k) # |- o1 ^: A0 x8 K$ u$ J; o0 {7 HNext k3 ]7 t$ u8 _: @ R6 H. y9 H
Print "--------------------------------"! ~( g) X" f& ~4 s, { }* ~2 x" d9 m& i
Print "其中各行Ax-b=" ) \4 e9 G% w, T; TPrint3 a" z7 a3 V6 ^- _- R
For i = 1 To n 9 K- \# I( }5 Q. m% At = 0 ) S( x& @& p# ^ d6 B2 ]7 r" U* NFor j = 1 To n # l/ x. _; i e3 c# ot = t + a2(i, j) * x(j) 7 F" M. K( U+ ` Y4 c" W# G+ INext j ' e3 J# t& L+ @9 Zt = t - a2(i, n + 1) % D# {5 V- F# m, q& h% ~- |Print Spc(5); "第" & i & "行:"; t8 r/ C" I! W# H' Y# F ^
Print 8 [' I% F; U7 `" `6 wNext i 8 W* p( J9 D# c! R: F" U& R6 E* ]4 p
End SubPrivate Sub gauss_Click() '高斯消去法9 E! z3 S( V1 k! O. h0 W
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single ! m- q1 \. X# ^8 v/ Z9 Q: n# \1 Li = 1: j = 1 ' V% Y. k5 s* q5 `n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))" F0 x$ |* p$ H, _# g& ~2 Y: l2 I
ReDim Preserve a(1 To n, 1 To n + 1) 4 N# J8 c+ ` _3 |, B+ F& TReDim Preserve l(1 To n, 1 To n + 1) 1 L% y' _+ K- `, ^5 @6 O" ?Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single6 C; z, Z" \* e
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 7 e/ l! _9 Z( t1 D* r' Y( c6 J. n+ mFor i = 1 To n* O9 Z: Y! ?( O, H( k% L+ d
For j = 1 To n 2 \, h6 g' m, r; Ia2(i, j) = a(i, j) & a X& ?4 E% i) B' vNext# C8 r, X5 }1 [) X* o3 @0 [
Next '将a()的值全部赋给a2()2 d, \4 l' B% U3 E3 X. ]( B
m = 01 d4 ^, h4 \+ |/ D
D = 17 |" w7 o4 G9 q/ e0 ~9 `
ReDim x(1 To n) . E) H* @7 |- G# w& ^( EPrint "--------------------------------"$ `1 f- L. h* T% ?, B. s- Q; s3 }
Print "您输入的增广矩阵如下:" 9 x( c2 y0 R2 I8 o: z$ K9 x: DFor i = 1 To n7 B- y: t3 ]2 ]. X% s
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))# ?, Q+ C3 l( M
For j = 1 To n 0 M0 x9 U) q2 w" i% y2 wa(i, j) = Val(Left(s, InStr(s, " "))) - r- V% q+ W/ {8 _5 P7 [! vs = Trim(Right(s, (Len(s) - InStr(s, " "))))0 d; t8 O0 k0 K, h3 i- K8 n
Print a(i, j);% U" @% v+ P o( y5 d
Next ( x+ D/ b) W( ?! Ta(i, n + 1) = Val(s) $ [* }7 M2 E; N% ^; T h0 [7 }+ MPrint a(i, n + 1);( C a9 S l( w3 L
Print ' d( K4 x& P1 G" ONext% Z1 K a* U0 `2 \1 K- _6 J3 A0 Q/ j
. y9 D# x0 ]$ h7 T9 O! |1 R PFor k = 1 To n - 1 '开始消元( Q5 V7 L- w) K+ b7 y
If a(k, k) = 0 Then! x9 k3 _9 t' |; g* H; W- c
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" n& D# w7 [6 b. @. i- dExit Sub& q9 R4 g Z. u3 {. V' [. {. N3 C
Else" ~! p2 i* E! c; x- W
For i = k + 1 To n 3 l: s7 l" [; \+ {5 W& v. ^l(i, k) = a(i, k) / a(k, k) / \2 W- l" E# T3 F; J$ X# ~+ A4 q; p! qFor j = k + 1 To n + 15 h5 A5 |1 j) A
a(i, j) = a(i, j) - l(i, k) * a(k, j)2 [+ Q: D$ W D& c4 q
Next ' a: k7 P( O& `$ u1 l7 VNext + h, ~) v0 b8 z$ M, P$ z. X3 E7 l8 pD = D * a(k, k)7 J0 n; I1 b2 j; ?; m* B
End If 3 o6 e. i8 \- D! UNext k '消元结束 . b, {( ?( c) X2 N, `% z$ QIf a(n, n) = 0 Then $ p; L: W6 t4 Q: CMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" 2 ^& \- b' M% Z: b6 ?, a& @Exit Sub4 c. b# ]6 `4 U1 R# S9 N$ R
Else % K( F, \4 {7 XD = D * a(n, n)- }0 Q2 N: r% I. G6 A5 _
End If* k3 _3 J P" h/ d
Print "--------------------------------" 3 X* c [' l( y! c/ `2 V: TPrint "系数行列式的值是:"; D& A) A3 K" Y& P! r* e1 m+ O0 Y
x(n) = a(n, n + 1) / a(n, n) 3 K4 ^+ s. h e5 u6 t% U! ZFor k = n - 1 To 1 Step -1 '开始回代6 x9 u. k- ?1 Z* x! P8 a9 E( S1 {9 n
For j = k + 1 To n " M& K3 H- o+ `" vm = m + a(k, j) * x(j) 5 ~! b# ]1 X' h7 _8 [% H. gNext j w/ G- P; K2 p- u8 Z* N( X: u
x(k) = (a(k, n + 1) - m) / a(k, k) % N: @; M9 ^" y; m$ pm = 0: o0 J& s k$ |0 }3 `
Next k '结束回代 1 P+ U4 k/ I: N $ S5 J8 O- y- ^' pPrint "--------------------------------" * }7 S/ I4 Z' w* z: Z1 R. ]1 w PPrint "方程组的解如下:" 2 a7 Y) j& r( q' S( [7 D0 a$ f2 b7 P3 v' B- z' O- C( `5 o
For k = 1 To n ' y( [8 Q+ o0 r5 U& [Print 3 O# f: i6 m) r+ iPrint "X(" & k & ") = " & x(k) % {7 i& {( D( ]' i; w: A7 x; LNext k % y7 @. b3 t& x" ]. N iPrint "--------------------------------" ) W7 C, ]1 D2 t1 QPrint "其中各行Ax-b=" 7 f P, B0 i; F6 A8 w" B2 VPrint$ w! J7 z; Q5 E7 J8 O5 o$ M$ Y7 A: ?
For i = 1 To n7 b& @1 j6 k: y, p" p
t = 0 2 D9 }) h! z$ `For j = 1 To n" @$ v9 C: D4 M! n' J) I7 k* r" w
t = t + a2(i, j) * x(j)/ b _! T/ M$ Y; u; X
Next j9 j8 H" E1 L5 }" U) {- W8 o
t = t - a2(i, n + 1) - x! M3 _0 x5 H. QPrint Spc(5); "第" & i & "行:"; t, F: U9 T( U- n
Print , _3 @/ `# e& }& y% D8 rNext i ) f7 @- J3 }4 ~1 b' Q9 `5 _. E+ t0 ~9 ?
End Sub