Private Sub gauss_Click() '高斯消去法+ p0 I: \8 | H
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single" V: E" s; }$ q1 S+ e8 S
i = 1: j = 1# p: E- E, x% W( r3 H* I w9 A) |
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) : l0 Y/ v/ P. f! i8 o; JReDim Preserve a(1 To n, 1 To n + 1)% I/ i7 }& F2 J' t
ReDim Preserve l(1 To n, 1 To n + 1)' G I4 r8 X N
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single 5 Q, [1 y0 y; A9 J% M8 D' \ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() ! Y9 r+ f) c) c7 [For i = 1 To n & a# a) @& e, k1 w; g* H2 q; SFor j = 1 To n6 \0 H+ R' {0 V) ]; _. L3 V
a2(i, j) = a(i, j) 2 [8 ]! y; H3 b) q5 DNext ) q4 [& m& l* `. \Next '将a()的值全部赋给a2() 0 o% K2 B( J |- |; c" w1 i. z8 Bm = 04 |' N9 l3 d9 W1 D5 I" v( K4 k9 \
D = 1. @5 S W: ]% u& a7 I5 m
ReDim x(1 To n) ' q# h6 `! @1 s j, R2 bPrint "--------------------------------"4 h- h( t& ]& M9 b! g; K7 k* ^5 t
Print "您输入的增广矩阵如下:" : F' O" ~) c& i% U7 a+ uFor i = 1 To n, Y9 E" ?5 ^ v6 \- L1 p% x
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) 7 @ U8 }9 C) P* g, TFor j = 1 To n 5 W& x8 e; }/ N# s J5 N- R; fa(i, j) = Val(Left(s, InStr(s, " "))) " {2 \2 ~9 P" t0 G$ Ds = Trim(Right(s, (Len(s) - InStr(s, " ")))) + [" W. i& _$ C6 hPrint a(i, j); * E/ D. H3 X5 qNext + t/ E6 r6 v+ L; g9 R0 Ia(i, n + 1) = Val(s)0 F- v6 z# }4 U# u9 z% d3 ^# K
Print a(i, n + 1);. E9 z) o8 ~5 y! I
Print 1 Y8 L3 l& S0 H5 F3 uNext# P0 d0 _5 W/ C! H
! V( e0 s: i7 ^1 L4 VFor k = 1 To n - 1 '开始消元 : _; o' z# U; e. y# C8 N6 gIf a(k, k) = 0 Then % h5 f: B+ k3 `9 K# n z' dMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" : y/ K; e8 P3 T% T! FExit Sub 8 M% i$ L" {! d; P9 uElse & @, i; U7 x% H! ZFor i = k + 1 To n0 D4 ? V: _9 r' u% |& y" ^/ [/ T2 t
l(i, k) = a(i, k) / a(k, k) - W: Y- y: M+ I' d: bFor j = k + 1 To n + 1: j8 S" K- g/ r
a(i, j) = a(i, j) - l(i, k) * a(k, j)' |# |7 e* _ H. k! Z6 t
Next( s% y( _; Q% w+ m* |1 |9 `/ C/ \
Next3 V8 h o3 z2 L
D = D * a(k, k)) {) b8 y" J; z1 P- v1 C3 |
End If! v7 R9 W6 g$ H/ `9 ^/ ^3 a
Next k '消元结束* G- h4 S( L( u/ G- S4 n
If a(n, n) = 0 Then# p' o5 V( K6 H, U& B% Q
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"7 q# Z; G! w8 E
Exit Sub3 S0 E; C3 |4 H: Z- m
Else C. S4 n2 J. ^! z$ ~
D = D * a(n, n)6 c; J) y$ C0 O2 b+ q# o$ W
End If 1 ~; D+ ?: D0 {% C0 E T6 |Print "--------------------------------" ' s1 c8 G/ C/ N; }Print "系数行列式的值是:"; D 0 a) u, P1 V% \x(n) = a(n, n + 1) / a(n, n)9 y3 D; h# |/ v2 ^: {% [
For k = n - 1 To 1 Step -1 '开始回代 ! g; e2 D( Q5 oFor j = k + 1 To n ( [; B1 X9 Y6 w7 @# L6 W4 im = m + a(k, j) * x(j) H3 F7 S" b4 {Next j 4 C$ B# u# H& w+ @# S u- c( ex(k) = (a(k, n + 1) - m) / a(k, k) 8 G( |* k- L3 J; e: j4 Jm = 0- o C3 W$ H$ `/ x* }! p
Next k '结束回代 ' U% B# n3 g0 k1 z. z4 @# I- u8 @/ y/ s
Print "--------------------------------"% O% n& ]6 A8 `$ D: ^; U
Print "方程组的解如下:"4 ~5 g: x, g1 r9 S: T
w# y2 }' ^0 F; Q fFor k = 1 To n / P E: p0 W, C" q" H/ EPrint) g+ m! Q b/ O7 [
Print "X(" & k & ") = " & x(k) 6 J1 @! {; {; Q1 R: A7 JNext k ' S" k1 T" K- f4 P `+ r$ uPrint "--------------------------------", G6 _5 {; B- ~/ S2 O! s$ k9 \
Print "其中各行Ax-b="& I( k- H9 g, \$ K
Print) b7 L7 M" b7 ]0 N6 }- [3 _/ V
For i = 1 To n ; k# X* J' I! K: ~1 x4 j8 o0 ut = 0+ a1 N# M9 e) t" b' |
For j = 1 To n o8 o4 {( |5 v. |6 Dt = t + a2(i, j) * x(j). _0 q- Y* N9 d
Next j ( b) }. u/ |/ ]; N5 r. n: Et = t - a2(i, n + 1) 6 u+ U- E, A. i8 p: [( G5 C+ D8 qPrint Spc(5); "第" & i & "行:"; t# [1 I% \2 E [
Print , H% a# \2 C+ a: J4 |Next i # u8 Q5 u3 f. u$ }: C , X; {8 n. F; F" @" SEnd SubPrivate Sub gauss_Click() '高斯消去法 7 M% Y7 b5 Z* J' K0 VDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single8 u9 D2 U) L* S' h- q( F
i = 1: j = 1 # X) i) d6 \3 G Cn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)). U2 r& J+ ]$ _5 n
ReDim Preserve a(1 To n, 1 To n + 1) - {; @# P. n: F8 z1 l. Q% z5 ZReDim Preserve l(1 To n, 1 To n + 1). F4 f+ W& Q; I1 {: u
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single, ]% q. ?8 i, U5 i- a1 |
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()( L' `$ q5 A2 }2 ~9 ?7 Z
For i = 1 To n) ` c0 q0 q6 G6 W) B
For j = 1 To n4 z# I9 \2 i: ^1 a, y
a2(i, j) = a(i, j) 5 q; \1 S! l# v- KNext p" ~* B2 x+ }/ K* rNext '将a()的值全部赋给a2() 7 } a5 o% a1 d( x M& E' }/ Zm = 0 * ~. }4 H8 l9 Y) d, zD = 1 $ ^' G/ ~' y. o& w7 M3 X, XReDim x(1 To n) & m" t. J) e1 ?$ HPrint "--------------------------------" # I7 d4 L- i9 U V. D QPrint "您输入的增广矩阵如下:"' C1 \ l1 h! E, A; H% _9 v# u: [3 H, x
For i = 1 To n R# D: u& _, s/ b: C( J4 _s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))9 [$ v9 u7 \3 i) }& y
For j = 1 To n4 x2 i* F# G8 e9 T' M
a(i, j) = Val(Left(s, InStr(s, " ")))* ^0 C* b+ U Q, l# S/ s; y, V
s = Trim(Right(s, (Len(s) - InStr(s, " "))))# g, C1 S5 O) G1 y4 ]7 J
Print a(i, j); 1 _% W5 G! O2 k3 N7 V- RNext v4 |& P! Z8 ]4 i& pa(i, n + 1) = Val(s)% p1 Z4 Z1 s9 G$ D3 O5 R/ H
Print a(i, n + 1);. n5 G! V6 y0 G) U: r+ Z' m! X& h: ?
Print , r5 j1 h' {5 i W9 P! yNext & A u# A/ c6 ^. K6 `( y : t6 ?5 ~! E; D. q6 q1 k4 YFor k = 1 To n - 1 '开始消元) Z$ P9 w* q5 L( J! c$ v% G
If a(k, k) = 0 Then 7 ?. {/ |% r+ l( ]9 _7 vMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" ( i! t7 F/ k4 \9 u5 C% g* N! UExit Sub) Z' D% ?. I# `5 _
Else( f! n3 s. u9 A3 O
For i = k + 1 To n% R* I) D4 |/ e4 k1 g
l(i, k) = a(i, k) / a(k, k) 6 {8 ~. M$ n0 {1 z! {+ VFor j = k + 1 To n + 1/ P- _2 N, v E9 _& y
a(i, j) = a(i, j) - l(i, k) * a(k, j) e' z5 L0 X7 n: m& T+ f" F
Next 6 q& e" g3 B$ h2 F1 l- m, |" gNext % P' ?; O3 i0 n2 P0 q3 g, AD = D * a(k, k) ' p: t" H0 ?$ v+ o6 S' YEnd If ) @4 A+ L5 v. S7 E* F! P5 SNext k '消元结束" h4 f0 s" `% A- y ]% f
If a(n, n) = 0 Then( m2 @9 J: |& S* {: O3 P
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" 7 i" ^+ @0 e0 `4 K J1 x# `Exit Sub7 b, l1 |2 ~2 q2 }& X9 g( M
Else 8 E( V% b$ F; g* U* mD = D * a(n, n)# z* ?7 f* O' k; n3 o2 ?
End If* r# }; H Z' Y- j5 j0 ]& r
Print "--------------------------------"8 V2 d* T5 E' G4 b, _6 {
Print "系数行列式的值是:"; D 1 F, F; @) V+ w& Z5 qx(n) = a(n, n + 1) / a(n, n) 7 Q' p2 @0 y/ v+ l+ JFor k = n - 1 To 1 Step -1 '开始回代 # x) P1 q. W) c# cFor j = k + 1 To n: r8 J6 Q0 z. y$ A
m = m + a(k, j) * x(j)0 m. R. |3 R5 P) D
Next j ; ?. P* M: ?+ J' h/ Jx(k) = (a(k, n + 1) - m) / a(k, k) 7 M3 i" L: o- [+ [: S/ d) mm = 05 [ G, q: z3 a
Next k '结束回代 t. o: i3 `# s5 d* d* a" C' B 0 i1 o: ?/ _$ Z, b( [: kPrint "--------------------------------" ! Q6 H- l# m$ {5 L2 D5 o) C7 R. WPrint "方程组的解如下:"% Q" j; \! I9 H/ b% F6 y
" V" I4 n% ~3 M }& X4 [For k = 1 To n 5 J7 W- U s7 m4 j# r8 U# K2 [Print& a7 B) |. |; Y
Print "X(" & k & ") = " & x(k) & {/ i' d7 H |( r7 i1 r$ pNext k ( J; _* A: ?5 U) r0 uPrint "--------------------------------" + F. X2 X2 y! W) {' j' q, x CPrint "其中各行Ax-b="3 R& M: Y5 q: Z3 S7 p; h' W# a
Print: D1 I) {- z8 N9 b
For i = 1 To n& c1 A2 o6 Z0 c ~9 |
t = 06 V' w3 M3 B1 B& |8 x# l6 y
For j = 1 To n / `5 O* i. }! @6 t0 ]t = t + a2(i, j) * x(j) 7 i9 @; p5 h9 D( u) V i2 [) DNext j( p' u: A9 e/ K
t = t - a2(i, n + 1) 5 q6 `# } ]7 R" n7 C% tPrint Spc(5); "第" & i & "行:"; t ( Y0 @) ]; B$ Q' C3 |/ EPrint# C( W1 L1 T0 U+ N% ], [9 ~8 |2 V3 r
Next i1 y' j- M$ ?% G) U