Private Sub gauss_Click() '高斯消去法5 n1 [9 K/ D0 Q: k+ l! Q, z
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single7 g" X4 Z) c' }' D: n
i = 1: j = 1/ ~* Y; h. f) R/ u3 V7 x# m
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) 4 ? Y+ N* s. \ReDim Preserve a(1 To n, 1 To n + 1) - d" C0 t+ w- ^3 m' B W" FReDim Preserve l(1 To n, 1 To n + 1)3 c9 _, m* U: c5 V
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single# ]1 f, G7 z; c. e' g% }$ I
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() , _, ~2 V3 L) D3 m7 E& E8 pFor i = 1 To n * g7 F7 F, e$ J+ k" T& fFor j = 1 To n 4 f- M) s% q! q3 X6 Ua2(i, j) = a(i, j) ' I( E0 z1 [8 a8 P! G# v/ gNext ' ?0 H8 p: ^/ t% yNext '将a()的值全部赋给a2()! C" N6 Z4 ~4 z; G
m = 0 ) d+ u& ~5 n/ c" J- k: c6 E" c, }D = 1& g: i; C1 `9 E- Q0 e# s9 s2 W
ReDim x(1 To n) ; E5 d( O/ X5 ?/ H% x0 A% v" V, DPrint "--------------------------------"( d9 K Z1 n8 \% C3 Z
Print "您输入的增广矩阵如下:"$ ~8 Q( B: n5 q3 K0 o
For i = 1 To n( B r: ~2 i+ ]6 O2 G% N
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))& I6 Y" J! K, l% D0 H9 u+ V
For j = 1 To n" E( l M6 B1 R5 v# H! @
a(i, j) = Val(Left(s, InStr(s, " "))) 9 S) ~$ \* K( l! B7 z5 Q, Ys = Trim(Right(s, (Len(s) - InStr(s, " ")))) + R1 w" }% U0 v# O0 ~& y0 ePrint a(i, j); 4 y% n' t0 T) T# B/ X/ ^Next+ S% e# A" B# W# ^6 e% |
a(i, n + 1) = Val(s) , E, P5 Z! W$ F: p R$ FPrint a(i, n + 1);+ p) ]" _) |! E/ N0 R* p h9 D
Print 9 p, f9 K! |0 D$ Z2 s* yNext 6 ?( ~) o/ Y X* r- J ! J% X* o6 D, o* Z$ uFor k = 1 To n - 1 '开始消元. l$ K7 @ j6 x) P% `% [
If a(k, k) = 0 Then & }. g! e6 b5 F- X! AMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ( b+ I9 W* x- S* `8 x Z9 x) [Exit Sub ; i0 Z) M( ^: Z' y/ @" b4 zElse , V" d$ v# _3 O) a* ~& n: _For i = k + 1 To n6 O, A, m! b6 Q4 G! a6 E4 |
l(i, k) = a(i, k) / a(k, k) 1 W! ?; X0 @- G2 A7 `For j = k + 1 To n + 1 0 C" l$ X, f3 M3 Q& ?4 ha(i, j) = a(i, j) - l(i, k) * a(k, j), U u7 R+ X5 G8 _
Next H! l$ a4 r! i* G! `7 L2 n
Next 4 ^) y) o4 B' v: R2 @% N$ W9 eD = D * a(k, k) ' m9 ^, A" }6 Q0 b9 |End If6 `$ a2 D0 z) ?: h6 ?
Next k '消元结束 4 U4 K+ v) H1 f6 e1 ~% a. UIf a(n, n) = 0 Then) k T; R- F# ]& S
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" ) T& ?: O/ c8 C4 b. B$ U4 {Exit Sub , I+ k) @3 G( `7 ]7 K8 J- |% YElse ! K1 C( q$ x- G: UD = D * a(n, n) ( m/ o0 v/ J% b) k6 w3 v' N& k# `End If ! n2 k, t8 {$ G( ?0 MPrint "--------------------------------"' z u9 a& `7 w4 [4 }# d! V4 r4 Q
Print "系数行列式的值是:"; D* k0 d5 t1 k" O* |/ f0 e" w% L4 V
x(n) = a(n, n + 1) / a(n, n)7 e L# v- F! b6 W7 r
For k = n - 1 To 1 Step -1 '开始回代, r& g! B1 j T( t" H) q# \ E" }
For j = k + 1 To n * c* u) c9 ~* x7 f* |; F* V( G7 wm = m + a(k, j) * x(j) ! A! q9 g, f! @$ ONext j 7 t9 ^ I9 Z) m# F; _x(k) = (a(k, n + 1) - m) / a(k, k) ; m, b: [7 i( i# H! d3 {! b f) Im = 0# ]! U3 L) y+ b- }
Next k '结束回代 ( R# ? n; F5 Y + N6 b8 j1 p3 h6 APrint "--------------------------------"/ y" I, i1 R, Q* d8 m
Print "方程组的解如下:"0 g: d2 _, Y' }6 D) p& k) n
0 n1 P! e5 u- V; H) G5 K/ J& x
For k = 1 To n9 {$ X7 k+ m X
Print1 f K" p1 x F+ G, L" r" T
Print "X(" & k & ") = " & x(k)7 p& ]$ @! F/ b. k
Next k- T$ U( o' q) z
Print "--------------------------------") K0 r$ k) c h! v
Print "其中各行Ax-b="" S) ?' }/ h1 D+ I' }& e
Print 3 s {" v1 F1 m! e8 Q1 O+ y: gFor i = 1 To n . @; J* x9 D5 X* O- |t = 0' P+ w" J" y; X# [, P! T" L
For j = 1 To n 1 E$ r( L! q# c0 b, ?& l1 c/ Mt = t + a2(i, j) * x(j)3 H- C& V; t1 Z0 L3 \
Next j$ R( T6 u( }7 r
t = t - a2(i, n + 1) " j, ^7 q) x5 m% Z! [: Y: SPrint Spc(5); "第" & i & "行:"; t/ m! I1 T$ x$ X/ l) Q1 {. H6 [: m* G
Print 6 o" X0 t$ z7 X4 _0 }) N. {" _Next i5 _/ v1 N7 ]- A) e0 w8 c
% U$ w4 T. Z$ B8 OEnd SubPrivate Sub gauss_Click() '高斯消去法3 j$ D: R1 R+ E0 D
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single . j! z8 M1 [5 vi = 1: j = 12 _! B* g* {" P6 ~9 f: Q
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))3 Q' H6 F* i( J1 V
ReDim Preserve a(1 To n, 1 To n + 1)1 ^ k# \3 j6 \4 B- z0 ^7 m" H
ReDim Preserve l(1 To n, 1 To n + 1)2 n& z4 t0 q; h
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single2 z. d' N1 H Z. S
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()% h [( g& r/ o+ p' f9 z* W* @' ~
For i = 1 To n/ u9 y7 D$ A% o" p
For j = 1 To n* D/ \6 ?' O. W6 p0 p9 b
a2(i, j) = a(i, j) ' }: Y# V" K8 F. F, W' jNext, X- {" {7 Z6 L& Z) c! S3 @3 w4 k
Next '将a()的值全部赋给a2()( L2 _- O& m @8 [( L- ^, T
m = 0 ( l; |2 y: c5 |+ j0 GD = 1( \7 k O V; u& S/ f/ }
ReDim x(1 To n)1 u* i7 |; @6 E1 [
Print "--------------------------------" . ~2 g1 k, b* D, ]0 M# W' pPrint "您输入的增广矩阵如下:" O8 a0 C7 G+ {For i = 1 To n G3 ]- B1 C* S" ^( |2 F8 vs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))# C& y1 @3 ]! v% n1 j7 Q- a9 [5 K
For j = 1 To n $ _ z) P" _7 U. n4 Ra(i, j) = Val(Left(s, InStr(s, " "))) + |5 h7 t* q7 X7 \9 Hs = Trim(Right(s, (Len(s) - InStr(s, " "))))' @4 i; q7 N% l. h! n4 k2 @
Print a(i, j);# W! }/ _: _& n& Q) @# T9 x* e
Next! u Z5 D( `6 g
a(i, n + 1) = Val(s): P7 N! t4 T4 B- j8 G
Print a(i, n + 1);. f% w" E+ w( q( o
Print 3 R" W8 p6 t3 ]Next, `8 j9 H* K$ p
7 c" |& v: H) qFor k = 1 To n - 1 '开始消元6 e% L! q; J! H( ]! f- H' d8 L
If a(k, k) = 0 Then 3 ?0 y% z& \4 @; B! MMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ( N" [7 h8 F( t+ y% ?Exit Sub ) t$ J+ I! i* J3 HElse ) l; J) T. _2 K( Y) nFor i = k + 1 To n - Y) U2 p N! h7 nl(i, k) = a(i, k) / a(k, k) ! j9 C% ]$ |* ~; e+ X) V0 H# uFor j = k + 1 To n + 1 " x6 s. R9 j# g) |- l& Fa(i, j) = a(i, j) - l(i, k) * a(k, j)9 X& ?2 ^) w# e5 `0 E
Next 0 T/ G3 X% J6 o) {! e2 ]7 JNext ; g+ e- O X0 y" p& x6 E8 ~D = D * a(k, k) 2 c* H2 _0 Y' H/ oEnd If6 r2 E3 r; B% }. s
Next k '消元结束 3 o. R: d. D+ u: |: zIf a(n, n) = 0 Then+ ]7 ^& r- v P2 G; G w
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"0 Y$ S# S; a" k* {- a# z7 `
Exit Sub+ |2 o/ h8 \* {) g' [
Else, P# P6 G: h# ~! @/ U2 s
D = D * a(n, n)9 q+ H. b8 r6 b* ]
End If * E/ X; o6 ~/ E$ d# [Print "--------------------------------"# w9 A2 r& |7 R0 B7 S8 |" p
Print "系数行列式的值是:"; D4 I7 Z% @, S( X: x: y) o6 ]( [" C
x(n) = a(n, n + 1) / a(n, n)0 B& o, X+ G" x2 w9 [6 c
For k = n - 1 To 1 Step -1 '开始回代 6 q! m) t! A- U( w qFor j = k + 1 To n 4 ~! Q( [, g: c% o) m6 hm = m + a(k, j) * x(j)1 T$ t1 w5 V. r
Next j & j! d7 z8 c, o8 I( P8 W5 T0 z; Dx(k) = (a(k, n + 1) - m) / a(k, k) # b/ _- H0 K! }) f1 q) @4 Em = 0' S* @5 y9 z" T, t* F' F4 B
Next k '结束回代. q B6 c" c. W! I
: {) B, b7 Z; N! ^0 y6 ?Print "--------------------------------". m9 ~9 v; V/ {/ u
Print "方程组的解如下:"7 ^2 D+ B( G/ `# t$ O
* I" U$ T0 P$ ^: H0 Z e
For k = 1 To n' ~; \3 b7 h9 F7 b
Print 6 o8 |& ]& u D0 T& _4 I& R6 V7 KPrint "X(" & k & ") = " & x(k) . g; `5 y9 @. G2 G& ONext k 3 u! E. O: m6 ]4 g( mPrint "--------------------------------", t3 |3 n; V% R# R, A
Print "其中各行Ax-b=" - F, b, F& B% |! o" U- ^Print6 l8 R$ B) v. m, A: ]+ X
For i = 1 To n+ e s7 n# A! D2 x7 q. w' a3 H
t = 0+ U' l k3 i8 v4 l7 Y4 b0 h! F
For j = 1 To n( S4 R6 M/ B7 g) R) d; _$ _
t = t + a2(i, j) * x(j)% n$ f, s1 `; b5 _! x; N6 l
Next j # Q5 D0 H2 r, g. vt = t - a2(i, n + 1)5 @9 q$ [- m5 c" g2 F, s( Z
Print Spc(5); "第" & i & "行:"; t7 N8 X) c# q! L4 n, z) N2 M/ u
Print 4 }! R# y0 {) q3 S/ Q p8 SNext i1 W# n ~+ H& p
& J: w R7 N; T& B3 D
End Sub