Private Sub gauss_Click() '高斯消去法 9 z$ u3 r% z5 Z- [ `Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single 6 d( Z# A; `/ P9 l& Oi = 1: j = 1 3 d- u5 K1 L- ?/ @ J& [, kn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# ]4 e, j5 ^9 ]- i5 J& s0 j
ReDim Preserve a(1 To n, 1 To n + 1)0 l; s3 G" ~' U. o& n6 r7 L
ReDim Preserve l(1 To n, 1 To n + 1) h# R. K4 G; K' A" gDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single3 j) Z2 C j$ Z
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() ' _& G& _" {# X |! `' `For i = 1 To n 7 _& ^- B# W# l7 x2 o( j \2 {For j = 1 To n 2 ~6 d& ?' B. \a2(i, j) = a(i, j) , s+ |; d( i' HNext 2 S: D) D, I5 P* lNext '将a()的值全部赋给a2(), ?; P: n; E! R1 @' G
m = 00 h: o4 x( _4 g; R
D = 1' w. E/ J* C2 Z# U0 }- j b
ReDim x(1 To n)) S/ \' P& T4 G: C
Print "--------------------------------"4 I" \5 g, H$ W( J# z" i! j
Print "您输入的增广矩阵如下:" U7 k8 S: x) y+ R* U/ u+ y
For i = 1 To n ' r# i ^8 f0 {) C: k. F; D- c$ Cs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) 1 y2 W7 E- S" r3 {! g& eFor j = 1 To n3 Q6 I# }2 S1 j( _
a(i, j) = Val(Left(s, InStr(s, " "))) * O- X9 E$ K7 ~4 U* f, Ys = Trim(Right(s, (Len(s) - InStr(s, " "))))5 Z7 D, @" V3 }! F
Print a(i, j); 4 X+ ]+ u9 s- X& z- DNext' S6 s1 W, x0 ^: x. n& L& Y9 x
a(i, n + 1) = Val(s) 5 ^6 K2 f6 u' j8 n ]Print a(i, n + 1); . d0 Z' _8 w+ w( z4 N4 w/ ^Print+ c, b) T7 B ~; A* t' d) |
Next ! X- N1 d* o- C2 u9 s0 F& q( V: N8 j3 b( Y, a( g
For k = 1 To n - 1 '开始消元* C# L" y; F# ]( s
If a(k, k) = 0 Then% h7 r8 V7 h7 `, K2 E5 U' M" ~
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!": ]: u# S' X6 Q; \# \2 e. k5 ~% F
Exit Sub , P" B a; G4 p, Q7 m6 S7 N7 bElse& N6 C: K1 D+ I/ E+ D
For i = k + 1 To n ; K+ u6 c5 `8 v! `l(i, k) = a(i, k) / a(k, k); F+ S8 H# U5 A. h
For j = k + 1 To n + 1 . q: D* e ]/ ]8 @a(i, j) = a(i, j) - l(i, k) * a(k, j)8 L3 N8 n6 K! v
Next2 @/ m T: ~. O0 a4 B& t* q6 N% S- G
Next 1 c- i+ y& m( S5 i0 n- wD = D * a(k, k) 6 K' o! F$ \' L; s9 q% N) a. H- `. [End If! e$ U; \; s& {( k( w% ~
Next k '消元结束& W! L- v# e4 d2 M
If a(n, n) = 0 Then9 u, k4 ]2 B3 j* G% |
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" 0 U- i9 J, E* g; `Exit Sub 2 T3 U" `$ J+ Q J5 j1 _ o2 uElse' {# z% P& L5 }* ?0 l
D = D * a(n, n) 1 T5 W+ {/ q1 S4 V* KEnd If 1 M6 u: m" `+ O& t( kPrint "--------------------------------"- X. f, n5 f/ P9 |1 Y( }9 X% V
Print "系数行列式的值是:"; D , h2 {" B5 o' m9 {/ f) sx(n) = a(n, n + 1) / a(n, n) z/ I$ k# ?, {2 }6 zFor k = n - 1 To 1 Step -1 '开始回代 & u$ A6 R* s8 S, W$ k" u' }6 d8 tFor j = k + 1 To n ( C" ~" J' b0 w# n! _6 vm = m + a(k, j) * x(j)# P+ b" O5 I, E' ], j: S6 X# E# l
Next j1 m" e9 E) E: ]8 d7 i) S
x(k) = (a(k, n + 1) - m) / a(k, k); [+ n1 Y4 {5 R# _
m = 0 0 k3 a5 T, y% S' P8 SNext k '结束回代0 y: B( e/ q) x6 X; X1 J
! {/ ]# F* P+ j6 S1 |. n
Print "--------------------------------"- C/ Z5 f. I* ]( L; t f
Print "方程组的解如下:" ' r: o9 S$ c1 `) ^. t" K8 w( O9 J% D" t) s6 p8 Q1 O) {! z
For k = 1 To n4 j/ J' S* `9 o+ w* J; y8 {
Print ! ]1 |& e" B7 c/ D* kPrint "X(" & k & ") = " & x(k)) H+ |* f _6 b j4 i5 x
Next k, t7 E8 N i% ?- N+ f- R! S" J
Print "--------------------------------"4 \0 u- ^# j7 }, c \9 _. n8 T
Print "其中各行Ax-b=" ! P" f- ?+ J! ]9 d* c# aPrint- l2 I$ o9 ]# V f
For i = 1 To n L7 ]' ^& v7 W& T4 M! f2 v
t = 0 9 w# b% D+ u! M) @% d$ Z4 nFor j = 1 To n i J- e2 a# ]+ j1 ~0 E$ d
t = t + a2(i, j) * x(j) ]" I0 R* r3 [/ N
Next j4 n1 ^1 X" Y, @8 Y7 V
t = t - a2(i, n + 1) 4 h5 ]8 Y1 l' |( H6 V$ ^+ iPrint Spc(5); "第" & i & "行:"; t 1 O' R- D* Z: |" NPrint 7 j5 }7 ~, u8 j4 T9 a7 Y. CNext i 3 o4 v" n6 M, Z) }( K {* ?5 ^: n1 }
End SubPrivate Sub gauss_Click() '高斯消去法9 g4 e, w3 i; [3 Z( C
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single ) R) D. @; V3 }6 j: g$ P% ji = 1: j = 18 b. N) h* r4 v
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) , q1 Q; x9 Y& t9 o$ j# AReDim Preserve a(1 To n, 1 To n + 1)5 U$ N4 V3 \; i. o& d
ReDim Preserve l(1 To n, 1 To n + 1) - {* \" _* t3 I9 J" W7 F3 xDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single 0 M$ [6 Q$ ^ j0 ]6 M! _" o6 TReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()% _4 y& q, `2 ~
For i = 1 To n- x0 r* [! ~; Y9 b1 h4 G( [
For j = 1 To n/ q2 O- f' P3 h% ~
a2(i, j) = a(i, j)9 }, T" K& }* T5 v! V0 m9 ~/ I7 \
Next 6 ~6 z, g. U8 j. M r5 O, LNext '将a()的值全部赋给a2() # O: Y1 K$ t- ]% X$ b+ ^! Im = 0$ m% s2 ]4 Y+ l
D = 1& X" C/ c) X3 D( f& j4 N
ReDim x(1 To n) 7 W7 U" K" ]9 G- lPrint "--------------------------------" a- D4 b# L* J# e( d
Print "您输入的增广矩阵如下:" & K0 R) }5 |6 {4 q0 C1 O7 MFor i = 1 To n' R/ z/ G4 M% u1 B7 r
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) ! O, L/ p% c% m) @' \) ]$ ~1 vFor j = 1 To n. L4 Q0 s; ]6 Z- B7 H# z3 L) j
a(i, j) = Val(Left(s, InStr(s, " ")))' X" E: _0 w! y9 P4 d; J
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) 2 x |3 I0 P$ NPrint a(i, j);* o0 Y# m; n) O2 w
Next 3 g& Q0 o& z# x4 `a(i, n + 1) = Val(s)/ T- k+ V- R i+ t
Print a(i, n + 1); $ b9 P9 t$ t: t7 U9 ^Print8 ^+ y% ], I' B7 s' [8 n7 V: u
Next- a7 Y3 C. G% L) H7 [
# M4 W2 y3 P( xFor k = 1 To n - 1 '开始消元: g! D& p- v9 z
If a(k, k) = 0 Then. U& g3 r$ S+ ?3 x' T1 G
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ! ?+ M @% }8 B" y+ E JExit Sub ; R) r4 t6 V" L, ^6 GElse- f2 c% e. a, n" V6 H0 u1 I
For i = k + 1 To n3 _* u+ Q, Y2 W8 z2 N t8 }' q
l(i, k) = a(i, k) / a(k, k)' v$ O/ V1 S8 e _) x" i5 K, h q
For j = k + 1 To n + 1 L1 O) l8 ]- F5 K! f5 i7 `
a(i, j) = a(i, j) - l(i, k) * a(k, j)! _3 K( R' }! _
Next( w& w( {" o: O3 B
Next - \) k) Q- W. e2 U& O: vD = D * a(k, k) 4 `8 f- ^' k1 A( ?8 dEnd If . |" B( ^: c1 ~1 e, g1 WNext k '消元结束 ; } v4 n- c- m% ~; d4 ?4 WIf a(n, n) = 0 Then 9 v8 V8 C" F. [/ K# i; NMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" ' s4 d2 f5 N1 G3 n" q% |; zExit Sub 7 f: z. A0 q6 N1 m8 }Else 2 [. a/ x- {8 \& GD = D * a(n, n): y# f% \; N. w
End If & k8 j8 D n8 t& \: w( r% h! F* SPrint "--------------------------------" 5 j! V' G5 W2 {2 s" nPrint "系数行列式的值是:"; D" E5 y6 _$ o8 l( y! {0 C
x(n) = a(n, n + 1) / a(n, n): K$ S& [* a' P' Z
For k = n - 1 To 1 Step -1 '开始回代 V5 r& v) t1 ]3 d! ` U U* \5 H, E
For j = k + 1 To n: [7 h! z( h# |
m = m + a(k, j) * x(j) 8 T" ?4 x& }# }0 pNext j ! ~) _, V* r4 }1 wx(k) = (a(k, n + 1) - m) / a(k, k) ) z `2 M$ L' Q% j8 i$ @1 Cm = 0: h7 |' L1 i7 n& n( |
Next k '结束回代 7 y$ p) r7 N" ]$ h" ]2 f7 F5 r0 u" `9 P# }) b$ X+ n
Print "--------------------------------" : `2 v6 r9 b, C! R/ G1 YPrint "方程组的解如下:"& l; z2 t; p5 ~( `
' ]& {; d) j" x' K8 R2 K% F
For k = 1 To n n3 }9 t" [% |4 T7 w
Print: G' g# w( F& }( s- `4 f
Print "X(" & k & ") = " & x(k) ( l4 g. X9 s0 R, zNext k- t: C) t9 w F y
Print "--------------------------------"+ c" d7 {4 s5 X, T9 w
Print "其中各行Ax-b=": R5 M0 r D8 @3 e8 k
Print 7 F A9 U$ z+ m9 x" l3 n3 sFor i = 1 To n, i2 N8 I% H, G
t = 0 $ E7 o+ {: V3 D0 uFor j = 1 To n 4 n( O5 H- L' ?t = t + a2(i, j) * x(j) ' Z4 c* q% g* n9 b* R& gNext j 9 T" F+ t+ b& Y; E# }9 `t = t - a2(i, n + 1) : \2 X0 v" C/ a5 O d# J$ H" `Print Spc(5); "第" & i & "行:"; t. ~. A1 e+ W" W, K- [
Print / A- b3 o% [ J ? dNext i # I8 p- B6 N- g& n$ M. c8 F6 L' o: K9 t! \1 e* \
End Sub