Private Sub gauss_Click() '高斯消去法 ' g' ^$ a5 r/ l5 MDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single ; i+ ]# ^. m1 w# p* w! c( H$ p$ X* ui = 1: j = 1 + q9 r$ T: `2 D4 B; _* f) x1 Bn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) 9 q1 h# o6 m8 G* } WReDim Preserve a(1 To n, 1 To n + 1) 6 J6 Z+ k' q2 B# V9 l& n9 D! ~ReDim Preserve l(1 To n, 1 To n + 1), `3 h1 @; O5 X, H) I4 i2 F
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single7 g3 Q* Y( m+ r9 H6 g1 B, H- u9 f
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()' A: R4 L9 Q& Z
For i = 1 To n( y+ q6 D# O4 H9 ^1 R! A' Y
For j = 1 To n' d" A3 i! M" }! S
a2(i, j) = a(i, j)& {: z' F: |& _1 P
Next 8 I! \4 |: }) Z t; k6 SNext '将a()的值全部赋给a2()# C9 F7 A% @9 {# b7 ?! J0 F: U
m = 0 $ b- ?6 n# r" K6 F% F/ E) sD = 1* p7 i4 b0 H- _& p0 i" e
ReDim x(1 To n)8 U+ X4 ^3 n$ c% m0 Z% m7 z1 n
Print "--------------------------------" # `. v4 M0 H zPrint "您输入的增广矩阵如下:"' D$ [* R# X$ ^- Y, u7 V
For i = 1 To n 4 H( z( h; |$ G" c" Vs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))8 u p% i3 S* z% h
For j = 1 To n . ]/ ~9 N6 G& B- b8 U/ L$ ha(i, j) = Val(Left(s, InStr(s, " "))) $ q- L3 ?+ b) s) I! Us = Trim(Right(s, (Len(s) - InStr(s, " "))))8 r; C8 U( E, c1 H
Print a(i, j);) M/ W3 l8 c$ G4 {0 s9 C
Next, E( d0 o! |* J7 ~1 w8 r/ H
a(i, n + 1) = Val(s) * d" D7 i; W: K7 U' @8 N: d' K0 zPrint a(i, n + 1);. F$ i0 m1 u7 _. r" M8 d7 k4 k
Print K2 c! F1 p! ?- ^) A9 l
Next' g- ?$ p2 ?. |8 s0 M1 h- z
1 }2 e8 g7 Q7 m# q2 L8 F- h7 }For k = 1 To n - 1 '开始消元 . i/ R0 I/ f0 k4 |& eIf a(k, k) = 0 Then3 Z! O' C7 X @4 W8 E* C) _# }
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!": o& Q5 l& |7 W O# s) A; B; t
Exit Sub o- c$ G8 k) u' v9 u& {
Else + A- |1 _) a$ `3 x( N. _, x4 EFor i = k + 1 To n / q6 P$ h. ^, t: X Vl(i, k) = a(i, k) / a(k, k)% G/ M" Z7 G; U# j/ n
For j = k + 1 To n + 1# ]! I- E( K6 r% M: j% S- ^$ l, O# |
a(i, j) = a(i, j) - l(i, k) * a(k, j) - D* `2 I+ q0 t+ KNext' c9 k7 a. v8 @" j
Next 1 S s6 H4 }! [. F$ lD = D * a(k, k) I4 X8 Z- ?! g( |$ O9 ^+ }End If, a- `) @% K5 A+ w
Next k '消元结束 - j9 x# F8 m# W3 AIf a(n, n) = 0 Then8 n% M* n( E% b* w
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"+ | q7 k6 U" b& U- r3 J9 \0 q5 T
Exit Sub 7 N, U1 l, n% {& ~1 M# L$ v; B. sElse* Q6 o& L$ V5 }# L: B C$ Y
D = D * a(n, n)( b8 E/ n" U3 N# P
End If + ?1 g a1 l3 L. Q" j @6 I' zPrint "--------------------------------" " b! o# L" R7 y$ W- q% c6 vPrint "系数行列式的值是:"; D 9 K% |6 D: M6 F7 I; px(n) = a(n, n + 1) / a(n, n) 1 t: c4 `8 d b0 h; {# bFor k = n - 1 To 1 Step -1 '开始回代. S) d+ g- ]% p2 R9 w+ q
For j = k + 1 To n8 Z8 i" T) q' T+ H8 X3 a d/ E5 K
m = m + a(k, j) * x(j)8 F4 c2 ]$ R5 }0 _! y2 C9 c
Next j ! \0 n I' b# e' p6 x( Dx(k) = (a(k, n + 1) - m) / a(k, k) ( X7 G( ^* y) J( v4 sm = 0# |7 V$ t! J; w; U1 f" @
Next k '结束回代4 ?$ C: z# |# u# E3 r
. w$ E+ V s! J
Print "--------------------------------" 7 l: U2 [6 U+ mPrint "方程组的解如下:"4 S" n, j1 D1 [# U4 g# p* q3 l
S9 O( D ^! \9 N8 V: U% v- m' T
For k = 1 To n- T6 z6 f0 T, i: U
Print $ U7 C: a9 l H: rPrint "X(" & k & ") = " & x(k) 1 O; L- y+ u/ F. L$ Q" ^' O: }Next k : J. T; j+ L5 u( QPrint "--------------------------------"$ E0 d: x$ q, Y
Print "其中各行Ax-b="( }- H$ w+ r3 n
Print) H& ^5 ?1 l% Z7 x
For i = 1 To n- R _% }# l+ s$ i1 {; e
t = 0 2 l$ d9 ], [0 m7 Q. k* k% JFor j = 1 To n / y& i) T! d( O1 d8 C. mt = t + a2(i, j) * x(j) / H7 ` Z' y' |; HNext j / |6 U$ t5 [- m& A3 g5 l6 ]! At = t - a2(i, n + 1)1 C5 p: ^( j+ ^
Print Spc(5); "第" & i & "行:"; t$ I' c% h6 y2 t' G. N9 @7 v
Print 3 D0 s" w# h) N9 INext i* P1 X' b8 A4 Y0 c7 K
; z/ V' r! V' r8 X
End SubPrivate Sub gauss_Click() '高斯消去法/ S$ v# ^" F; O2 M! f0 P; x" W
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single$ ^- ~# y' F$ a6 M
i = 1: j = 1 1 h, } l4 j, U5 _" mn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))" F) X9 ^* b7 t6 z" E2 L7 W3 }
ReDim Preserve a(1 To n, 1 To n + 1) / ~8 ?" j" r& s9 N0 MReDim Preserve l(1 To n, 1 To n + 1)8 U9 [* E% R7 }7 c4 o# s; Q8 [% O2 @
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single $ F. o* h" @( q4 j aReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 7 ]* t8 f; L% u& ^& \3 WFor i = 1 To n " O& u4 y, `( PFor j = 1 To n! L; Z$ ^4 b- ~
a2(i, j) = a(i, j) 9 J* a9 c3 z* u& L3 y q( QNext; {/ h: y6 G6 I+ Y
Next '将a()的值全部赋给a2() * V; A& c. r9 o1 @6 Um = 0) w2 J. ^! X7 O7 l: D+ w
D = 1 6 b* z6 a" a! k2 _ReDim x(1 To n) ; v2 m" ?: J2 p0 B3 }, Z* {Print "--------------------------------"7 P4 r4 n( q( p9 i
Print "您输入的增广矩阵如下:" 5 F: w4 Q% k" r' Y0 y6 A& ^" x9 oFor i = 1 To n+ U% Y* ]* {6 S9 o# e( Z
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) , y& z/ `3 k3 m3 l7 \2 M; P/ kFor j = 1 To n1 L% E0 ~' T! V+ S
a(i, j) = Val(Left(s, InStr(s, " ")))3 ^- S5 Q+ o S' g; f+ T' i9 B2 G7 d
s = Trim(Right(s, (Len(s) - InStr(s, " "))))( U" {% u& R* ]' Q" }
Print a(i, j); 5 t* ]4 c: ^/ l; j( L' t- I" xNext; }; G5 J7 v. Y
a(i, n + 1) = Val(s) 8 K* \ ]2 y: `3 N6 v3 s4 nPrint a(i, n + 1); $ M% K) U) F$ R% n/ d# lPrint. w- Z. l Z! O) F, r) l- b
Next4 Y3 N H. t. ~, y
+ l/ L2 f6 r* NFor k = 1 To n - 1 '开始消元 / O1 R% v K6 n* F& H) EIf a(k, k) = 0 Then* q3 c2 F2 n# v* C: Y; a; u
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"! K9 Y0 v: ~& n
Exit Sub 1 @: x! W# N: E. v, `* OElse 0 g/ ?, b$ Y; k: q7 l* ` @For i = k + 1 To n, B- v. I+ ]- e( \( X( I5 v
l(i, k) = a(i, k) / a(k, k) 2 ~# d6 I$ W* M+ OFor j = k + 1 To n + 1% h( A1 I- B2 V* Q
a(i, j) = a(i, j) - l(i, k) * a(k, j), j& r( w3 n3 [) Z( X G
Next : A) u8 f- Q# X' q, T# x" N* ~# \Next & l! z8 H- s) ]. k T3 |D = D * a(k, k)0 L9 j* L9 o w. w k
End If 1 u* z! ]; C* |: N) S) m$ ZNext k '消元结束 7 I" t. I4 n" B9 KIf a(n, n) = 0 Then 6 V( c) s) U6 r, N! S1 @" `MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!". G( p2 X6 m D( A; s
Exit Sub w+ S6 L2 M4 @& N. N
Else) {) @. w6 q B( S
D = D * a(n, n) d* M1 H9 x4 i1 m, yEnd If : p4 p3 B, ^5 r. w% @& Z$ z( e5 sPrint "--------------------------------"; L/ w( }! H7 o/ a% u
Print "系数行列式的值是:"; D / n& r) u4 F+ wx(n) = a(n, n + 1) / a(n, n)) ~' K. w+ m1 P' w% u
For k = n - 1 To 1 Step -1 '开始回代 ! M* q% [* S4 S* v% |For j = k + 1 To n7 J5 k2 }2 I( Z2 X' X1 m6 V
m = m + a(k, j) * x(j)7 q! | S' T# X, L- [: \- o. ]. G
Next j4 ~7 q1 k7 o( i1 b8 s
x(k) = (a(k, n + 1) - m) / a(k, k) ( D8 o- i; C; s7 Mm = 0 8 W% H( w: F, lNext k '结束回代 0 s0 \$ k: u" V% |8 t" g n: T |' \9 u6 o6 h
Print "--------------------------------" ! v% Z8 b6 v8 D* N, dPrint "方程组的解如下:"& z- h) j* j! S. Q
# p4 k2 \, g8 e/ E' NFor k = 1 To n n* _ x5 z( x7 ^Print4 V0 W* X6 l$ L2 N
Print "X(" & k & ") = " & x(k) ; _# I' D: ~, U7 ENext k$ S- t, c# Z3 j z6 l
Print "--------------------------------"0 ?& T9 t2 @0 D T: J
Print "其中各行Ax-b="! k2 C# b1 t; k) Q5 w
Print 2 \5 x/ J& t6 z. c( _. _For i = 1 To n; [* C2 h+ a" T( z5 G5 b' |( y
t = 07 M0 ^ c) B8 e0 P3 L
For j = 1 To n/ c( u5 d5 x( o' ~$ O
t = t + a2(i, j) * x(j); D4 f& @# g p- [
Next j' M3 L E' d$ v, d
t = t - a2(i, n + 1) $ M! t: Y8 ~( Y- u. j k5 f+ |Print Spc(5); "第" & i & "行:"; t + E' a- q4 ]# f4 }+ t" m( PPrint # H$ k; h# }2 K( q' u, _1 r& j$ p6 wNext i 3 T4 W: S, l7 b3 I( O' B. c, `1 T! }+ K8 A1 Y
End Sub