Private Sub gauss_Click() '高斯消去法 1 i. | Y9 g+ Y; S4 m6 hDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single$ @6 w# V0 n( O4 C1 @9 o6 {2 ]
i = 1: j = 1! t$ n9 N# a; m7 M; N h: X
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)), _$ g! C. g) c: S6 }
ReDim Preserve a(1 To n, 1 To n + 1) * z9 [* C6 s9 E% _ReDim Preserve l(1 To n, 1 To n + 1) ) S% N- z& ]1 L5 H1 c1 m! Q; U- HDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single ?" `- j& l1 q. ]ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() ; W( ]: J. a# V" M! TFor i = 1 To n . \* j. Z V9 A C$ }1 }' |For j = 1 To n ) M9 h5 o( k! r: b( ~3 f+ ua2(i, j) = a(i, j)0 y5 f! ^( ~% k
Next( C( \* T- V7 F& ~: p: E
Next '将a()的值全部赋给a2() ; ^: [0 i( Z3 r E' J- ^% sm = 06 H( f) y E% u1 v
D = 1- P9 l$ z5 }0 h' S R* T, y
ReDim x(1 To n) : ~' ~9 M0 K/ t j3 P' ?4 M! jPrint "--------------------------------" ' E$ g/ W) ^' Z' T9 N1 qPrint "您输入的增广矩阵如下:"- w4 Z% h" a3 u
For i = 1 To n. W7 X0 E2 P8 S0 z8 E6 {6 z h) i
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))# J Y# d8 W( n, K7 g' k" [
For j = 1 To n1 v; V+ w: Y$ s# j, m) I
a(i, j) = Val(Left(s, InStr(s, " ")))* @; r/ a' c; k: r" Y
s = Trim(Right(s, (Len(s) - InStr(s, " "))))0 U8 a) H" }: P1 E. T
Print a(i, j);- ~5 i6 J+ ]- ]; k9 [# G; m
Next7 l. @6 K8 S& t# x4 W9 }
a(i, n + 1) = Val(s); v: V) w) L; u* l
Print a(i, n + 1);- W6 C3 b' k: l; Z# R/ n
Print, T$ |1 i Z; k, x V. l: z0 G
Next+ N# u/ B6 ^& @8 u' P! h$ {6 K
* A2 Y0 j: p7 |$ Y+ `7 _4 \ S' f5 TFor k = 1 To n - 1 '开始消元 ' x* `9 |0 J0 q! V: OIf a(k, k) = 0 Then + E; ]1 {6 j% J8 s- ?3 ` aMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" " P) t7 M, G2 f# g. u. g" }( t; LExit Sub7 M, W% k* L: x3 G3 O. r) G
Else$ ]# z5 E- D7 j) e1 L1 \( L: x
For i = k + 1 To n % Y$ l- v" `8 `9 }3 {7 u8 Wl(i, k) = a(i, k) / a(k, k)0 y( b) K5 n* C& z6 P
For j = k + 1 To n + 1 2 ], N' S, @$ L4 w* Ja(i, j) = a(i, j) - l(i, k) * a(k, j) & C* y' R5 a% P! i6 n4 w) oNext 6 T# M5 y9 T1 GNext 7 ` Z# P) n3 C8 }: i6 zD = D * a(k, k)" s/ _4 z6 ?4 t3 i) J. A& y
End If! t1 {& [" Z9 H6 K g' O% f: t& Q
Next k '消元结束* P7 H- y) N1 n3 c6 ^5 S7 C( X
If a(n, n) = 0 Then! K. i: I6 P! [, w5 M) O& Q
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" $ x# P" j5 R) ?1 h& J, ~Exit Sub y% s- T2 ]1 \, F# j- zElse3 ?! v$ @ D- s7 N
D = D * a(n, n)2 y, o" A1 P# p% `. |( z, X( X& j
End If( F* Z% s0 _: h+ F" ] ~5 s
Print "--------------------------------" . P3 S5 f6 J. W! DPrint "系数行列式的值是:"; D" {1 v, l, w2 h( }- i: `) ~$ I
x(n) = a(n, n + 1) / a(n, n)& Z4 V2 i" D( E9 o4 z) p4 V
For k = n - 1 To 1 Step -1 '开始回代8 V A0 v( b% g6 h. U
For j = k + 1 To n0 u! Y' i4 R7 i0 ^' j
m = m + a(k, j) * x(j)) r/ _1 c1 R# `, b4 A% n
Next j & D: m" u0 t) _( i5 v" T! s+ C# xx(k) = (a(k, n + 1) - m) / a(k, k)+ z+ h, ^. k& m. V) m5 o
m = 0 : }! }# z: _$ Y1 b$ G9 D$ cNext k '结束回代 3 _. M2 U% P& u9 E! ~- w' q7 x6 N+ i, C+ r h6 M$ y1 u7 P
Print "--------------------------------": |1 P" @- O. t( |$ T0 z/ N
Print "方程组的解如下:"/ k" l- d9 o& X0 u# \
& A+ `) m7 V6 Q6 A9 [1 nFor k = 1 To n 1 h* ?: _: ~9 L: ?2 l* QPrint: g7 x d$ s# r( O
Print "X(" & k & ") = " & x(k)5 E, Z- k+ c$ G4 h
Next k & J9 P1 j( u5 y" v$ r0 u& QPrint "--------------------------------" ' f4 g* v% l+ n& t% c) IPrint "其中各行Ax-b=" ! P1 O& \* V) X3 W2 q+ p" V: jPrint 0 {2 n; b! F" t. H/ h* X% ]For i = 1 To n 4 ?$ ^6 M D. a' N% f. y, K4 [7 Ft = 0: f; e# ?' r7 V0 ~
For j = 1 To n D# |* X: c1 ^1 V2 yt = t + a2(i, j) * x(j) 6 Z" _$ J+ E! B, ~6 |" ?Next j ' Q4 D0 a; b0 m4 j% u! N* Ft = t - a2(i, n + 1)% C+ j. \. `( m1 _% i( _% U5 n
Print Spc(5); "第" & i & "行:"; t/ ~) A7 X: H5 D6 |
Print2 M L& L% I; y! t! n/ o* q3 T
Next i & A" \- y& y7 c& R' h+ T$ Z+ N6 M/ k5 z
End SubPrivate Sub gauss_Click() '高斯消去法" n+ t/ J4 f$ L; g, r; R" A
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single & M7 t d0 h7 W; \, ]. q' Di = 1: j = 1- n) R1 Z% |1 o9 l `) q+ ~
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))3 E1 B1 v) W4 R- `( E3 v% v# d8 ^5 I
ReDim Preserve a(1 To n, 1 To n + 1)' M, Q+ W6 V5 G( Y
ReDim Preserve l(1 To n, 1 To n + 1)( B% n `2 q3 |& Q8 }1 E: A) k5 W v' H
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single: t5 _ n" D6 S
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()4 k, g7 r* |5 `- L+ T
For i = 1 To n 1 t* V) }0 M* G) }+ P7 y! mFor j = 1 To n * \6 p7 _3 O2 M& |* A( Ea2(i, j) = a(i, j): k- @% z* d( l8 H' K: A
Next ! Y; z ^* f5 B3 hNext '将a()的值全部赋给a2()$ p( ?* ~7 J9 B s2 r6 W' q' a
m = 0 4 a& Z9 w, J" y% V6 k+ ]( z" h" i) tD = 1: T5 c- S7 @# p8 `5 y4 d& m
ReDim x(1 To n) / Z# L1 Q% L) ?* SPrint "--------------------------------" 0 P3 y$ V/ |4 s" e& j ZPrint "您输入的增广矩阵如下:" - d0 x9 y; E9 MFor i = 1 To n ( _' A8 I& v3 \) D) x- M, z( Ts = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) 9 N" S. t) ^$ f2 M( c0 JFor j = 1 To n 4 ~/ a4 G" z7 G1 T" [9 Ya(i, j) = Val(Left(s, InStr(s, " "))) / a* Z# ]6 m6 [* Ss = Trim(Right(s, (Len(s) - InStr(s, " "))))- h9 r8 f+ M7 e) t9 L+ P
Print a(i, j);3 H! ?5 @1 E8 B( v/ K8 L
Next/ r" t# o# [" N: e8 r9 y& L- s
a(i, n + 1) = Val(s) 0 P+ @; `2 ]8 Y0 z0 o7 `* e. oPrint a(i, n + 1); 8 V3 `2 i; N* L8 V3 `6 Q, p/ T; z" LPrint5 U! f2 _! j$ Y) f+ N
Next8 H4 { x4 q1 E. f# ~5 I
7 Z$ s3 G, \$ ?- c! c- X9 u' pFor k = 1 To n - 1 '开始消元 + [1 j* s1 [' F+ q4 A" a2 _If a(k, k) = 0 Then4 d0 p+ D8 W& i% e; Z
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"( n$ ~9 w7 E* B8 _" a/ f
Exit Sub, Q3 h6 ?; L$ _
Else, ^: }8 I4 F/ f8 h
For i = k + 1 To n # T3 f7 T) g/ {- j3 m# \4 El(i, k) = a(i, k) / a(k, k)' ?% x% w% F: D( m+ M
For j = k + 1 To n + 1 2 }: Y0 U* U5 }$ ~; _a(i, j) = a(i, j) - l(i, k) * a(k, j) ; o/ Z6 J7 s5 O3 v" y) O2 Q% p/ \) wNext 0 O, o4 \. m! E [- x/ DNext ' [; U) w h) n& s# A. u( ED = D * a(k, k)1 l2 I9 w+ X$ I* ?- q$ |
End If, {; O3 p( p" E- @
Next k '消元结束 0 m. f" t a$ i7 e8 a; XIf a(n, n) = 0 Then2 j5 a- O7 Q7 P6 V b! ^1 z/ H' @
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" 6 M6 p8 l( j5 F' M6 @0 q% BExit Sub 6 u! W- i& j; v5 y. l0 DElse0 ?0 J0 \- G# v! T, t: K
D = D * a(n, n)3 x# r2 E0 @. K
End If + Q- [& |0 V) x L. }7 FPrint "--------------------------------". b. U l( U+ ?* }6 `
Print "系数行列式的值是:"; D . ?5 K) U9 I( l/ f4 X: Ux(n) = a(n, n + 1) / a(n, n)% I3 n8 G5 B7 p4 {+ ]" K, \; x
For k = n - 1 To 1 Step -1 '开始回代4 Q( j9 L3 U# f9 g8 D6 |; W. @
For j = k + 1 To n, W) R" b7 }5 D" S T
m = m + a(k, j) * x(j)2 s9 W: E8 t2 F$ v0 ^) B9 [
Next j . ^3 a0 ^8 F; B1 D! \x(k) = (a(k, n + 1) - m) / a(k, k)/ O, n- I& N: c: n* _
m = 0 # |! b4 y; n! d, Q' @- Q0 }3 oNext k '结束回代( m# Q' R- K2 C5 k2 ]% e/ g
4 A$ d- y: `* Y' J3 @4 k/ c Y6 W7 s
Print "--------------------------------" 1 q [. r! o1 A O4 N9 wPrint "方程组的解如下:"2 H7 Q' O/ t: T2 A( f
m' m4 L6 \; h
For k = 1 To n7 F8 b2 E$ c4 |6 G# Y3 k3 U
Print $ o6 f2 n" Z/ {: SPrint "X(" & k & ") = " & x(k) # }! s+ \0 k: ?' T6 R- YNext k " N/ R/ o l9 n. H; VPrint "--------------------------------" . l$ D5 U* s2 i6 l* }* a/ A$ `" _Print "其中各行Ax-b=": V1 c$ S( ^- _" k5 Q
Print " V3 X2 w) K% M' T d8 M1 A! \) ZFor i = 1 To n. H) n; l6 N! ~4 y7 H$ G6 ^
t = 0) I1 t3 A/ p& Y
For j = 1 To n% s' }1 U) Z) m8 C) c4 |
t = t + a2(i, j) * x(j), t9 `- {/ v1 q) E3 T
Next j & z. U6 M! u* ^1 ct = t - a2(i, n + 1)$ |5 Q2 c1 v% Z5 _, G/ n& w
Print Spc(5); "第" & i & "行:"; t6 Z- W; z2 D+ N+ `! |
Print2 ]3 D' J& j k0 I3 B' R
Next i( f# j0 a" k4 Y! f0 l
8 x4 q9 Y1 _- ?' X
End Sub