Private Sub gauss_Click() '高斯消去法' ?$ |5 q" z6 Z
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single+ Z) L; W; a, |1 L* M; G7 h7 v. t
i = 1: j = 1, Q! j9 P$ j6 e8 B( ~- o1 k
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))' q* ]+ j& n% U$ L5 c# Q2 u; o5 ]% h
ReDim Preserve a(1 To n, 1 To n + 1) 8 i: h7 @/ G9 L0 Q8 PReDim Preserve l(1 To n, 1 To n + 1)$ n# f8 g# h( e& J7 h, a. P0 Z
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single& l5 _" r, O4 F1 L% s9 |
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() 4 }# a& ]4 @( @- ^. IFor i = 1 To n$ [! Y! ]8 l% e a3 _6 @+ v0 j
For j = 1 To n# |: Y8 y) Z$ r, h' V+ f+ A
a2(i, j) = a(i, j)6 N8 Z: x1 T; h7 ?, N7 {7 }
Next" r$ @2 W% Q$ m1 ` ~& N, L
Next '将a()的值全部赋给a2()1 T0 Z0 m7 l8 x3 }" G6 Q
m = 0 ; U- T: |6 h2 M$ \: z1 I) R! {D = 1 / ^( _7 \9 Y! j' AReDim x(1 To n)# k; ?# L8 D9 ^6 a0 ^& y
Print "--------------------------------"' [! w9 [& n& z+ N( Y- Q3 ^( g
Print "您输入的增广矩阵如下:"6 _- ^* b$ n, G# |2 p1 n I; W
For i = 1 To n - B4 u0 t7 {' n' z n' ^8 p7 u- Ps = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))4 t* Q! O8 b! L+ Y: L+ p
For j = 1 To n, \, I8 P d+ ]( L
a(i, j) = Val(Left(s, InStr(s, " "))) ; ]9 |& ^) R+ n8 \) Ns = Trim(Right(s, (Len(s) - InStr(s, " "))))9 d! l* [4 j9 ?% T9 ^' t; h9 W
Print a(i, j); ! _3 Y/ S' J' G, X+ U M0 I& rNext " }6 b) Z% _5 W o& B8 F) R8 Qa(i, n + 1) = Val(s) 4 L4 d" Q9 [* d1 b. M+ UPrint a(i, n + 1);" i' ^% P. S5 k# r7 ]5 `6 M
Print 4 o }* P$ ]0 H WNext, c$ C7 n8 M( G, p/ V# V
. q U: G) }( X% ]# k5 Z9 `3 T) R. AFor k = 1 To n - 1 '开始消元. Z1 q5 d6 ^" W/ d+ s% @& ]; R
If a(k, k) = 0 Then 2 H1 [2 W9 K# T2 I, q; R! _MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"0 u- z( w$ U' F
Exit Sub 9 q* V; f! \6 BElse 3 z( X p2 h6 t3 wFor i = k + 1 To n0 Q( a& h2 T/ F# X; b
l(i, k) = a(i, k) / a(k, k)% D) ~5 A' g2 m+ U; o9 M0 ?2 i
For j = k + 1 To n + 1 m/ |7 V* ~3 ]+ y
a(i, j) = a(i, j) - l(i, k) * a(k, j), X5 q, v" H P" t4 Q ~1 K6 g) ]
Next ) Q% o7 `+ u/ R1 x. M! WNext - X: p/ o- Q- Q5 yD = D * a(k, k) ]3 R* |3 \) R* @
End If % n. G7 n) ~+ V+ b- g2 B! YNext k '消元结束 + E5 `( a6 B5 Z! R. L. U6 nIf a(n, n) = 0 Then 0 P- y# Y9 r% k6 I9 J0 |: }MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!", F2 W/ c0 T9 i2 K
Exit Sub " f n( r6 x$ C; [# d' oElse : x w: o0 ^# ^/ B1 G1 |3 h4 F- VD = D * a(n, n) . T0 z: `( o/ v; K/ D. B9 g. \% bEnd If! u/ N) j' ~8 F# N3 H
Print "--------------------------------" , G, y9 w+ T/ b' i5 ]Print "系数行列式的值是:"; D 3 S1 k8 D& v1 s$ L& F: ~' Yx(n) = a(n, n + 1) / a(n, n) : T$ T0 U6 c6 N- o# i% U( u6 r$ c; K% vFor k = n - 1 To 1 Step -1 '开始回代 & L0 t7 i# q0 B) YFor j = k + 1 To n5 V% f# n, S8 B
m = m + a(k, j) * x(j); F) a) a! k0 y, |
Next j 3 I6 Y7 R* F8 tx(k) = (a(k, n + 1) - m) / a(k, k) ( v, ]' i* i4 O2 o- f' I$ Am = 0 * {, z$ G7 n0 u* jNext k '结束回代 2 B5 [: d4 h& |# o$ T$ q- X2 ~$ _4 l. M- x G- g+ j/ i7 _7 Y
Print "--------------------------------"+ S, w3 P2 V) C# q- I
Print "方程组的解如下:" ) Z" c! ^$ _8 [; u- X) G8 } / a% H5 r( n: z5 qFor k = 1 To n 7 E/ A# |. @( oPrint9 e4 Z; m; g# C$ t. B; F2 b/ q
Print "X(" & k & ") = " & x(k)" y. T& i: w+ }5 F4 K
Next k; @! F: s! `$ {0 F) P" g4 d1 V
Print "--------------------------------"; V. ~3 e0 R* p+ a0 m
Print "其中各行Ax-b="* t8 K% P+ O" v+ d
Print 8 [+ ~* O% u0 Q, ]* WFor i = 1 To n5 V- z0 Z5 ?- A: I9 T1 S5 R9 K+ i
t = 0+ t- l. Y9 {% E) ^. I
For j = 1 To n 7 A9 O) F( `* a, e5 c8 It = t + a2(i, j) * x(j) $ ~! T2 E+ }& BNext j 1 l8 b& d1 K6 Gt = t - a2(i, n + 1)! k6 F3 i, z4 e' I7 f9 E8 P
Print Spc(5); "第" & i & "行:"; t ! m2 B+ k0 M. g k2 gPrint 0 i6 G, E. a1 W# _Next i: ^" m$ k0 c0 c. V$ |
6 A) ?2 ?2 D* v
End SubPrivate Sub gauss_Click() '高斯消去法 # Q! ] X- x. z, I! KDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single \; Z. H$ x" M' ]0 X5 H/ Q0 m" Hi = 1: j = 11 g' J! [3 g ]4 q. w7 S5 k ]
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))6 I H) b- I* O1 Y( |3 |% b: T3 x
ReDim Preserve a(1 To n, 1 To n + 1)9 G! M; x1 ~ P b
ReDim Preserve l(1 To n, 1 To n + 1) ; I' g. r- V9 EDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single ' w. o$ D) z' M+ s0 HReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() + P& {3 W! ]) [$ z. y( f7 YFor i = 1 To n & g1 U$ x5 c' t8 i( e: L6 FFor j = 1 To n! i% P6 N5 L4 w' P! q7 V# ^' ?2 E
a2(i, j) = a(i, j)- J3 ?* x8 e4 n% O6 X' y4 M
Next 9 T& U9 @* N) o3 Q) Q6 fNext '将a()的值全部赋给a2(). H% k* c6 Q0 ~
m = 0 , X6 H; o0 Z+ BD = 17 P- N" M; A) n) {/ p8 p. d/ `
ReDim x(1 To n)2 ]& S4 p* ]) T/ [/ L
Print "--------------------------------"0 H+ v: z+ R1 T# c5 p8 p% [' [1 r
Print "您输入的增广矩阵如下:" + c2 j8 v2 i- r0 P, s: yFor i = 1 To n+ T; m: A0 s9 V6 \4 l& w
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) ; C4 X* w& D. }- h% wFor j = 1 To n : K& [. M3 W, ?. d( _a(i, j) = Val(Left(s, InStr(s, " "))) 0 r8 ^, d$ R! _! ns = Trim(Right(s, (Len(s) - InStr(s, " "))))3 }5 O0 S6 Y( t
Print a(i, j); . a( T( {1 F5 S% I) z9 jNext * w a! B7 H7 K. }. D y& ]a(i, n + 1) = Val(s)/ k% q! _: j# j! `6 y; ]
Print a(i, n + 1);' S$ V! H: l% R# \' d7 Q
Print9 I- Q5 y* f2 h4 ^/ e
Next& |7 s" u2 ]* y9 l/ {) Y) E. d
- ?" L# m, V4 [0 IFor k = 1 To n - 1 '开始消元 G) ~. `! ]; x A! Q
If a(k, k) = 0 Then 0 ^+ k" `+ K _$ aMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"& h; z5 N, J" b" P, p$ M7 o3 u
Exit Sub * ]4 Z4 l: r* ?& p* B# _& QElse ) W# m* ^" V4 j; g! v6 VFor i = k + 1 To n 3 t& U7 b. O# M1 U* ?/ M) J$ [l(i, k) = a(i, k) / a(k, k) / _6 o. a2 Y2 K5 F: SFor j = k + 1 To n + 1 : r7 Q ^' m6 I7 z! pa(i, j) = a(i, j) - l(i, k) * a(k, j) 9 ]; l( U9 g1 {: N' nNext N! ^( b ]7 V; i' P9 jNext : Y1 ~1 N3 Y0 o7 ^: k: i; p/ vD = D * a(k, k) 0 M' I. [. _& H- LEnd If/ U/ B2 Y( p9 P* U! X
Next k '消元结束) N1 G+ i' s. t* p: s
If a(n, n) = 0 Then8 R, b, l2 ]7 j$ x
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!": F" ]% ?( V0 {: X+ B
Exit Sub' G+ v9 U. r7 v1 Q
Else - X% O8 ]4 B4 I9 r8 C- I0 _D = D * a(n, n) ) J; T. {0 ], M9 z) ` y; KEnd If3 e1 ?1 H: C) \8 y. Q( h
Print "--------------------------------"7 B b6 p, g2 {7 y
Print "系数行列式的值是:"; D 7 p6 h. h$ @" W: lx(n) = a(n, n + 1) / a(n, n)3 e$ ~& V. z* m% E1 r% ^
For k = n - 1 To 1 Step -1 '开始回代 C. j: Q) G+ ^. ~For j = k + 1 To n . s) w5 A3 O3 U0 v gm = m + a(k, j) * x(j) , s- n, q" p/ o6 o# q6 E: G4 xNext j4 ^) U& o1 F: s2 J; }
x(k) = (a(k, n + 1) - m) / a(k, k)( {& F y: |& U$ g M6 }9 c
m = 0 / {* ^6 J3 U* `1 T' `( mNext k '结束回代+ I5 B v& J) ^4 p% |
, x! e! L3 s! n9 b' ]: z
Print "--------------------------------". W9 Q0 F& w+ C; l5 L5 w. V
Print "方程组的解如下:" : e0 E% t r6 s' W; o0 Z9 h& Z$ l: X/ ^; G5 i! T
For k = 1 To n6 J+ a8 t0 o7 U
Print8 Q& A/ W {, L* K' N. `
Print "X(" & k & ") = " & x(k) # `. b' a' u1 x3 A# O2 n3 h6 T3 iNext k - E1 o% z( t. n w; F1 ?Print "--------------------------------" - m6 S5 V# p$ N) SPrint "其中各行Ax-b=" $ b1 t' ~9 @4 n( q( @1 y4 iPrint ; a% Z7 N/ j3 P+ ^For i = 1 To n 3 v. U, X! a8 zt = 0 + A5 [2 C8 h- L6 @8 Y8 z7 TFor j = 1 To n / r! I, Z; f/ i4 }$ t ^t = t + a2(i, j) * x(j) % S! Q w; N7 lNext j3 v% x. u& V/ G& {
t = t - a2(i, n + 1)" Z; e9 |9 r5 J0 z; G* f8 @
Print Spc(5); "第" & i & "行:"; t 0 S: d7 G% F6 w4 ^" RPrint! ?3 H4 q) Z" |% {* |
Next i ! S# q: U0 F9 v3 v $ a# K0 C" @5 W: z8 jEnd Sub