Private Sub gauss_Click() '高斯消去法 : x. E: t% [" j3 q* r" mDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single1 j- [% | K# {7 ^' w# Q- ~" p0 ` w
i = 1: j = 1# V% t! O/ Y3 O, t/ F" h$ Z; S0 h
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)). _6 f6 v+ u" K Z* |* B- e3 ~
ReDim Preserve a(1 To n, 1 To n + 1)2 N! o; R: N: O2 w; l& l
ReDim Preserve l(1 To n, 1 To n + 1)1 e4 ^2 c: ]3 j6 W9 R* }/ L
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single) e. N: a) \* @" e* ]+ N
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()) B: B$ U8 E" E, Z& J0 E7 y
For i = 1 To n 9 [8 j N4 H( \For j = 1 To n. q) a% o1 D9 X' e3 t+ e( h( N! N5 g
a2(i, j) = a(i, j) ' y; ?5 {1 N9 b. @, RNext 4 t9 N4 | ~4 e9 d0 hNext '将a()的值全部赋给a2()5 c& f. S/ K' _% p4 T# r- ^
m = 0 ! s* h- z; W1 G. c- g" BD = 1( V( q7 S' R% M. |
ReDim x(1 To n). N# i0 q5 [" @* G: m
Print "--------------------------------" ^- R$ e3 u4 ?; F
Print "您输入的增广矩阵如下:"8 m' |4 U$ ^) v6 s& H( |" [
For i = 1 To n/ P/ ]# c1 v# @' U3 d
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))9 M: q# ?4 {' w/ f( i
For j = 1 To n0 X% F" y6 q7 X; a2 m2 P1 |$ [
a(i, j) = Val(Left(s, InStr(s, " "))), `! @$ u) @* s6 Y
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) 1 d0 a3 G/ K. MPrint a(i, j); 6 E3 \& q8 B) U2 FNext 6 P1 I. u8 e, @" r3 }a(i, n + 1) = Val(s)4 l' j1 _3 H8 _3 ]5 t7 b) r
Print a(i, n + 1);5 o+ C. f7 J- f0 L9 D' O4 `- k
Print ( o ?: ]2 f2 {5 r% KNext& ~. v, h8 J: x# L
B e% _' r( S: j+ Q$ K
For k = 1 To n - 1 '开始消元 1 X3 z' ]: ?7 C$ O$ v2 WIf a(k, k) = 0 Then8 j5 k- v0 w( R7 @4 l h" ]
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ; t( I$ d* @ P( e9 g# p1 B; dExit Sub/ z- G+ v# h" ^
Else: _* T! ^' v& Q5 P! I( [
For i = k + 1 To n9 f) S0 K* K8 O; w/ o( H3 P
l(i, k) = a(i, k) / a(k, k) ' G) s" a- O9 X7 Y6 o( B% ~% Z* i/ ^For j = k + 1 To n + 18 e$ F: q- F4 w: ]
a(i, j) = a(i, j) - l(i, k) * a(k, j)3 s" Y" ~$ o9 |3 y( f% w; e
Next- n9 S- A& ?6 i) w# o
Next# |% S% p7 F# \
D = D * a(k, k) . s7 M: r: ]+ s# T- TEnd If . t0 D. g1 d, V; k: P. p1 }7 U: xNext k '消元结束 3 w y* y' p' NIf a(n, n) = 0 Then$ S) n- `3 W8 k6 A
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" / R+ u* r+ M, r8 G% e" ^Exit Sub 0 n" G' E" R% F LElse8 C- x; I; ^/ D0 O$ j7 u' S8 S
D = D * a(n, n) % i% B) b4 q8 y& v, R- t8 V3 DEnd If( H4 ?; V- D1 {1 p# X
Print "--------------------------------" - m; e" r+ u3 p k1 [2 ~Print "系数行列式的值是:"; D 4 ]% z6 n$ w+ |* C% |x(n) = a(n, n + 1) / a(n, n)2 X" |& A2 i, x, l0 O1 Z4 _
For k = n - 1 To 1 Step -1 '开始回代$ ^, N7 S; T' `" t4 v5 D# K5 X
For j = k + 1 To n2 g0 M( ?, ?3 i8 {
m = m + a(k, j) * x(j)# ?. o/ P T# X6 g. y! e
Next j6 M. }# i9 y$ ^
x(k) = (a(k, n + 1) - m) / a(k, k) " R P$ g0 m% l7 z1 D4 u- F3 N) Pm = 0# F, Z1 c" C4 F P) _
Next k '结束回代 " B9 k% v0 V5 W7 c# J - s& O) G' l" X: V: pPrint "--------------------------------"( p+ f6 S9 e& f6 m
Print "方程组的解如下:"( [$ V/ A( R" I9 K; M# k% o& W
9 @# _) ?8 t' W0 E6 L/ V* V8 kFor k = 1 To n8 i9 {7 [% U0 i
Print) R: c; S6 t7 _, ]8 B% m. }8 v
Print "X(" & k & ") = " & x(k)+ U- D3 j9 L, m- T' `# P) `: @
Next k( Q! q% p8 s, C0 {# ]
Print "--------------------------------" `7 X7 n6 C' `
Print "其中各行Ax-b="* q/ g/ w/ @# B7 Y, W5 I
Print ; W$ P! e$ d& S- {% F E( D5 m4 ?For i = 1 To n & D9 _1 I8 ~! O' p; F9 S$ tt = 0 , {* E# {" [0 z0 h8 o2 vFor j = 1 To n 7 c, i8 B! l6 zt = t + a2(i, j) * x(j) + P. x. t9 X0 E) N& I1 X# K# ENext j # i8 H2 x! Z( X. E1 p" Ot = t - a2(i, n + 1) w- m7 l0 }1 w8 C' k
Print Spc(5); "第" & i & "行:"; t! P. d( ^; T; n0 R* `# l
Print 9 S5 s3 |# S7 W9 iNext i ) S' p; l( j- Y: o1 ^# d0 a8 ~ 7 G3 V( l) x, F7 C, O" IEnd SubPrivate Sub gauss_Click() '高斯消去法% _9 B) i( }8 b/ P1 V
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single3 ^" J- E+ Z# D( v T+ h) w
i = 1: j = 1. u1 g6 y/ M& i: P
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) ' p+ b- a) n. {5 T, RReDim Preserve a(1 To n, 1 To n + 1) 1 v. c( v% h; z' Z6 ~; s2 MReDim Preserve l(1 To n, 1 To n + 1) 0 K! j' O8 h" A2 X! k& |Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single 4 v) q& u6 B# {4 EReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()+ R5 o8 p' }0 A' x
For i = 1 To n , A+ \4 Z1 z5 I0 ^0 ~+ i3 ?! wFor j = 1 To n 7 @. P% t5 w* ba2(i, j) = a(i, j)5 g- n: T6 f' ~- O1 |
Next6 u, v1 ^1 h" b* x* P( u" u1 |
Next '将a()的值全部赋给a2()/ |" n, N5 \& C# P
m = 0 ( G3 ]0 C+ f, i# F c" d4 j9 U" m5 sD = 1$ l7 Q4 C/ C( B7 e! p) e
ReDim x(1 To n)8 s( c9 [2 E6 R. r
Print "--------------------------------" , D6 \ B! `. V) A+ Y* a4 s. ]1 SPrint "您输入的增广矩阵如下:": D- r; j) z3 d7 F# d# C
For i = 1 To n ' C8 h' B1 m# ]* `1 L8 v E# f* `s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))$ B4 e, C6 l0 n, L, d
For j = 1 To n 4 J1 x; q1 o5 c9 {% xa(i, j) = Val(Left(s, InStr(s, " "))) * V& O4 V) i- K6 Rs = Trim(Right(s, (Len(s) - InStr(s, " ")))) ! s4 c# L- ?8 S1 M1 q, t, DPrint a(i, j); Y* e S! K) B+ W7 o+ ]
Next 8 e* Q# n, \/ ]3 @5 n1 va(i, n + 1) = Val(s) : V' x+ y9 q% zPrint a(i, n + 1);2 X* u2 E1 @$ p/ {2 S
Print * t4 D9 w, X9 ?4 ZNext7 ?% T7 A* k b# X: V. o% Y
u' Y- H3 r7 f$ J+ W. ` H
For k = 1 To n - 1 '开始消元6 D% |8 w# X) q3 a$ y1 Y9 k P+ E
If a(k, k) = 0 Then 5 o- x* |+ P4 Y) `MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ; O0 d; `1 d0 o% ]" b3 j6 MExit Sub 5 t3 o7 l8 {/ X! u ^/ k6 lElse * J0 ]4 h, c9 b1 C* N( O+ L P: uFor i = k + 1 To n # l" T0 s- n% U$ H5 b7 Z6 m1 Bl(i, k) = a(i, k) / a(k, k)' K9 m9 a: b4 _1 q3 b; u, n
For j = k + 1 To n + 1 ' o: b0 h6 n) I) x" qa(i, j) = a(i, j) - l(i, k) * a(k, j)+ z4 \( a) a6 f! b
Next4 t! r: Q- L$ m+ O1 o/ i
Next 8 e& V& Y# |+ Z) Z% B: K8 w: uD = D * a(k, k) r) d0 s; K& \: U: ~- I0 ~
End If3 r4 }3 d- O8 E: d! k& \& ~! G8 j
Next k '消元结束: z+ |$ S6 W) D$ Z4 x0 H8 X
If a(n, n) = 0 Then n* P; |: _- HMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"& ~9 e! W/ R$ A, w% e9 y
Exit Sub9 s6 u4 p7 g- b3 d
Else $ T% P5 k8 j! b8 |% ]; SD = D * a(n, n) . W# S0 l5 e& lEnd If 9 i7 j) _ G2 r: }* F& ZPrint "--------------------------------" ) V+ T( R, U. p+ }% D% Z2 s: CPrint "系数行列式的值是:"; D % z) b5 D& z% V7 T% ]7 Z' Y8 xx(n) = a(n, n + 1) / a(n, n) 7 G+ ~/ l# u5 a4 {0 D eFor k = n - 1 To 1 Step -1 '开始回代" I) S5 u5 |1 C/ n* c* A: i, y
For j = k + 1 To n4 L6 B( b( N* n5 P
m = m + a(k, j) * x(j): I& ?1 f1 d) K. C
Next j7 n/ B& }9 X" c2 A
x(k) = (a(k, n + 1) - m) / a(k, k), ^ f: `4 r" l* k8 x7 }
m = 0' |% T# F4 @# o1 r2 j4 C+ J
Next k '结束回代 # U2 k' J' P) k1 W" ~3 p0 h {7 @8 f2 d7 S; s) ~4 U+ o4 J& tPrint "--------------------------------"0 ^' W/ R, n- u- C) ?! V
Print "方程组的解如下:" 2 d( b& B. ]# A" \* o" g: l! F$ u1 B' J) s- l9 r
For k = 1 To n1 n/ Z, C7 }$ g" u8 g N
Print * W( V" {5 T7 HPrint "X(" & k & ") = " & x(k)$ ?7 |! y' O3 [; z" @$ D
Next k " [% J: k U5 I' ~! e/ [8 aPrint "--------------------------------" - B% p6 f' C5 \+ U FPrint "其中各行Ax-b="9 A) m8 x& `0 D+ W
Print # s+ Q. T' X& H% M1 t. _* eFor i = 1 To n 8 O5 A( o2 i. f( I* tt = 0 # ]( |+ ]* E& D( R7 DFor j = 1 To n0 z* \& v/ p' r$ Y* P0 ^$ \8 y1 ?, ^
t = t + a2(i, j) * x(j) 1 A8 p5 [: e. x6 I) XNext j ; X, p1 {4 J7 }2 v$ _0 B$ I: G xt = t - a2(i, n + 1) 3 G4 \7 Y0 u7 A _: PPrint Spc(5); "第" & i & "行:"; t$ M1 I. h. E; ~# j1 L; h. C
Print 8 C G5 G" H, W+ h8 g6 x1 hNext i * t3 D1 S% I3 P) w3 s: s5 T) s. s! G' t. x
End Sub