Private Sub gauss_Click() '高斯消去法0 A9 J+ [/ E+ G+ L# G" z6 X
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single * y4 X* Z- M0 i" Ni = 1: j = 18 ]1 Q6 M5 a' q! u. q& r
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))4 Y2 \* _) V% F5 i" [7 w
ReDim Preserve a(1 To n, 1 To n + 1) . x+ y# L: o) z5 C: rReDim Preserve l(1 To n, 1 To n + 1)# v2 T0 B8 v' y4 x6 K; _
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single* p+ i, D1 J% n: R
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()% a2 u8 o( s/ e. W
For i = 1 To n, A; K& f' p+ m' w
For j = 1 To n % y/ ^3 P- G! j7 Z" k4 P9 Ua2(i, j) = a(i, j)$ I; I' T" t. i u3 S$ _
Next$ d" f+ ^. R9 z3 S4 x
Next '将a()的值全部赋给a2()5 x) E5 ]& z1 W. ] S, Y
m = 0 / j. \* E J# U% i2 KD = 1 3 [; C! }0 m9 cReDim x(1 To n) 2 y& C" o7 o; v3 c, r" }Print "--------------------------------" % E! e) P+ f! j' {7 d6 nPrint "您输入的增广矩阵如下:" 9 {9 p% ^; ] I b, z7 w. AFor i = 1 To n ) _& Y. l4 \( p" xs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) * t$ c# k7 Q! [4 Q. BFor j = 1 To n7 ~+ Q x. Y. Y" h9 `: F
a(i, j) = Val(Left(s, InStr(s, " "))) % U3 d& i/ B' l9 ns = Trim(Right(s, (Len(s) - InStr(s, " "))))% U; V$ v7 |9 ]
Print a(i, j);6 x3 w, ]2 Z" F
Next 6 x% e0 H# z# ?$ k# ja(i, n + 1) = Val(s) # t, |9 e' b- Q/ I$ FPrint a(i, n + 1);, i# X/ J4 Q" f% |5 x! u" \; z
Print # @2 @# S' T; M' T6 o9 o# yNext + I6 Y6 @4 a' h( E [6 C3 U8 A6 x0 I8 U- B$ g; A
For k = 1 To n - 1 '开始消元 ' s0 E3 m, ~# M) \* }If a(k, k) = 0 Then& L- d0 }& M7 v x7 A% a
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"1 j) z/ T5 X1 a! K
Exit Sub, f5 _$ z3 h6 V8 r- Z3 a% E6 X
Else 2 q% I# q( h, c4 M+ s. ~; B! EFor i = k + 1 To n & T7 I8 |. j5 b% Hl(i, k) = a(i, k) / a(k, k) 4 c( X7 g+ A7 {% r, SFor j = k + 1 To n + 1 d0 A" a5 o/ {: X
a(i, j) = a(i, j) - l(i, k) * a(k, j) 6 r; Z; [$ f0 E* N4 ~. VNext 2 W2 ^+ z/ E( F- [Next7 L+ C) Q( p4 O. N( I5 a
D = D * a(k, k)1 J% a% U% h9 X& D; X$ ?' M
End If9 Y9 b8 v1 L0 [2 N! J) @3 U
Next k '消元结束 & t3 q) P7 ?4 e+ _0 c6 g gIf a(n, n) = 0 Then4 \# v: P- c' n" G: |3 v
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" # T8 O9 U$ \$ Z* S+ c7 s; pExit Sub4 H' Y, ~: S+ @
Else+ S. v+ i" W5 n! F0 x6 L/ D, s
D = D * a(n, n)+ d- _' i* J6 ?( p' o! P* Z: T T
End If8 \) w: _+ J3 v. N- `! l1 |& |
Print "--------------------------------" " G1 e/ |3 a/ L0 k& o3 EPrint "系数行列式的值是:"; D ) a! u9 e) @' @4 f9 ]0 x" G6 M0 ]x(n) = a(n, n + 1) / a(n, n) % X4 M( g, r7 K8 q7 k7 i5 N9 kFor k = n - 1 To 1 Step -1 '开始回代1 k0 ^+ r& v, d" W
For j = k + 1 To n 4 s( U3 H, }! D Gm = m + a(k, j) * x(j) ! N2 B6 \" K' l* r) v5 sNext j & K% S- Z& c7 mx(k) = (a(k, n + 1) - m) / a(k, k). q7 c9 [9 N' x$ s. J: j+ d/ P$ ^
m = 0 4 j. j: w. _0 D1 \6 |+ @Next k '结束回代 # V; k' Z; @6 A" b _2 F' L: d 1 ?% k/ t& O) k2 Z. tPrint "--------------------------------" " |. L$ ?% y4 F" T2 X8 k3 _Print "方程组的解如下:"6 c& C1 q0 g: q. k. I* J; U9 ?9 d
- ?# I3 D% n4 ?/ a: W3 O9 P
For k = 1 To n7 A9 Z* M7 P3 T- P
Print & i F. N- O1 @; L$ XPrint "X(" & k & ") = " & x(k)6 l$ J; r- Z7 p% J/ m- m
Next k . }9 Z- y% y2 Q; L7 e" A; U* iPrint "--------------------------------" / ?; {1 B" X, }; ]Print "其中各行Ax-b=" + Z0 S+ s. g, i ?. V2 d3 l* ?4 d; lPrint - a% W6 P- v/ L9 C. wFor i = 1 To n, w2 u5 q( I/ N g. Y# ~
t = 0 . T6 k$ W! @# G: MFor j = 1 To n 9 ]* y2 e: D/ G2 E* at = t + a2(i, j) * x(j) 3 a, Z$ w) q1 E" A6 n. SNext j 6 s% h7 r% T" q2 L9 p5 `( ~2 t Ct = t - a2(i, n + 1) , k* P) ?/ _9 i* E- q, z; F( A& TPrint Spc(5); "第" & i & "行:"; t/ r; H" u: b! E6 C: V- C" ?
Print' S* _0 g; U% j9 ?* U8 R V$ p
Next i1 K' ~5 J$ b: O: ?" L6 K
3 i6 b& i5 t6 F AEnd SubPrivate Sub gauss_Click() '高斯消去法 0 ]; ?% p n! @+ L8 ]Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single' Q# j- K) g6 j1 i, h
i = 1: j = 1+ Q' V8 J4 H2 G4 ~8 y/ Y
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))2 c" h7 ?) e$ W5 g% v7 E0 A b D
ReDim Preserve a(1 To n, 1 To n + 1) 5 D; c& I( O: {4 j! CReDim Preserve l(1 To n, 1 To n + 1)5 X) Q" G) \( f# D
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single! U0 w& P) o- K% n
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()0 X% @; I$ b* E J8 l* ^9 u$ A
For i = 1 To n' F- E4 q: F: P/ }
For j = 1 To n/ q( h f I7 J* i! O6 W, ~
a2(i, j) = a(i, j)& X) J) E3 }( r! }0 y4 i- s% A
Next " F) {$ F2 ^4 L HNext '将a()的值全部赋给a2() " U2 `# q, ?) A; r9 Y V Hm = 02 X* G. h+ n5 A. u2 b" n, X
D = 1! Q+ j. |" W- j$ ^& b! Z
ReDim x(1 To n)% g2 f# P5 g. D9 M' g# K3 F+ Y( y% W
Print "--------------------------------"- H7 v; z7 v- }5 x4 L
Print "您输入的增广矩阵如下:") R# U, T6 z$ [' Q9 f2 e
For i = 1 To n5 i* q6 i0 v( P; X
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) 8 I- {/ t* S3 `! ^/ b9 DFor j = 1 To n* i4 z9 P+ S5 k, ^. i* f( E
a(i, j) = Val(Left(s, InStr(s, " "))): Q. `8 y8 v% _7 r, E+ x: x
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) & x3 O* q" X' I. {6 W O5 dPrint a(i, j); . E# e" Z% d: k2 T5 rNext3 n. v1 l1 W- b, G
a(i, n + 1) = Val(s); E6 f+ \) t8 I* t7 e: O F
Print a(i, n + 1); 6 i Y" R! ^0 ?) g4 {/ ZPrint / d: _6 ?$ q0 M7 A$ H% h5 `Next 8 [0 H- B: X; I5 x/ ^ w 3 \4 z& }& K. R# _- c) VFor k = 1 To n - 1 '开始消元 $ W0 H6 f4 l9 ]If a(k, k) = 0 Then# E4 @9 d5 V* L5 T2 r
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" / E. m0 Q7 D; r$ l$ y8 Q6 zExit Sub " e: S9 S [9 |- h% H. zElse* `" @1 u: j4 H
For i = k + 1 To n, [! L& d( j% E/ s
l(i, k) = a(i, k) / a(k, k)- c' k$ X b1 F" B% Z( H) q: g( ^
For j = k + 1 To n + 1 ' s* b2 q- H6 r: Ia(i, j) = a(i, j) - l(i, k) * a(k, j)# f3 i* k. Z% K- U$ j. r
Next 3 P: ~4 |( ~$ u2 k) [Next % I; ~* }* ?/ @1 }6 f! ?- X4 {1 Z! P6 jD = D * a(k, k) . `" T: \. o9 S% c/ @9 u0 NEnd If& O3 o. R+ O- ]
Next k '消元结束; P. e8 P& y" _' Y
If a(n, n) = 0 Then# q+ A6 v& g6 u- V! k! Z
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"4 r! r; w; b+ v. S6 \6 `1 r
Exit Sub ! r% N& q$ U3 l& aElse8 F" t' F3 P y( O; D5 l
D = D * a(n, n) Z2 R$ C. y/ EEnd If 2 S( x9 z; i* o* SPrint "--------------------------------"1 D; C$ E) u# P1 E2 P% _5 ~% l
Print "系数行列式的值是:"; D# A) i- n6 R: H5 m8 _% X
x(n) = a(n, n + 1) / a(n, n) 8 ^# W& s# |4 f7 Z _) w* p( b: `For k = n - 1 To 1 Step -1 '开始回代 6 N8 R# q4 Z( F b+ X6 xFor j = k + 1 To n4 ^7 S6 f; ~8 E, `8 p4 Q
m = m + a(k, j) * x(j) " z/ G0 E1 W7 X; s t9 T7 N# SNext j / w' K2 \2 h7 g" t5 W; |; o! l+ Qx(k) = (a(k, n + 1) - m) / a(k, k), ?. D# W$ E4 x2 B( A) z
m = 0 ( N. P" Z4 _8 _- s! `Next k '结束回代6 n# q& `$ `9 f6 g& o
1 F+ f, L2 _9 \8 j6 OPrint "--------------------------------"2 a+ L3 ]3 F u$ L
Print "方程组的解如下:"$ ]6 K: x$ |+ z+ Q4 t: S2 c
1 h# d# ?, a3 [. r0 f& t
For k = 1 To n" O4 _! T3 K! D9 W! ]3 T7 \( q3 s
Print3 q S* d- ]1 w0 v
Print "X(" & k & ") = " & x(k)+ Q Z2 m G7 l3 X+ R4 D
Next k4 m3 z% N r, H4 ~; l* k$ S# U' Z! R
Print "--------------------------------" " s% U# C$ g9 e" }0 t1 W3 yPrint "其中各行Ax-b=" 7 \" }+ N$ Z4 | cPrint! l0 v- g5 ~, x6 u6 j7 w
For i = 1 To n* c% {4 s4 i; b/ {8 E" o+ a+ a
t = 0 0 H; o0 H* p$ P/ C. e2 F( ZFor j = 1 To n " Z' r7 G% C8 Ot = t + a2(i, j) * x(j)5 [$ v% c P; M" a8 _ s
Next j/ X, f0 z; m' m3 [2 ~* C' |3 |' t
t = t - a2(i, n + 1)- D9 q) G% |& B% k
Print Spc(5); "第" & i & "行:"; t" e7 w7 [4 E6 M _0 J
Print G! }' P [4 t2 P% P3 INext i4 j4 ^: b5 p0 q5 ]7 k2 z
8 W/ D2 p2 E' C1 [+ ?! k
End Sub