Private Sub gauss_Click() '高斯消去法 b' r* o, D$ u: k- [& c. W% \
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single2 Z7 Y2 S, Y V9 d! I
i = 1: j = 1' ?' L3 ^7 L k6 Q* ?9 I: n- r: h
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) " R* J2 w; n( u" J! `* Z9 AReDim Preserve a(1 To n, 1 To n + 1)0 h8 a) q, T9 S
ReDim Preserve l(1 To n, 1 To n + 1) Z5 R) b% o, ~Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single4 E6 \. p' K' S
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 9 U$ ^0 U& e' T O' T! @For i = 1 To n . p, Z6 u' g, N9 l0 Z2 r4 U& r1 lFor j = 1 To n0 v" M7 G6 h4 p6 @. |0 U7 T# Z
a2(i, j) = a(i, j) " A5 e |6 v( j. j. jNext8 ~9 P/ I5 T& J; j4 ^: u' v3 A
Next '将a()的值全部赋给a2()* y, c; }8 S u0 i- B) Q. Z% `7 v
m = 0( @" }) F& e7 W! [# Z4 g0 u+ Y2 T- ]
D = 12 T9 b$ @9 c& i0 }* @- G/ t- K$ E
ReDim x(1 To n)6 G9 w# F2 L1 w: y7 D
Print "--------------------------------"9 I; u- Z6 D o. o9 [9 x V
Print "您输入的增广矩阵如下:"" B, @) o4 ?7 s7 r! K v g/ l% Q
For i = 1 To n* i) p9 I, g* j& f; q- R; j! k
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))/ R. R( d: |+ f3 R
For j = 1 To n ( x# {3 M5 |' R6 s$ Na(i, j) = Val(Left(s, InStr(s, " "))) 7 A* p* J$ M9 n/ F6 bs = Trim(Right(s, (Len(s) - InStr(s, " ")))) " W* q) o& w$ c3 YPrint a(i, j); ) f2 s) B' p* Q) j6 GNext 8 ?4 |' i: A2 I3 x9 d. L8 ^/ Z4 E$ t1 }a(i, n + 1) = Val(s) * Q n# P& Q( b* m& G2 ePrint a(i, n + 1); - t% {0 Z2 _ J: _( R) T; l& iPrint 6 H; V0 h8 X( d" e$ q' q" j: p" B) pNext & Q" I4 S8 I: c. ]# c : L# f! \ J4 `For k = 1 To n - 1 '开始消元 9 B$ b* E5 b5 b2 B, E3 R, |If a(k, k) = 0 Then, V3 z' m; D) g1 J2 B
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"' J6 U. D% J0 ^( A6 N$ T( h
Exit Sub & v! F. B( y8 x: C: c9 wElse , t9 `( Q4 g G6 PFor i = k + 1 To n 4 ?9 F3 u* N6 A( s8 D$ e% Ql(i, k) = a(i, k) / a(k, k)" z5 }% l: I9 ~
For j = k + 1 To n + 1 ; A0 @) w$ d$ ^" P1 Ga(i, j) = a(i, j) - l(i, k) * a(k, j)- x7 m3 ]* q) Q. L
Next # b9 u8 X) m- L) u2 v( [Next ' y8 U. X5 I7 z& ~ @. yD = D * a(k, k)* }8 k* c+ C5 R g# {/ t0 M( @
End If9 i9 E5 e7 G6 M0 }/ {) S/ Q
Next k '消元结束. a+ f( q1 m6 m. V8 F& g6 t
If a(n, n) = 0 Then& H; o* v. r/ p+ X; ~- J( ^
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"& ~6 S" O9 |, k/ K
Exit Sub2 z, {$ |% F9 v' q# `$ j6 _
Else - E" D4 e# K5 N. I n7 f. u @% vD = D * a(n, n) ; e( Y( ]9 a3 c6 z" AEnd If5 O( F/ c8 w# x, X6 J/ |/ d
Print "--------------------------------"0 g6 u! y/ E- L) Z! o
Print "系数行列式的值是:"; D # e, Z( ~& j. T* P5 h5 Rx(n) = a(n, n + 1) / a(n, n)1 @' \) H: U7 V" ^6 ]5 K
For k = n - 1 To 1 Step -1 '开始回代 ) C2 _% k. E% E6 k9 h3 {: CFor j = k + 1 To n* q1 ?+ e( v1 a8 k; V# y g
m = m + a(k, j) * x(j) ) W! {6 ]* z1 E! T2 S* ?# n) j$ w# \Next j& J! P0 V3 k& W
x(k) = (a(k, n + 1) - m) / a(k, k) 2 P% k! s8 y& ~# Jm = 0& ?% k2 O9 z* @ P
Next k '结束回代: _8 H; a2 P$ |7 h# l1 K# E
! w: r. l$ F1 p" Y
Print "--------------------------------" " f8 y$ i" i: }' }' tPrint "方程组的解如下:"; k5 Z _% j$ E0 v
- X6 ^7 m2 k2 y) X) UFor k = 1 To n y. y' J' N6 `! E9 d* [2 N
Print) ^9 y5 P2 i5 ^7 g
Print "X(" & k & ") = " & x(k). n G' h- f4 h0 E# d- ^* w
Next k: s4 W% i$ R0 E. g. a
Print "--------------------------------" , ]& L, p# G. u* n0 R6 G; zPrint "其中各行Ax-b=" . Q3 Z7 ]5 p' v2 ?" @5 ~Print - r/ {0 E( u8 U6 LFor i = 1 To n; T3 t! _2 n! b1 G) o* T
t = 0( d* V0 H$ }+ }( j
For j = 1 To n( N* n0 q2 n8 x* h
t = t + a2(i, j) * x(j) 9 y$ P: Y$ j8 c" Q" g0 F- vNext j & l1 \, p$ J; [3 N4 u7 at = t - a2(i, n + 1) 6 [1 ^& S0 S) \! b2 k- OPrint Spc(5); "第" & i & "行:"; t7 r4 b1 m; L* i. R# ~
Print# X( H( c, f$ m* s# h3 M/ @; l: X
Next i2 m) y- S1 R7 F- M- \+ g( d% t
8 P0 |, w2 A; o9 G; B! KEnd SubPrivate Sub gauss_Click() '高斯消去法" a. C; o3 P0 e" V r
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single 4 l2 u8 K( T: S+ j3 }" Q7 n2 R( Ei = 1: j = 1 + V; u# Q1 L H2 a9 M9 b+ f9 Hn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))7 x6 l! X! a: E! x0 @3 ^# i
ReDim Preserve a(1 To n, 1 To n + 1) ?9 C4 \' h1 J5 qReDim Preserve l(1 To n, 1 To n + 1) ; E$ I; Q# U) Q% MDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single1 a1 @* G# Y8 q* W/ @
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() + I$ i* J" I1 [1 t: ?' b5 S8 B# N4 EFor i = 1 To n 0 e! A f$ G' e( I& ~# ?For j = 1 To n - p1 e, {- o+ Ta2(i, j) = a(i, j)) R8 O, c# q! [" l3 X1 ` ~
Next7 }/ y: L6 X% \" X F
Next '将a()的值全部赋给a2() 8 O _6 m' h% U/ n. t. _. hm = 0 . j5 Z7 H2 ]5 z! u0 i% K# u1 OD = 1 & a1 V+ k1 N7 d. `! i, C% h+ zReDim x(1 To n). O+ Q( R) X3 N/ h! l4 b, h
Print "--------------------------------" 0 ^7 W' i( e+ X( Q" K/ A; K# \Print "您输入的增广矩阵如下:" - q& k' Q, b- l. }; MFor i = 1 To n, U% Y/ D! t; G
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) , p+ { X* S# \. J& ?For j = 1 To n3 ]: i" s% }0 y+ S
a(i, j) = Val(Left(s, InStr(s, " ")))+ n& \% |3 P3 Q
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) + `: j1 \# O! Y( D& {7 o/ k' qPrint a(i, j);- U1 v# t6 Z- L2 c/ N6 W
Next4 z1 O* _2 a" B# P: d# a: X
a(i, n + 1) = Val(s)5 `- O7 W: r: F6 ~8 M
Print a(i, n + 1); 7 w0 d, V6 X* P+ P- FPrint5 \6 ?. N% I& t/ A8 o+ Q4 W; U- F
Next * c2 l: f3 b Z7 ^8 N: d4 B8 X8 v( z Q& q; \& M. E) e
For k = 1 To n - 1 '开始消元 . C( Z# P' N9 m* O/ l4 FIf a(k, k) = 0 Then8 U" F) J- C* I* }
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"$ i1 P2 p: t$ [" R1 M/ [4 e% i
Exit Sub; z' Y% ]7 R$ G! {* Z9 @8 e4 w2 y$ Z$ Z
Else ) ]5 o; Y& L9 @; B4 K9 LFor i = k + 1 To n: y0 V1 K7 i8 h7 W9 [
l(i, k) = a(i, k) / a(k, k)! w" s) Q" D, f% I& ]3 }- T) L
For j = k + 1 To n + 1# `8 r( P+ U3 D' B4 c j
a(i, j) = a(i, j) - l(i, k) * a(k, j)& T" s1 d2 p6 D
Next ) s* S, b( ^; o5 o) ?3 v* l2 RNext2 u8 s/ A% r, l" {6 O$ E- _
D = D * a(k, k) $ O$ V" e# ~) x3 f; s% KEnd If 6 w8 ^: L- M' y' f3 U2 W kNext k '消元结束1 J* e$ E! `7 V! D) {
If a(n, n) = 0 Then * T' A% K. ]7 C( h* R4 X- L! sMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" # T7 `& K7 d- X1 H# o0 B4 MExit Sub # f1 K4 |/ }4 Q8 l! e& dElse ! Z# J: S0 A, r v- gD = D * a(n, n) : J' M: v4 k+ v6 r" QEnd If : M2 q+ i S! X4 _* _' FPrint "--------------------------------"6 f% F/ N* ^3 h$ @! S; ~
Print "系数行列式的值是:"; D5 G$ `+ U- }6 ?: l
x(n) = a(n, n + 1) / a(n, n) ' S& t/ {: t0 j1 LFor k = n - 1 To 1 Step -1 '开始回代/ Y/ Z. n" _$ n
For j = k + 1 To n) G7 }- Q" C8 C& ^, H
m = m + a(k, j) * x(j). o, D3 ~8 n! `$ J1 I
Next j9 ^& Y$ N9 M. g, f6 S1 @
x(k) = (a(k, n + 1) - m) / a(k, k) 5 P6 F, R* E0 ^m = 0 5 x5 _6 o1 j$ ENext k '结束回代' I, U5 m7 Z7 j, h5 |( a
( ]3 P& q5 s* T7 iPrint "--------------------------------" 8 h3 D4 Y: z7 u" [$ `# T6 l3 QPrint "方程组的解如下:" $ K8 V9 [& D1 r4 s1 ~& E2 w) Z# f, b1 v( Q) y. l: ~9 j
For k = 1 To n # S' l6 u, f0 ]% K* h6 mPrint( a) U7 |8 g" Q5 P
Print "X(" & k & ") = " & x(k) 3 [( P% v4 Z8 ~! A# k" g5 UNext k5 c, P3 M0 g+ K8 ~" N0 [# S
Print "--------------------------------" $ J3 Q1 ~: b( j% O6 j- _Print "其中各行Ax-b=" 3 d% o( h( ~5 h+ k( M; w! dPrint ! }( O7 n) @/ V9 o9 dFor i = 1 To n5 M! A) c0 ?7 g: ?
t = 0; v7 {/ i7 ^( b e u" @8 ?8 t
For j = 1 To n% S2 v. U. A1 b- ?7 ~$ U+ r; E
t = t + a2(i, j) * x(j)# S# \1 c! b. `# \
Next j6 r; | [+ S+ S( @. ~
t = t - a2(i, n + 1) " o" m8 M2 i9 i+ V4 ]) yPrint Spc(5); "第" & i & "行:"; t9 k" g. T4 G7 A& a+ ^! [1 u9 V
Print ' {! D. C3 S. [) k2 J& hNext i 8 ^# W1 v+ E+ \. b2 \# k% s7 H1 l% Q
End Sub