Private Sub gauss_Click() '高斯消去法 C( U* k5 D1 M, F/ ?
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single 9 V2 V: m* m9 l9 r$ d- qi = 1: j = 14 S7 n# \: x R4 C0 l
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) 2 |) g0 K' f7 f Y5 `6 n7 r9 _ReDim Preserve a(1 To n, 1 To n + 1) * _4 A5 Q% o( ~9 |ReDim Preserve l(1 To n, 1 To n + 1)) R0 E0 B' A4 V: s+ n W# [' t/ t
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single: u6 }- j: s9 d7 b0 L0 b6 o
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() * F; p7 L H5 n/ R1 T6 P2 _For i = 1 To n 3 K1 d2 \) u& r! E# f0 pFor j = 1 To n. \4 K/ d& ~5 O, T7 k* d
a2(i, j) = a(i, j)8 |" g I- |! w; y2 I& g% P
Next0 a( {) ~9 q, q# Z; ^8 [% q
Next '将a()的值全部赋给a2()$ U% L7 n( t- p" p+ Y5 m
m = 0 9 o1 X' I" D: ?) y; eD = 1 " D% V' B7 p' aReDim x(1 To n)% B- e0 c& \, o- S- n7 ^8 G! e
Print "--------------------------------" " N/ V+ m3 N1 b1 r* j2 o+ J; @Print "您输入的增广矩阵如下:" ; H1 ^2 d, E" s+ }& \+ FFor i = 1 To n " G$ b# j/ d# `( p3 c" q2 Os = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))4 v, I" `% ^5 G. J4 x
For j = 1 To n' y5 X; K( e7 l4 o' k3 Q
a(i, j) = Val(Left(s, InStr(s, " ")))# y' l. B O/ {" B3 C
s = Trim(Right(s, (Len(s) - InStr(s, " "))))* v; }. r) W# L" X& c2 B7 I
Print a(i, j);$ Q8 E( h8 ^3 S0 Q# B/ U4 A
Next ) E8 f, B2 t. N w# G( h7 ca(i, n + 1) = Val(s)- V1 W* e: q1 p1 j+ b* b
Print a(i, n + 1);3 M6 K6 Q* x5 w- j
Print. U2 R, `- V( {" I
Next8 P& q, g0 Q x: V
4 P- T- h; r1 j( `/ f% hFor k = 1 To n - 1 '开始消元, C/ s6 m5 q; C/ @7 e' Y
If a(k, k) = 0 Then, a0 o0 l$ Q$ @5 N: W
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" - x0 p/ q3 \# i7 FExit Sub # u# R0 c7 y; L7 C8 s tElse) D# a/ V% S- o. q5 n; I
For i = k + 1 To n' _% g- d- V7 q5 y; P4 P) [
l(i, k) = a(i, k) / a(k, k)# S' }; A2 f" b( e+ p. [
For j = k + 1 To n + 1 U, H5 Q0 } d- Wa(i, j) = a(i, j) - l(i, k) * a(k, j) 3 M" ?/ Y( q2 A8 kNext7 p$ v' M2 o5 k/ y
Next3 ~" _5 v+ o* f0 e; a# F
D = D * a(k, k)9 \/ C, h& Z( n8 c
End If6 N4 c" T/ ^2 z) k5 k
Next k '消元结束 , B2 C- D& H8 `( A1 a; t( q6 m8 G# bIf a(n, n) = 0 Then9 m+ L" ~% _! a6 F* c
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"5 E3 F( l+ T8 q. _! b2 ~
Exit Sub, v% O+ R4 G2 v0 c& ^( C
Else + A$ Z+ t* T- i1 u/ F7 v# [8 MD = D * a(n, n)6 `% u' r6 _; i4 \
End If , M2 Y1 T( K7 }+ m/ dPrint "--------------------------------"8 q0 q& X/ u/ O; P# _# H5 N
Print "系数行列式的值是:"; D% O6 G$ ?) A0 l( K
x(n) = a(n, n + 1) / a(n, n) I7 z0 x2 N8 w- z# G) `( t( F/ F/ v
For k = n - 1 To 1 Step -1 '开始回代 " n# G# |, s& B2 `# \9 R4 qFor j = k + 1 To n) r3 }6 Y# y# J' }
m = m + a(k, j) * x(j) |4 g8 w3 R. [; Y+ h$ X CNext j7 z) B1 \: ^1 M4 E& V
x(k) = (a(k, n + 1) - m) / a(k, k) 0 |( z- Q' L# C+ em = 0& s5 D: V4 O2 H: T5 p( R
Next k '结束回代) _& q! z( ?" t0 R3 K
6 o( c* u1 _- V* [Print "--------------------------------" / v; i. a. J! k- h: IPrint "方程组的解如下:" 0 D1 j4 g- b' s- M4 _0 A. f3 B" k8 {" i: z* J" t% Z/ ~
For k = 1 To n # H8 t/ k1 G3 l2 Z. n$ APrint + P& I$ O8 J: M- Z1 r: y+ pPrint "X(" & k & ") = " & x(k) : ^# }5 X9 \- k/ y: m( e4 i7 INext k , ]; ~& H4 P3 N; b4 IPrint "--------------------------------" 8 J/ z/ _! G2 \6 }/ |- H6 H% \Print "其中各行Ax-b="* e! b) @( E# ]4 v
Print+ Z6 f& B& P6 e0 Z- w0 R9 N
For i = 1 To n/ N* C& `8 E5 `1 o
t = 01 n U( l4 Y; Y1 \0 x; ^' L. _
For j = 1 To n+ w" z# ~3 F. `- @
t = t + a2(i, j) * x(j) 1 k0 D! _1 D) X% \Next j 9 w2 F8 L/ S j0 f+ t, `t = t - a2(i, n + 1) 2 }3 |3 [, v5 A0 \Print Spc(5); "第" & i & "行:"; t ' B$ `% p- a, e2 d2 M: hPrint0 U6 Z4 I) q4 D7 o4 P
Next i 9 M/ v# B; u; v6 s* f' x' A; n; |# h8 q( {
End SubPrivate Sub gauss_Click() '高斯消去法) J6 b) j4 Q3 l4 ~5 q
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single $ |) k' ~4 x0 v6 D( E% N) j- Ti = 1: j = 1 9 M6 E/ C* d( [, \0 I; Gn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) 5 C1 P* B" I4 ~5 x0 { YReDim Preserve a(1 To n, 1 To n + 1) 1 T) d0 C5 U) ]( Y; zReDim Preserve l(1 To n, 1 To n + 1) + Y- R& A- `. K9 JDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single # M9 K+ J A- c. g. ZReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()2 X! A: V- Y# a" [7 I& E
For i = 1 To n, e w) a% e# x: g$ X
For j = 1 To n ) v) C" Y( J/ ]2 O" ]2 qa2(i, j) = a(i, j)- m" b! P) i0 d5 E
Next " B) {- X. _9 a0 J3 DNext '将a()的值全部赋给a2() # J$ i. c2 r% z! s: `/ z/ C! Z4 Mm = 0 ) x c0 z! m9 XD = 15 [) b/ ^ K/ d: Z. {
ReDim x(1 To n) 7 ^2 A* L4 h B+ x+ _Print "--------------------------------" 7 Q; b, L3 b: S# y' i8 e8 ~1 j3 C8 sPrint "您输入的增广矩阵如下:" , p4 v! B: K* _" O6 ~For i = 1 To n : c. }! R; f1 Y, ^$ Bs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))- T: |% S/ G# q+ A0 D! O& l0 J$ M
For j = 1 To n 6 W* F- n2 K3 Y! P! j0 h: Ia(i, j) = Val(Left(s, InStr(s, " ")))% x- o- A) w) S" @3 H0 e9 T
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) # u$ c: r: G: }' hPrint a(i, j); + Q1 ~6 O% i9 [! F) GNext : B% C. y6 G& M$ N7 b0 A& j6 |( qa(i, n + 1) = Val(s) : k& _. |& @+ O: N& t5 QPrint a(i, n + 1); / D. X8 W% }# d6 e- a/ |1 sPrint8 j3 o5 E7 `1 V; E7 A0 F
Next' g H/ \& D `+ ~3 J
. J# c; O7 j# l( z% `
For k = 1 To n - 1 '开始消元, f) u% Z, L O
If a(k, k) = 0 Then( j% g! ?2 P3 |6 ]/ G
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"+ x9 v) f% o2 g
Exit Sub2 o7 C2 k0 _2 `- v% E# U
Else ; W7 h4 {9 A; w* T& M: C& X. ? BFor i = k + 1 To n1 f, ^. [7 p' T' i1 K% o" `9 c
l(i, k) = a(i, k) / a(k, k)+ J$ Z9 l Q1 l( {" L$ j* Y" I
For j = k + 1 To n + 1/ V1 K* T5 a0 z/ e: e7 M
a(i, j) = a(i, j) - l(i, k) * a(k, j)4 F" r) X( q8 p/ b- M% J% P
Next ; n( Y6 N V& z, N& K u: yNext * R' u0 W7 j9 J( BD = D * a(k, k)& ^* e0 r6 d$ r9 ?' P, @
End If% J- a: t* B+ a8 I8 Q+ M
Next k '消元结束5 T4 h6 s' x! I7 t$ V+ |' Z; a+ g
If a(n, n) = 0 Then ( d6 q" f* W' c) k+ o$ AMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" 6 H+ q. Z% x1 g K; {0 T* e3 W) rExit Sub c2 [% U5 H! b$ |; s
Else0 a9 w3 F5 I! x* P. o
D = D * a(n, n)0 @) |8 Q# Z; w" A ~+ `9 O
End If) T" D: `- F! M
Print "--------------------------------"+ C w$ a$ Z" o/ B- M; p
Print "系数行列式的值是:"; D . R& J" Z" C- `9 b$ qx(n) = a(n, n + 1) / a(n, n) 1 X; p( ~% N, h. YFor k = n - 1 To 1 Step -1 '开始回代 9 Y5 v* p1 c+ I M2 S8 q3 [For j = k + 1 To n* X4 D- ]% g s
m = m + a(k, j) * x(j)1 m3 z& d" i ]0 o* n' {! e" m
Next j 2 j; W b3 K& I# d6 Wx(k) = (a(k, n + 1) - m) / a(k, k)# {1 Y5 z0 ]3 L0 x, C6 N
m = 0 + C; Z$ x- y7 }1 tNext k '结束回代 % ?; c' L5 f( Y$ j! |( v5 e 3 T0 }2 L3 G" ^+ Y; N( JPrint "--------------------------------"9 ~( K% N; J7 k: w
Print "方程组的解如下:" 9 v4 |5 U8 R* f' d% t* _ , R9 n* k! U& M' E8 fFor k = 1 To n 9 ?6 y$ e: i+ ~* O5 j5 yPrint! x; p- I) ~ u( f7 o' [7 Z& I9 w$ V
Print "X(" & k & ") = " & x(k)* V( V9 O! n; Y) o8 h2 x9 F7 p1 H
Next k, x% l+ \* Q- t$ ~$ ~+ s2 H2 b1 p% l) {
Print "--------------------------------"1 {% R9 E* c; q& t: l- p* k) g
Print "其中各行Ax-b="5 i: x% t6 P& ]- p* c
Print% G* m7 ], c2 c- g+ m- f" U
For i = 1 To n( U3 w! r L: W, y6 u4 T
t = 00 j9 d+ T! r8 |/ t( z1 Z
For j = 1 To n 4 `, R+ D# X0 p4 @+ }- ?t = t + a2(i, j) * x(j)& D0 y& B- E, ? p) O
Next j " J5 |2 S" H2 n5 O, X. X( Et = t - a2(i, n + 1)+ `4 C& ^( A( c- {
Print Spc(5); "第" & i & "行:"; t 4 M- Z$ R; x6 Z( v% APrint ; k, e4 [- \$ t* X! ?: h4 Y4 hNext i q9 \9 _. @/ c8 ]
2 ^: R# g% g' {4 k$ j2 p$ [
End Sub