Private Sub gauss_Click() '高斯消去法% [( d$ f* N \1 k" l; t3 T+ D0 p2 f
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single; G) h, M7 V* ^6 X7 \2 V
i = 1: j = 10 W; y7 S- S# N {$ _3 Y
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) , H% V& v+ d0 Y. TReDim Preserve a(1 To n, 1 To n + 1)7 V: p! ^# b+ l# U9 |' k! N3 j: Q
ReDim Preserve l(1 To n, 1 To n + 1)# }. u- L1 S* N" L. q8 c" _4 j
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single" m$ ~5 U! g- b) w( F9 W# h$ \
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()3 H7 {; d }4 x2 Z% L/ e5 U3 i& Q7 W
For i = 1 To n 4 h( T5 B9 z6 N! @% A* a0 |9 RFor j = 1 To n - \4 o0 V7 i# _- p" J# fa2(i, j) = a(i, j) ! w" e8 z2 Q! r0 s; p* CNext, }: |- T. L: D% K" y
Next '将a()的值全部赋给a2()# |& x4 }% X$ Y# P5 j
m = 0 4 i3 ~. H1 t! m4 M8 LD = 1( l6 G! Z& d0 O( W" T, P
ReDim x(1 To n) , c5 R! W- U2 f7 W1 aPrint "--------------------------------" g _: y. k$ J, {Print "您输入的增广矩阵如下:" " D% Z9 P9 ^" [9 l$ yFor i = 1 To n3 H4 U$ @- b3 D# ]2 T
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))1 `0 O4 o5 _, M0 s( S
For j = 1 To n9 ]8 h' Q J6 R# P; K
a(i, j) = Val(Left(s, InStr(s, " "))) ' J7 C0 R$ F: ~1 ns = Trim(Right(s, (Len(s) - InStr(s, " ")))) 7 j% s6 c0 t) |( |; bPrint a(i, j); $ A v* C0 [+ k( y% j4 A6 JNext * n, ~- k2 l( ^a(i, n + 1) = Val(s)7 V5 v, U- c2 P8 n5 L6 | [7 P
Print a(i, n + 1);9 s: V' W3 g- v& x4 v
Print) {3 D5 V* T$ z+ L5 t
Next + M# a% Z! ^) h 5 h0 s( @5 B+ `For k = 1 To n - 1 '开始消元8 {: Q8 w3 O! L+ s9 { W9 v1 E
If a(k, k) = 0 Then9 J& O1 ^5 l) z4 O! Z
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" * M/ }9 z" s+ s0 y/ }Exit Sub $ F9 N- w8 T+ w0 |3 G$ pElse1 x( S) R$ o0 X% J) z( U
For i = k + 1 To n$ _) k4 S/ \* o) C4 r' g+ J
l(i, k) = a(i, k) / a(k, k)6 H0 j/ S, P2 |; K. |% z& Q
For j = k + 1 To n + 1 J& l1 w M1 r- ~' H1 J
a(i, j) = a(i, j) - l(i, k) * a(k, j) ( \2 r/ @& y* S! l8 CNext7 M- ~0 x/ I/ e$ S1 V2 s
Next! ], T0 S4 s7 e" u* f
D = D * a(k, k)6 D% k" o. V) _
End If7 s, w; U( q* E
Next k '消元结束 * R- F2 Q- k. kIf a(n, n) = 0 Then * C' E2 \9 n2 u5 r3 sMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"* J- m0 i: F6 j9 G: M- X& e: a
Exit Sub4 K; _1 v ]! v. k# G/ v$ G
Else 7 j5 G+ E" G7 o, |; N9 J/ qD = D * a(n, n)% ]0 p$ W3 b! h4 J U
End If; c& D9 v3 J, E
Print "--------------------------------"1 ?$ `, R" S+ U
Print "系数行列式的值是:"; D N' A6 e4 J: \% T# @. z Qx(n) = a(n, n + 1) / a(n, n)! w. i% M0 | r, D0 I+ A) H
For k = n - 1 To 1 Step -1 '开始回代 9 M# ~5 C( B, W4 B5 sFor j = k + 1 To n; c( J, ^3 {" o
m = m + a(k, j) * x(j) 9 W9 s9 A. p' B' ?* H+ N- gNext j ( P/ T: y9 S% S4 ~* Vx(k) = (a(k, n + 1) - m) / a(k, k)3 \& _: @) i2 P4 n+ W' a5 e+ W
m = 0 $ W. i# s: }3 W2 r. |% N# WNext k '结束回代% |* m! q# E- ]' E
* j" @. C+ s* N" rPrint "--------------------------------"& p% ~9 R' y" @ k! W8 O
Print "方程组的解如下:" 0 K: ?9 o% E3 k* Q7 m( v6 c/ r5 \- N, m' Q2 r3 U$ }
For k = 1 To n 4 b" w& e! C' \( J$ m" p8 qPrint' r# \% X+ R! F O) o
Print "X(" & k & ") = " & x(k)1 ]9 {& y. j9 u' |. |2 t# h
Next k8 y4 O) S l/ e3 V* r8 G
Print "--------------------------------" 8 \4 e; \( _" J# |2 ~: oPrint "其中各行Ax-b="7 p4 ?; u6 t. z. X" T
Print2 {1 P! j! I" P* m# Q" X
For i = 1 To n % E0 K1 j( j- |2 [t = 09 F" N K8 _# {6 l. g
For j = 1 To n 0 R" S' Z( [# J9 Yt = t + a2(i, j) * x(j)3 N7 G$ g* F6 v
Next j: W7 U1 ~) X1 y' ~6 ] @$ j0 h
t = t - a2(i, n + 1)) u+ \( ?! B2 ^6 @5 R% W* X% k: T
Print Spc(5); "第" & i & "行:"; t6 T% W8 ~7 D# ~
Print ! j; u1 M" P1 z$ r( Z1 G& O9 KNext i 6 D0 L( L" a' e7 g& @5 ]( i( }# j; s/ T2 x% @! Y, v
End SubPrivate Sub gauss_Click() '高斯消去法9 L% }2 m9 t& c. s
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single # L; S) y6 {) b( e) Pi = 1: j = 1 8 @& i7 ?9 _* r8 ?4 X8 g1 ^/ Sn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# [1 `9 Y3 f# a1 w0 b9 H
ReDim Preserve a(1 To n, 1 To n + 1) 6 f4 B+ u" r; U c) |# vReDim Preserve l(1 To n, 1 To n + 1)9 y& d8 \% V) V& M ^5 J
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single , M# w/ X% T0 ~3 w- hReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()1 ~5 B2 [% x, H) {4 p
For i = 1 To n + [7 l* h3 L; e$ T2 oFor j = 1 To n9 H7 e+ q4 i9 W4 P
a2(i, j) = a(i, j)6 Q- i3 j0 I9 S* \# V4 N
Next 2 A% o% d$ z l$ r* h* dNext '将a()的值全部赋给a2()8 {+ g& R8 u5 }, }4 F, z
m = 09 N8 c' |9 u( I \5 j& m5 t8 w
D = 12 P0 M% I& u6 a+ ~. H; I; V0 E
ReDim x(1 To n) 4 }5 k- e% i9 n" WPrint "--------------------------------" / }" `2 \3 k9 l( v/ |% sPrint "您输入的增广矩阵如下:" * ]4 O1 \- U- ^+ b. M! p7 f2 j; oFor i = 1 To n# s6 i4 b, A* C
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")). y3 H' l5 e; k; s4 A& Z* j
For j = 1 To n % x1 D) t- o# x4 E% ~a(i, j) = Val(Left(s, InStr(s, " ")))) z0 z) _8 Q1 ?( \
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) + X1 A9 e- \, \% w! e& l- OPrint a(i, j); P0 M# e" X0 @9 _
Next ) S5 ]0 I/ x+ e+ O1 [a(i, n + 1) = Val(s)% V3 W) P6 ]6 x; u
Print a(i, n + 1);& W( K7 @# z3 K0 Z" w
Print 4 J4 U$ a* N- c, B6 |6 Y& ]) ~Next & k& K1 j5 I6 s8 P c7 | - K3 x( E+ Z" H' JFor k = 1 To n - 1 '开始消元- L$ n b2 t; Q* A' q! [
If a(k, k) = 0 Then* B1 V% Z' x, Q v' |' S5 i6 i
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"9 V2 D+ g- ~! H$ u( ^+ H9 r
Exit Sub$ ~0 k E( g0 b2 X
Else) G, x, t5 H& ]2 C
For i = k + 1 To n 6 ?* s& J5 V7 m' zl(i, k) = a(i, k) / a(k, k)! s3 E2 F, L( w* K! _
For j = k + 1 To n + 1 1 w8 V0 }, Y* g. k( D4 F# g! Va(i, j) = a(i, j) - l(i, k) * a(k, j) ; }3 i, G, _: W8 t- U) H3 g! D. `Next0 |3 U# F) ]& ]* N
Next' m9 T/ |0 N3 h$ K& u" M9 L
D = D * a(k, k) 9 v/ x9 x' j0 u! K. g, TEnd If / ~* Y! \2 b: X2 kNext k '消元结束 1 Q4 V( K* n- U7 W( b% y M9 x* bIf a(n, n) = 0 Then. X: b3 S7 o# x) i
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" $ A2 g" |1 ?. m# QExit Sub, `. U$ H: r; f
Else- H" |8 J% a$ v8 [" F
D = D * a(n, n) 9 m$ x3 p2 c2 C# M5 j2 M7 J9 D% U; |End If+ s" c9 e# |7 _) {% [; F# p
Print "--------------------------------") u; A( c3 |2 p6 _
Print "系数行列式的值是:"; D 2 D6 L1 Z7 C5 Ux(n) = a(n, n + 1) / a(n, n) 8 s& B5 d* ]+ W7 C6 |3 x! M7 U3 hFor k = n - 1 To 1 Step -1 '开始回代2 K9 n9 q! | `6 K4 K
For j = k + 1 To n ( }% Z/ J$ u* I1 n" [; v) sm = m + a(k, j) * x(j): c- |* @& {& ?5 `
Next j " w/ `; J) w3 H& g" m* B Q& y* Nx(k) = (a(k, n + 1) - m) / a(k, k), q0 b N( ]( p+ G6 w
m = 0) Q5 r( x* r( b3 h+ p8 h7 n/ \7 B" M
Next k '结束回代 ) z( n7 O% a- X+ E ' ^9 n- {" \& j3 ?+ k _Print "--------------------------------"5 \- a6 t4 J* f. p, _; f' f c ~* F
Print "方程组的解如下:" + O4 Y4 p: c) ~ $ b+ R3 C, w8 k4 [% iFor k = 1 To n / ?" m. r% u$ dPrint - ^0 r Z7 Q. p8 X6 I7 _' cPrint "X(" & k & ") = " & x(k)+ @# X; k) V. x; y; @
Next k. P- X! t5 x& H% g* L
Print "--------------------------------" 8 L) U; \6 {; xPrint "其中各行Ax-b=", D' ]5 x5 }4 `
Print8 j8 N' [( b: H1 z5 v$ r7 o% J0 D
For i = 1 To n/ K- P) o# B' r+ v
t = 0 3 Q! W5 ~- c& T1 @For j = 1 To n2 G) m" `" V& ?4 {% G
t = t + a2(i, j) * x(j) 7 H( q9 }) t {7 B6 HNext j * \ W* p, m% W: i& k$ et = t - a2(i, n + 1) # G* K8 @3 W2 Q3 e7 _4 ]Print Spc(5); "第" & i & "行:"; t " |% O! M4 Z% d; \7 FPrint5 m8 R! z) L6 X2 U+ A/ E6 c& z
Next i : f1 [6 D9 R: T' R 0 T' H: }4 Z7 G: _+ W4 B* zEnd Sub