Private Sub gauss_Click() '高斯消去法( M s+ ? `! R3 y4 @ ^- Y
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single O; x! z6 ]1 Bi = 1: j = 18 a! v# d/ o4 S( Q. {
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))7 s; R3 h) ]1 v* z# U# O e j
ReDim Preserve a(1 To n, 1 To n + 1)! `9 x% [& B; o; y2 v* s
ReDim Preserve l(1 To n, 1 To n + 1)( g9 Z. a! j- h/ s# ]# |1 ~
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single . A1 [$ n, t2 kReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(); g8 f! S9 Z& O0 V# i5 s! [
For i = 1 To n( b# t$ k& k2 Z# Q' l( V
For j = 1 To n " V4 Z" b+ R4 ?' ga2(i, j) = a(i, j)/ B0 g* u9 y" s: y" D0 z8 L
Next ( B& v) L$ b$ |9 lNext '将a()的值全部赋给a2() ; o2 r! W2 @2 hm = 0 , m7 A1 r6 I. y6 v! W4 M- m$ eD = 1 3 B) e) L7 r, f! cReDim x(1 To n)/ F! Q" U9 p' R8 G
Print "--------------------------------" u! E6 K4 ]% \: x8 CPrint "您输入的增广矩阵如下:" + ~: h7 k# k$ H% U6 i. Q3 O& c/ ]For i = 1 To n ! P& q4 f+ c2 g" {9 v" Rs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))# T8 c8 f, h7 a' n
For j = 1 To n 6 N0 B' R3 a# U: K8 v) Ya(i, j) = Val(Left(s, InStr(s, " ")))- Z# ?( b- u1 k
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) 6 b3 T( v' U! f) P+ S3 _% cPrint a(i, j); 4 ?/ x7 }, ]' ^5 k6 `4 e# _Next w/ x( z. e2 B, J7 B5 f( A6 ]; S
a(i, n + 1) = Val(s) A$ q' T1 o" y1 B& q; g
Print a(i, n + 1);2 W, @) {4 u: [& K4 P3 r5 e
Print& E' M$ T/ L+ B+ g* X* ~
Next ( G4 m& w- v) }6 Z: n* S) P; e4 a1 e4 U" ?- K# Y' Z
For k = 1 To n - 1 '开始消元 4 {3 l4 u9 G0 H+ N, g% TIf a(k, k) = 0 Then / P G! p7 _1 @5 S5 ?MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" $ `' Z* G( t7 FExit Sub 3 \$ i' u& W- k2 D: N; z: r tElse , P: k) S8 t2 Z& p: a" j7 h1 U5 dFor i = k + 1 To n5 I# I& u. e: b5 [% S+ e
l(i, k) = a(i, k) / a(k, k)8 `& F' ^9 a+ W# ]8 V
For j = k + 1 To n + 1 / R8 O2 t# ]8 G \a(i, j) = a(i, j) - l(i, k) * a(k, j) H: `4 d% B( J( ]3 s. vNext. L, X& L6 v8 e7 B: q; C
Next6 d* D( n0 b# j8 H; I8 u
D = D * a(k, k), Q* H' r( g2 E' c Q
End If 4 `2 D, h$ [0 A) ]. a3 ~: {+ Z7 \Next k '消元结束 $ _/ H' r; e% w% D2 X7 kIf a(n, n) = 0 Then " Z R( S" w2 [. J6 }MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" % Q M6 s6 o5 N, |8 j$ fExit Sub3 W8 W% t+ C; s0 U* O! n0 _3 Z. _
Else * A) b! \2 J; r! \ {7 aD = D * a(n, n)2 B# b. `, _: \, ?/ T
End If* g H3 g% z% g
Print "--------------------------------" 3 j: ^+ f; l% V" g1 a/ ^Print "系数行列式的值是:"; D * K3 {- T4 [1 V, [x(n) = a(n, n + 1) / a(n, n) . A/ j) ?* k8 Z' p6 JFor k = n - 1 To 1 Step -1 '开始回代3 P2 L0 G) a, C9 m5 L
For j = k + 1 To n* r I9 _2 @/ O# b4 J$ V5 x
m = m + a(k, j) * x(j) ( T( D" n' A9 j0 A' MNext j8 y/ Q* k4 ?3 H4 L
x(k) = (a(k, n + 1) - m) / a(k, k) # P% l6 U# t; Z8 Z/ S6 z* Cm = 0. ]: g6 y5 T5 X, O q H3 m2 S1 W
Next k '结束回代 & n# T5 K4 p; J! W 8 O; y9 k/ p5 b/ {Print "--------------------------------"0 r' Z1 n4 \# E2 z, Y6 z Q
Print "方程组的解如下:"4 x) u1 \) v( d1 s( t
8 p( J, ~- S, J0 u: `5 D7 e
For k = 1 To n ( I- L7 ?& B- X) E. lPrint # a" v4 U6 w3 V& qPrint "X(" & k & ") = " & x(k) . `+ e& t8 f3 n$ k, ANext k ; p; `) @ x) ~% ?: B* PPrint "--------------------------------". h$ l3 X! C T
Print "其中各行Ax-b=" & N4 z) ?5 x6 S# U2 ^; DPrint- L& L g8 X C) X
For i = 1 To n3 q h0 F$ E+ h4 d
t = 0( F3 Y0 Z) h6 m2 R5 |1 s
For j = 1 To n 4 o; }! n. r# A& u0 I$ O) e7 \t = t + a2(i, j) * x(j) 0 N/ U3 C6 S! J7 p0 iNext j: b7 K, a5 f- c
t = t - a2(i, n + 1)2 M" y. {; N$ h* U: [& o$ l1 j
Print Spc(5); "第" & i & "行:"; t% J. y) J/ R, m
Print! `' `' @) w6 _5 m, ?$ j6 O4 D
Next i5 C. ]4 E. G. B
9 E: z0 {4 e/ C
End SubPrivate Sub gauss_Click() '高斯消去法7 }+ f: ~1 @4 `7 h* Z) [' s
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single 0 a' x+ I" ~) n7 o; C! Bi = 1: j = 19 V G8 e$ m9 C. L& M% k+ \
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) 3 f4 q0 U2 J! A" _ReDim Preserve a(1 To n, 1 To n + 1) 1 b. [- Z" H% R4 @0 iReDim Preserve l(1 To n, 1 To n + 1) * o* C1 _- }9 O5 W HDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single# Q3 B. Z% G d0 F' {
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() - J F- _* X- ]$ _2 m4 mFor i = 1 To n. N. X: q y* a2 L7 E$ Y, d; N3 [" U8 O
For j = 1 To n & F7 S* V$ ~/ \$ w, e) L2 Aa2(i, j) = a(i, j)) L9 z4 X5 ]* {2 c, Y- i
Next 7 } {" Y7 ~6 r7 w) F5 W6 [Next '将a()的值全部赋给a2() 8 B/ K1 d# _' Y- ^' @' }9 v- L" f" Ym = 0" Z& f( i6 N) x7 c; V
D = 1 , s( }" x+ L/ bReDim x(1 To n) + O* u2 F. e( A9 R0 f' SPrint "--------------------------------"! N( K* c8 x0 _$ s/ t
Print "您输入的增广矩阵如下:"1 I: J; L( T& I; M0 m$ Q
For i = 1 To n) u; F2 t/ R& r5 S& q5 F
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))1 _" R3 u- S2 L; J/ U
For j = 1 To n* }/ a! s0 S7 [1 p' s
a(i, j) = Val(Left(s, InStr(s, " "))) % h) m; k6 Q, v9 G: o' js = Trim(Right(s, (Len(s) - InStr(s, " ")))). L2 ~ k/ z' b% Z! h/ y& z
Print a(i, j);1 m* o7 g6 M+ \ p3 M% ]! G
Next 7 ?! C9 ` o: k& \2 ra(i, n + 1) = Val(s)4 J* N1 q( c& \( M8 C
Print a(i, n + 1);( l4 ]6 m m6 \# y
Print 6 \9 U& H& w6 i+ g+ MNext " C& R" b" I- q6 y8 ^/ k" n5 y9 f& R. U% h3 |# b- X
For k = 1 To n - 1 '开始消元. Z0 o& m! _$ j! F9 h6 l2 M# \
If a(k, k) = 0 Then $ t+ R% @3 L, W, z1 A+ Z5 q# a2 _2 tMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"% O; N" ]1 L1 T5 {$ a
Exit Sub2 Y! r* M# h4 J# W5 t( _/ t
Else6 n8 p2 Z/ E) Q$ V6 Q
For i = k + 1 To n - r# Z N. A8 V6 X. a! ^0 j( _1 @l(i, k) = a(i, k) / a(k, k) 1 S3 o9 z7 t$ w& ~$ \6 @For j = k + 1 To n + 1 ) v' o4 g! Z) z7 j- T5 ha(i, j) = a(i, j) - l(i, k) * a(k, j); Q$ F) n/ e$ ^/ V
Next& o; l$ _1 v7 J' ]
Next / ]4 @4 J4 M$ w7 _: q# N4 nD = D * a(k, k) 9 x7 o% a+ y3 C9 \/ [9 NEnd If! a0 J( T3 H; c" V6 f1 @* {1 r. d
Next k '消元结束 " a$ p' u4 D( [If a(n, n) = 0 Then5 d/ T6 B0 P% o/ @
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" : h! N' z U9 O! S: ^+ BExit Sub+ `- E* h# C3 @, j2 q
Else6 q8 C1 F" B& K, i" K3 p
D = D * a(n, n) 9 p! U: P7 m% n2 B! ~End If3 @) q% |9 ?6 h+ S( \' D1 {' E
Print "--------------------------------"0 D1 |* C$ ]* }) i
Print "系数行列式的值是:"; D & Z' d7 `/ B6 ?9 cx(n) = a(n, n + 1) / a(n, n)% _% n* W f! j2 @, B6 B
For k = n - 1 To 1 Step -1 '开始回代 6 v' X& x; Y& _# i8 z9 V+ tFor j = k + 1 To n ! a3 C$ A1 ]5 b! u, Z- qm = m + a(k, j) * x(j); m. z/ ~2 L. S# {, ]7 N4 L
Next j2 e' c6 T- k& T& s) O/ G
x(k) = (a(k, n + 1) - m) / a(k, k)1 {* {$ X: v: u( d" }% ~
m = 05 U- ]% L# c% E2 K0 |5 y4 d
Next k '结束回代 / {# A- b3 Q0 K# F) [* A / W2 i" x& \+ l! u: l4 B+ L. g. zPrint "--------------------------------"' m( l( J( ~+ C: d0 l
Print "方程组的解如下:"% \' k7 _8 @- f$ @% Z4 e
3 ]- }) v9 |# S9 c
For k = 1 To n2 L/ W8 F4 x A3 O; P
Print# n x7 O0 g1 J+ K7 ]8 c! ~
Print "X(" & k & ") = " & x(k) ! v; n0 Y1 j# s9 o# ` KNext k# S, p5 p+ |. ^' ?, b) v: ^" L
Print "--------------------------------" 2 v) S" S7 Z3 }2 o S) bPrint "其中各行Ax-b="& v$ j& N) O9 z
Print ! V6 ^2 Y# ~! KFor i = 1 To n & w0 Z+ v- X+ z! @5 C3 ~5 ut = 0/ E/ _) S2 y: ~8 a# ?
For j = 1 To n' }7 K6 v8 A! _$ f: e$ u3 C. W
t = t + a2(i, j) * x(j)2 Z2 J" A, b4 h% I) W
Next j8 ^% `1 j" n, X8 U9 T
t = t - a2(i, n + 1)' q/ _" y) m J
Print Spc(5); "第" & i & "行:"; t3 `# M/ `# H9 U5 U( \2 o
Print; _* w% Y! p* w9 g& E: ]
Next i, G5 O% w& n' d- G0 D