Private Sub gauss_Click() '高斯消去法 9 x$ u: y; F9 c' A, ~4 Q- p( TDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single ! F% l6 w% O9 i. T Ni = 1: j = 11 }* D9 A6 l2 x( }
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) , P, `9 V- S4 J- s! E# aReDim Preserve a(1 To n, 1 To n + 1) ( y& S2 |1 f+ Y eReDim Preserve l(1 To n, 1 To n + 1)% H. ]" P; l0 G3 I; H0 x( P
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single9 E* b8 M5 [6 S: A$ }0 h) b
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 2 X% ]$ F8 M7 o; l0 GFor i = 1 To n 5 B8 k$ K, Z# n# qFor j = 1 To n / _3 V. M0 d) s0 |a2(i, j) = a(i, j) ! J- R% z8 w# F/ INext L) ~5 {2 b' v) Z% eNext '将a()的值全部赋给a2()4 f7 y! d @2 G8 P* @5 Z) t
m = 0 v" c" m# D& c0 q! T# PD = 1 1 d. b6 p3 s ^( c. w' W5 iReDim x(1 To n) 6 t4 B4 x" l% `Print "--------------------------------" 6 k) f4 { F) m2 q8 ~7 D4 ZPrint "您输入的增广矩阵如下:"3 ?# p# p% i+ X
For i = 1 To n ; V! z; M( W0 F7 zs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))5 {: a. W$ Y, @5 Q! Q/ p! e# E7 N
For j = 1 To n 9 r' \6 N+ q. e' ]a(i, j) = Val(Left(s, InStr(s, " ")))1 o, e: C# O( H3 I0 d. x5 u+ j
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) $ d5 w: t4 c6 YPrint a(i, j); 8 z3 Z- l9 F8 P/ n3 J, _Next & K0 M' Z. i6 g/ |' ]1 Oa(i, n + 1) = Val(s)% ]; V% m" D+ F5 @
Print a(i, n + 1); ; Y! ~! c1 w2 A3 s: k% }( CPrint: ~; t* x+ e6 B1 G4 ~% y9 N
Next* v3 P/ A: T0 q% h9 c
4 |8 q7 L! R' @! s9 F' E m; R: ~For k = 1 To n - 1 '开始消元1 L F' N" M9 C: t# M- v( J" @' h
If a(k, k) = 0 Then. T4 [; f& b- s- y
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" $ {3 _4 g3 q! \( PExit Sub4 i H! O# s4 P! A/ F! w4 z
Else& U: y$ P# `0 V" q% R1 w
For i = k + 1 To n4 ^3 E, M, x0 X- `
l(i, k) = a(i, k) / a(k, k)3 F) L1 W5 D3 M; \1 s
For j = k + 1 To n + 18 P# j; O1 U( g
a(i, j) = a(i, j) - l(i, k) * a(k, j)# O4 y& n( J* k; a
Next ' s" L; U0 I" V0 L8 SNext 5 j& i- E7 f% A* v) wD = D * a(k, k) 9 t D5 M- `4 \' j/ [. X- nEnd If0 J2 D# j/ b1 c! S
Next k '消元结束 3 X( @% R3 n; d( f" \If a(n, n) = 0 Then . v* y, L! D& ]# `) E# I" {' PMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" / H# n5 n/ o3 \! D" ?1 Z9 BExit Sub : ]: e9 Q5 ^+ b- Q; d; QElse4 E: Z8 \1 K" ^( c7 |+ P1 j' n* J
D = D * a(n, n) $ W- w0 U- t! r- TEnd If & J' |. x. R# D) _4 s# L4 G5 fPrint "--------------------------------" T+ K# B5 [6 I( c" L" }6 e0 nPrint "系数行列式的值是:"; D 0 e6 I9 y1 a' Bx(n) = a(n, n + 1) / a(n, n); ^; Z; }& M/ z9 t3 D E x0 Q) J3 _
For k = n - 1 To 1 Step -1 '开始回代& \. I! U0 S, g& ] E; I
For j = k + 1 To n& U4 _: j' A$ P/ ^
m = m + a(k, j) * x(j) ' _- ^: ~3 C( Y1 c9 f3 rNext j 7 {6 ^" _) H( Mx(k) = (a(k, n + 1) - m) / a(k, k)( I* U/ }% d' d0 t9 l4 ~+ }
m = 0 : K% I0 z K- H6 G) @5 z& ANext k '结束回代 - d/ }5 q+ _9 O5 n- [% L" I* R0 X8 E4 @) F4 d5 [
Print "--------------------------------" , K3 Q& l u" u5 {( U+ u9 JPrint "方程组的解如下:" ! b- }* d5 \3 F" } 9 L6 u8 n2 ]5 jFor k = 1 To n; g' D' M4 @$ f. x4 r
Print + u( p+ y, d1 j3 iPrint "X(" & k & ") = " & x(k) * b l4 h+ S5 w( J$ G/ ~+ dNext k; Q2 |( ]3 G7 K
Print "--------------------------------"% O0 k; Z5 h2 S! ?' r* D1 [
Print "其中各行Ax-b=" 2 W/ v7 B2 { I6 fPrint $ H" |; W* }1 @) }0 t& l0 e: [For i = 1 To n4 J* W1 ~/ ?- [( I
t = 07 N" J) V$ ~9 Z
For j = 1 To n/ [( [$ e& R0 u; V0 w2 j6 m
t = t + a2(i, j) * x(j)0 F) @) O1 W7 H; q) M5 ^ e
Next j) n" n2 g. T5 U7 @6 [
t = t - a2(i, n + 1) . j8 W: g. Z3 w/ b5 i$ [ CPrint Spc(5); "第" & i & "行:"; t 6 j% Y. g. p! E. d0 `Print 2 E$ w- {4 V i! R. |$ lNext i & p& w! @4 D8 ?% c/ |! F7 [$ ]! e2 {9 t) v! N9 L
End SubPrivate Sub gauss_Click() '高斯消去法 - W+ ^( H/ e5 A9 K5 cDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single% X$ C/ `$ e6 W
i = 1: j = 1 / E1 K6 Z x' ^- o0 on = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) & v& m# e z4 t/ q" rReDim Preserve a(1 To n, 1 To n + 1)9 p8 r$ Y# D9 Q7 d' }* q
ReDim Preserve l(1 To n, 1 To n + 1)7 B. K, k5 G& ]# K3 H2 s, ^7 B
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single2 P! ?1 n# F- U2 n- ^
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()$ Q9 R# ]* v1 B
For i = 1 To n7 w8 ^" l3 g0 m; j3 l7 a, ?
For j = 1 To n / g0 [4 ^+ Q4 f0 O( U% ?/ La2(i, j) = a(i, j) # F& D9 ^# ^# x0 j+ c; O2 E0 hNext f4 O9 H' G( x# _: R, ^Next '将a()的值全部赋给a2()# f$ ~0 e% \+ K. m" c+ {' E
m = 0, p+ Y/ ?9 ?5 s0 e; y" j% \
D = 1 3 y& V, t2 i5 _. X. pReDim x(1 To n) 3 ]5 v3 ^4 f: D7 G$ H$ {, q. `Print "--------------------------------" ) C+ H: a3 H" I1 N: rPrint "您输入的增广矩阵如下:"+ k r3 z n5 G) f* q' a! u' V) t6 Z
For i = 1 To n % D' l! I6 S3 O- R/ B; Ts = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))8 l: l) R% Z4 i8 p6 H7 |$ A. T
For j = 1 To n& g s( v2 Y [2 N# `: n# u% M; D
a(i, j) = Val(Left(s, InStr(s, " "))) 1 T! r! M4 X" vs = Trim(Right(s, (Len(s) - InStr(s, " ")))) 4 _6 K* T5 z8 ~2 i' H/ e* FPrint a(i, j);$ J, Y$ M2 `; h" o, H& ~
Next, Z0 q! Z) E8 Y/ ^
a(i, n + 1) = Val(s) , y1 r. U* V, q, K( H3 u3 | NPrint a(i, n + 1); 5 F0 R# G, `) N x: QPrint 9 b: ?* }( }9 U* H3 yNext% o6 t, j/ K# Y. R5 t2 L; P" R
( J( t9 j' F5 k T9 b& ZFor k = 1 To n - 1 '开始消元! M9 K w5 w. K; [ W9 d
If a(k, k) = 0 Then! R+ [0 ^ f J
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" + _: ?6 j1 e; Y1 dExit Sub! x8 a- m2 V q& O# l3 N, K4 h
Else( e5 f R: J+ ]
For i = k + 1 To n c6 t. H1 v: V0 J/ ?l(i, k) = a(i, k) / a(k, k)/ a6 c2 i1 ~- T3 i# \; `
For j = k + 1 To n + 1 1 K- l' i& C( o5 J" ~& g9 xa(i, j) = a(i, j) - l(i, k) * a(k, j) & e& _; J. |3 c& l" G; P; X5 z' UNext , o! w9 n1 U/ G! S$ DNext * `+ n: ?9 v% BD = D * a(k, k)3 U, x4 h: E0 }7 [
End If. I! B( k' r" ?: R- w+ L
Next k '消元结束: ?+ f+ O E, K7 N& A% T, \
If a(n, n) = 0 Then# }1 R* [! {4 f# _6 s4 Z
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" & e% I; B) l2 }Exit Sub& @% | |% k; N
Else$ O3 q& Q# H8 V& R1 K/ X8 q9 G
D = D * a(n, n)4 I& n8 i2 N! Y0 {
End If 7 s3 C' }0 ^6 }" QPrint "--------------------------------"! q U( C9 I F1 P# D
Print "系数行列式的值是:"; D# t7 w% G% [4 V* D' Q) L
x(n) = a(n, n + 1) / a(n, n) 2 s; n9 I3 S: r3 k4 _For k = n - 1 To 1 Step -1 '开始回代 ; T A0 y+ }- x' kFor j = k + 1 To n+ d. I* _% L$ z0 S) u* x8 m) a# ]
m = m + a(k, j) * x(j) - V9 ?, [) s9 x2 aNext j( d! f1 v% A$ K& K; Q. t* K# l6 H% [+ K
x(k) = (a(k, n + 1) - m) / a(k, k) 1 ~: g0 H4 J) Rm = 0 & A1 i& k% E; K3 C7 A$ s) g# n- dNext k '结束回代 1 Y+ Z6 Y( R" S9 b- j E$ p % P& b* j7 O0 l7 j" qPrint "--------------------------------"4 ~: ^! _' u2 S+ {$ i- h9 g: ]& p
Print "方程组的解如下:" % [5 q3 p2 T% |4 B4 g; k$ ]! [6 l0 p: V: z) }
For k = 1 To n 5 a. K+ F: @6 a) P, vPrint8 X2 p& N6 e3 W4 H
Print "X(" & k & ") = " & x(k)3 k$ ~( R* A( U
Next k ! p7 n$ R. \6 s1 E1 O0 j$ P bPrint "--------------------------------"( B4 i- U5 b* D0 p& f
Print "其中各行Ax-b="9 k: [' q: k k* E2 p
Print9 H8 v+ }+ j; M- ~# E8 _
For i = 1 To n1 q- f0 ^0 s& N5 d) o' k
t = 0: A' g8 K9 \0 q6 X, ~0 G
For j = 1 To n6 q* W7 m- h% {
t = t + a2(i, j) * x(j) % j7 M0 D9 S: h, h* LNext j % S% U* ]3 h3 B+ L# w4 xt = t - a2(i, n + 1) $ w! |3 U, r' h9 W4 M9 J- G- ]Print Spc(5); "第" & i & "行:"; t! k7 c9 ?4 `9 ~8 C/ N" O
Print 2 U9 x- {" g! ^Next i * [+ K% P+ N7 P" Q0 b 0 o& Y0 h" Z8 m6 {3 k {End Sub