Private Sub gauss_Click() '高斯消去法7 y7 K0 k r- u0 K H
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single 6 V- o/ C( }+ j( X. R2 bi = 1: j = 1) f2 O7 H6 @# E* W: K( b
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) % r6 s5 t9 V3 |9 n5 |* n" e/ F/ v; DReDim Preserve a(1 To n, 1 To n + 1); c. d% j: Q8 g/ ^
ReDim Preserve l(1 To n, 1 To n + 1)8 G8 c$ j0 I0 t7 O8 I: g* ?
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single7 U8 G# E }& r, d+ v
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()& O. `, `* q) o3 J. R( N& v
For i = 1 To n ; Z2 V( b* Q8 r! ~ A" a& Z+ ]For j = 1 To n: J3 T8 b) {) h$ J
a2(i, j) = a(i, j)- T; r8 X: i, s9 i9 u7 g' k# x$ l1 i
Next' y) p& j Q! y- {
Next '将a()的值全部赋给a2()! X8 s% j2 D& ^4 h
m = 0" z+ s: f) @: X5 V5 W( o
D = 1 2 X6 x8 G! I. j5 ?% e' mReDim x(1 To n) 3 x; n; C' X7 h- ~: nPrint "--------------------------------" : B9 N9 E5 Z Y3 I8 d9 gPrint "您输入的增广矩阵如下:" ?/ r; R! l- w7 X. ~
For i = 1 To n & z; M5 m, h0 G4 ^6 g& os = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) * b. x3 ?& U3 f% b4 l7 BFor j = 1 To n% W' i# L: q' f! |
a(i, j) = Val(Left(s, InStr(s, " "))) ! H1 h/ @& A& i0 a& ? Bs = Trim(Right(s, (Len(s) - InStr(s, " ")))) E+ _& t+ v9 r& @3 }
Print a(i, j);$ q- ~( N/ g$ R3 R/ D V. B- ~) L
Next ) _0 Z: x# m& X4 Sa(i, n + 1) = Val(s) ' d+ k( W- W( a- \9 W, [# pPrint a(i, n + 1); 4 o/ @( b/ a3 }Print , R7 G6 Y9 i2 g+ ?0 a j/ B+ GNext5 c! ?& a! x6 i6 [: X
! M9 ] A: S( A2 o0 UFor k = 1 To n - 1 '开始消元 / [6 z9 e, H7 [6 _ BIf a(k, k) = 0 Then & E5 j, g$ X8 A/ _. ~6 Y7 c0 ~' xMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"+ D8 W( E5 F# p
Exit Sub ; L: O# ` r( p4 EElse " U2 [( Z3 c. P: f& eFor i = k + 1 To n 3 Q; ]6 {2 h0 m1 }l(i, k) = a(i, k) / a(k, k)8 X3 n+ u, [( d {' U
For j = k + 1 To n + 1 ; X2 f) o) A: a$ \# O1 ta(i, j) = a(i, j) - l(i, k) * a(k, j)* ]( `% ~& E- L9 G3 y) d i' O
Next \8 E, s. T) k- e6 D) eNext 9 e4 b: [, N2 E1 ^' FD = D * a(k, k) 5 ^8 R! S+ g H% X2 d. Q4 e: R/ hEnd If 0 K6 T. h, [; m6 ZNext k '消元结束% y: p7 Q4 }7 f1 _0 N0 h0 l4 y+ x
If a(n, n) = 0 Then3 h$ P1 d8 F( O5 x. T* V
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"+ t/ l9 L* a0 F) D
Exit Sub+ e# C* m( a( `' O
Else ; {9 p3 c/ W) @D = D * a(n, n) ' ~" G2 @+ C1 Y4 b+ y0 WEnd If * n( d) `3 M4 M& y4 s0 H( hPrint "--------------------------------" 3 ^) j, e. y' L! _" RPrint "系数行列式的值是:"; D5 N9 C4 _/ H$ V; V
x(n) = a(n, n + 1) / a(n, n)9 ~) K0 H) k0 A$ V- i o- t
For k = n - 1 To 1 Step -1 '开始回代 6 C: V% w8 U, V) _8 dFor j = k + 1 To n4 E$ F3 a5 m$ u6 ?- R4 p# L3 V k% s% g' ~
m = m + a(k, j) * x(j) , `$ P; R% C; L- h% e1 VNext j/ H- s4 i; S# t0 @. s" L3 n
x(k) = (a(k, n + 1) - m) / a(k, k)# `; ^7 X( u( v8 E/ u) n
m = 0/ A. ^# t/ \7 F4 M: a
Next k '结束回代, x% B) G2 z+ w8 R! S
( j8 Y, p; ?) h4 C
Print "--------------------------------" . m/ L. l4 C/ b3 s$ APrint "方程组的解如下:"; {: {( k1 T% m( @( H
1 _) }9 v% h* C% {+ y
For k = 1 To n D3 r% }+ i9 Q: Z+ R& {+ W4 A
Print , z' R) v0 e1 J- HPrint "X(" & k & ") = " & x(k) " ~6 R' q2 z9 [# I& BNext k5 O3 ?7 m8 Q* |
Print "--------------------------------"2 P" a, T- @" _, p
Print "其中各行Ax-b="$ E0 b1 |" f* Y3 q- u& N
Print 6 A" Y+ b; ?4 b3 F1 T1 q* W" T$ [+ QFor i = 1 To n h0 \5 ]& ^6 }! Q) |
t = 0 f/ Q' C& S# J/ q
For j = 1 To n ( ]3 K) r) c5 nt = t + a2(i, j) * x(j) ' L5 z; Y9 a7 o! v; }# ^Next j v2 @, x6 V+ s
t = t - a2(i, n + 1) M ]% `" S2 k3 q5 R3 C
Print Spc(5); "第" & i & "行:"; t 3 A- c1 \* |# JPrint; P& C! o7 L4 C; N+ q: u2 c8 ]
Next i. D; Z) o' Q: o7 N! ]8 D! `
; j4 {. x% d4 J( V" j9 g
End SubPrivate Sub gauss_Click() '高斯消去法& c! S) M0 x7 L8 f
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single2 r9 D w, ^# T' ]- {
i = 1: j = 1 % \+ M( T8 s2 ~8 V! X% ^7 I5 zn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) ) [+ x9 F1 ~8 [9 Q$ @8 Z' k* lReDim Preserve a(1 To n, 1 To n + 1)& x! k5 G: f( K% O; ~/ _6 T: P5 s
ReDim Preserve l(1 To n, 1 To n + 1) , R+ p1 E$ z4 d1 `8 C+ z6 e0 J& LDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single: D, j& g/ p" Q- I3 G {0 [
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 2 r, A+ `1 }) N' c' o- `/ X: HFor i = 1 To n 4 {0 X2 \- M4 U+ _For j = 1 To n4 a$ ^ D2 ~. Y3 Q9 D, s
a2(i, j) = a(i, j) ' y0 K9 k2 M6 R* r n/ ZNext ! s. {: E; J/ s9 \Next '将a()的值全部赋给a2() 7 o2 o1 Y& S; H& a( T4 Dm = 0 8 A" {$ e' Z; RD = 1 0 c) F# |6 w' o( m) ~7 f2 Y; wReDim x(1 To n), [# |% H4 d. ~9 x# F' i- Y! F
Print "--------------------------------"* {8 @" U# p5 f! H7 h T
Print "您输入的增广矩阵如下:" * j: g. K/ a) l# H; t4 r. ~For i = 1 To n. B" Z+ ^. B" r# V
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) $ E% l2 X2 U- I- H6 YFor j = 1 To n - t1 m# I& `8 K) c" Sa(i, j) = Val(Left(s, InStr(s, " ")))% M& G2 |. ?* g& b1 q
s = Trim(Right(s, (Len(s) - InStr(s, " "))))" e1 W# j6 ^; B
Print a(i, j);# x* t& w/ c5 {+ g
Next8 @1 Z I' V7 _7 C3 Y
a(i, n + 1) = Val(s)# E: C) e5 Z+ w3 v% j. ^
Print a(i, n + 1);! D o! g6 @8 s' t* Q
Print% Q4 }& b5 g6 A1 [$ W8 b; x
Next* x2 i, M6 V/ s- b
* U& i- i. x% A8 V/ T9 z- wFor k = 1 To n - 1 '开始消元4 ^: a$ E! |4 p2 M& x2 ^. K& P' z
If a(k, k) = 0 Then4 K# B0 F3 x/ W, T
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" 7 N' X$ P# z3 `# C2 D- C3 wExit Sub " P# | i; ~+ OElse * w! _; [+ H' ?0 |9 t* M- rFor i = k + 1 To n ; z/ |2 F( p4 w7 \ m# ?' R8 d- zl(i, k) = a(i, k) / a(k, k) + K" y1 a" M( BFor j = k + 1 To n + 1+ ?6 ?+ A" _2 _4 Y
a(i, j) = a(i, j) - l(i, k) * a(k, j); p" p/ e9 I& |% b' ]6 _' @
Next7 e! s5 B4 l4 O$ I1 d# F, |
Next3 ~9 ?! f. m2 f1 T5 `+ v# y2 }7 ~
D = D * a(k, k)2 i' `4 U6 E4 s/ \+ v" k8 S
End If , r1 x- ]. T- \* K+ FNext k '消元结束 / t! T) O: z1 k+ Z. t$ YIf a(n, n) = 0 Then- B. g( g% [* Z: Y! p; D
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" - Z* r U6 `8 U% ?% L( rExit Sub / p" `0 _" P/ D! \$ k# |Else 1 e& ?, e4 t- p: _9 x' V5 [D = D * a(n, n) $ D* C+ p3 z. f- |- DEnd If& J$ e) t# g' d9 x* e8 J) f
Print "--------------------------------" * }0 B; U' S% WPrint "系数行列式的值是:"; D 0 a4 x5 J6 U4 |2 `% u9 bx(n) = a(n, n + 1) / a(n, n) 8 e' l6 U) H4 k8 o3 ]) Z* MFor k = n - 1 To 1 Step -1 '开始回代 * F, y3 s' t" OFor j = k + 1 To n . E3 ]3 U8 I% B5 [m = m + a(k, j) * x(j)! a# R& K b# J! e" S" B m! F
Next j 3 i. z, h4 T/ r# e1 |& G7 |x(k) = (a(k, n + 1) - m) / a(k, k) # r c; q# H; ]$ ]" J/ F6 Wm = 0# ~, M4 K+ R1 I5 X! u
Next k '结束回代1 I; Q% Q5 f, _! S# q
' `4 e0 g9 v) N7 @: k+ }) k3 |( _Print "--------------------------------" 1 Z- B; L& }1 {3 g9 S. Z9 RPrint "方程组的解如下:" ) D% d2 D, u& v' a! I' G; O$ u % Y0 E' D, @+ H9 H% s. L; M8 UFor k = 1 To n ' C% t% n9 Q: ~, ]4 aPrint 2 E5 u4 X* A9 O0 b$ ^% C: APrint "X(" & k & ") = " & x(k) ( `1 \ q2 v1 V5 o2 d- ~Next k3 @1 X' h' F) Y3 V
Print "--------------------------------"3 C. [, ^2 D* s& q! D# @
Print "其中各行Ax-b=" ! L3 e. {& e! D; }3 L/ @. QPrint 8 s9 z/ A% |& [8 R! Z' MFor i = 1 To n' m0 C! B- ]/ G7 Y! B8 J
t = 0 4 Q" C2 S" q3 iFor j = 1 To n$ s: R( R$ |# r4 P
t = t + a2(i, j) * x(j)4 U! B4 m' C+ ?8 _8 i
Next j/ {8 G" h1 \% q
t = t - a2(i, n + 1)( V- \ u7 V' N* Q `8 m( d p
Print Spc(5); "第" & i & "行:"; t+ `: s" R0 @1 T: k
Print& H3 m4 X9 e; S* ~
Next i! j( o/ E- d% { [! [. L: M