- 在线时间
- 0 小时
- 最后登录
- 2007-11-12
- 注册时间
- 2004-12-24
- 听众数
- 2
- 收听数
- 0
- 能力
- 0 分
- 体力
- 2467 点
- 威望
- 0 点
- 阅读权限
- 50
- 积分
- 882
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 205
- 主题
- 206
- 精华
- 2
- 分享
- 0
- 好友
- 0
升级   70.5% 该用户从未签到
 |
Private Sub gauss_Click() '高斯消去法) l: z" k; M: V% D0 C. v5 @7 {
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
8 o3 `4 U' f- Si = 1: j = 1
6 D2 k, |) N( Cn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
! y9 ~) D$ x+ U' p& }4 ^" \; gReDim Preserve a(1 To n, 1 To n + 1)
! H% o" w( i7 S( Y D$ LReDim Preserve l(1 To n, 1 To n + 1)& c) x* m' r2 t3 W* j% q4 `. ~
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single8 r) T- Y" P/ x0 s: E t2 _; h
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()* r1 g; H( f- y5 M
For i = 1 To n0 W/ ^. p# P; D3 Y' ]3 z
For j = 1 To n
. l; {% A8 B3 N- u' Ja2(i, j) = a(i, j)
/ j: ]" t: a0 C# g' t) W% UNext
9 k' e' ^# W( {9 g% TNext '将a()的值全部赋给a2()
# I; u6 K% G, M( I; v: N' cm = 0
. E( [9 j, A/ Y+ z: f. xD = 1* c/ k" j6 f i1 B, k& F+ s
ReDim x(1 To n)+ j& E5 t/ u3 x
Print "--------------------------------"5 d! o, V' s- x/ F0 ~) ^" ]7 t
Print "您输入的增广矩阵如下:" v( S i( r2 ?. s; f# I- W
For i = 1 To n
7 \+ {+ [7 B( Z/ [* gs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
1 {( U9 l% x% V# SFor j = 1 To n
5 `( i4 x; U* Y9 S9 K! N3 Ba(i, j) = Val(Left(s, InStr(s, " ")))- r0 u7 j5 ^4 b; V( s V: c
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
* ^/ Y2 C3 D2 `5 {" J- t* TPrint a(i, j);
0 \ l1 M7 ?6 f1 G$ K7 T- KNext2 a. i; k9 G* j) f# |3 r
a(i, n + 1) = Val(s)
; B- U& g5 @ _+ a4 kPrint a(i, n + 1);
( H, @/ w7 a% E2 n( F* A# \Print
h, w: A/ F" W) _Next5 z1 g8 [6 `& _$ @ R
* O# j: v; r2 j: ?
For k = 1 To n - 1 '开始消元. v5 c4 u- S7 ?! H* c1 }
If a(k, k) = 0 Then
: n7 q- O8 Y& x+ T! Q) UMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"$ H2 n R6 w# b5 ]
Exit Sub( \! Y3 c; `0 {3 Q' [2 g _
Else5 J: w8 E6 m, }& l8 N2 L
For i = k + 1 To n
! z, y: d3 _% {# zl(i, k) = a(i, k) / a(k, k)
4 q. D0 \- i4 @5 g. b( @" r/ zFor j = k + 1 To n + 1+ O1 W3 ]: v* r
a(i, j) = a(i, j) - l(i, k) * a(k, j)
* G# E2 z( t" ?8 L5 a, dNext
8 M- d9 J) T3 c, P. M& GNext
) B% J& ]5 _; m( R0 f: [, v& v/ aD = D * a(k, k)
5 \# m1 k0 r" j8 B, W6 WEnd If
* e6 u8 A9 f! q: f# KNext k '消元结束0 b0 x. x8 \# u
If a(n, n) = 0 Then
0 U# B' v4 {! R: p3 ]MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"1 s5 C! ?. \4 ^# W: J6 @9 @
Exit Sub
" G6 t$ k4 G5 a' c$ NElse
6 F5 C+ [% O( ND = D * a(n, n)0 G5 x( v" S" `
End If
0 v7 M' G6 e6 _1 ~5 d+ A+ DPrint "--------------------------------"$ D+ a9 A+ }3 @" e, u1 g+ h' A
Print "系数行列式的值是:"; D
: X5 C- |( w: [& O" sx(n) = a(n, n + 1) / a(n, n)8 } c& Z% x/ [: D. ?: j
For k = n - 1 To 1 Step -1 '开始回代8 j2 c* r' P5 U+ }* m% R
For j = k + 1 To n: S' q) A# P$ R, D3 N! X. f* F; Q
m = m + a(k, j) * x(j)/ E, H) F8 n7 w, j4 `
Next j
8 Z' F4 P! l7 F0 U2 j3 ~x(k) = (a(k, n + 1) - m) / a(k, k)
9 G, \, V, j1 e8 [m = 0- w5 ]' R- ?# ?, F
Next k '结束回代
6 H! i9 d2 V$ ^8 i8 [. R9 K( F8 A$ K9 u( w
Print "--------------------------------"- S! b, ]" h+ u- S. E& z1 A2 y
Print "方程组的解如下:"9 P& I) T. V/ R6 `5 t3 \
0 r/ {) d# S) I( Q0 f2 ^
For k = 1 To n
% }% z$ t8 t: B8 D9 L# ?8 wPrint
: j& W2 A; p3 m: vPrint "X(" & k & ") = " & x(k)# U8 P8 z ~5 P3 n. A4 U
Next k& b# ]. ]6 r3 |' Z. ~7 t# \
Print "--------------------------------"8 S& @; Z$ [2 W2 m; s5 x, M9 K
Print "其中各行Ax-b=") s& e* S2 M% M2 r. c6 V7 A" @# ]
Print2 G) \ w$ _0 D/ S6 X" e- A8 E b7 o
For i = 1 To n
" n' D1 f$ ~$ I( w) f Qt = 0
! c, T' ^1 I: |( Q. iFor j = 1 To n
% P5 o/ o7 c0 }; A. Tt = t + a2(i, j) * x(j), ^6 P7 O5 H5 k T& M* c: i1 \$ V
Next j
( u# w9 }3 q1 T+ `+ \t = t - a2(i, n + 1)
S# `, @3 y& k& RPrint Spc(5); "第" & i & "行:"; t
* D$ j8 c9 |9 a$ N: w, p; e2 F1 YPrint
: |! ^% l* ?+ J) RNext i8 o9 S; {& j. B N
% c1 ~! F: q5 K4 s2 \End SubPrivate Sub gauss_Click() '高斯消去法
" B1 Z8 J' e5 k6 TDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
3 _! J2 k% ~4 J+ Mi = 1: j = 1! d" g- y# }) [) L6 R$ a
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)), Q: l1 C$ \4 k5 _$ }$ j0 ^' A
ReDim Preserve a(1 To n, 1 To n + 1)- J$ D5 C3 U/ i7 G3 `! n
ReDim Preserve l(1 To n, 1 To n + 1)
/ T7 w1 ], Y& M3 ]6 a$ a* f- RDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single! l4 t6 F9 G8 j/ d
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(); p1 R, Y: ?/ S+ w# N& F% z; J0 x8 V
For i = 1 To n
+ B; H8 z9 q. Z2 ? [6 YFor j = 1 To n
1 g- D% x {8 [7 [9 X _9 c: d) b0 |$ ga2(i, j) = a(i, j)- O6 c5 t; k1 U+ r7 `% z
Next
: N/ w/ [; i8 F/ Q$ M" lNext '将a()的值全部赋给a2() L( s7 U$ U+ Q' c. N$ e7 `$ y
m = 0
3 j. C4 S( l. e- @" xD = 1
* o0 G: N. [; ^4 ^; X# z) {ReDim x(1 To n): l! B3 F1 Y- t: F
Print "--------------------------------"( [+ Y0 d; O; X& r
Print "您输入的增广矩阵如下:": w9 `: r: }9 {' J& U) v/ |
For i = 1 To n
% A# u' ~+ K! fs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
2 j! H) N$ L8 \0 q, s9 V& EFor j = 1 To n& D' n# y8 Q) c5 e6 H
a(i, j) = Val(Left(s, InStr(s, " ")))- @* I4 e& e( c+ f% z
s = Trim(Right(s, (Len(s) - InStr(s, " "))))9 V ^& F* l* \& _5 o
Print a(i, j);" Q9 F; ~/ e$ N/ G' {, ^) n
Next
8 j* x- m. o- m: S* D! d5 I& Ta(i, n + 1) = Val(s)( a. z9 S$ }( U) X2 I1 L. W
Print a(i, n + 1);
( A# X! n& E0 I' BPrint
5 s q n% {( C Z/ a- YNext
& S" K/ }# c6 W) q, A* G7 U3 J& `5 D8 H4 r
For k = 1 To n - 1 '开始消元; Y& J/ R- A& M+ L$ ^- ^
If a(k, k) = 0 Then
) q" K% v9 z2 r* B' r7 UMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"; W. u9 ~. Y& j( R" }
Exit Sub) q; t- L0 J5 @2 h5 b4 C& V
Else
8 v* {. S$ f; x9 G' SFor i = k + 1 To n
5 F5 |& C; l% \8 b; [' O+ {9 Xl(i, k) = a(i, k) / a(k, k)9 l1 w& n. Z/ o5 k J# O U
For j = k + 1 To n + 1* Z* t I- k/ q1 u
a(i, j) = a(i, j) - l(i, k) * a(k, j)$ D" ~, S7 g# T* G2 L# H2 C; G7 F
Next
! E3 @0 d# w$ v1 X+ tNext8 K( B, w2 d+ U0 g2 I
D = D * a(k, k)
; j/ ?$ F: K; e* |- O* f+ U) IEnd If
- s: {( \8 F8 [1 K3 w) A( t; qNext k '消元结束
$ ~8 g g# ]+ p& h9 Z, k s ]: aIf a(n, n) = 0 Then
1 R& F: i: t% jMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
. ?& j; D0 ]- OExit Sub
0 _3 e4 e' g$ u3 u) ?9 {Else
9 w; b# u; _& `( U2 ZD = D * a(n, n), f2 l( | C# I- r H8 z- l, a
End If
" q" Z4 h7 a- hPrint "--------------------------------"5 M1 ^7 n' `3 f( b, \
Print "系数行列式的值是:"; D/ K5 a' r3 k$ W' {& M7 r
x(n) = a(n, n + 1) / a(n, n)
. Y3 |- \$ ^1 b+ ^9 L4 zFor k = n - 1 To 1 Step -1 '开始回代1 w, X. ^, X. p* `! T! B4 f
For j = k + 1 To n
( X P( s: o) ~- l$ pm = m + a(k, j) * x(j): f, O9 ?0 r- S7 M' b& `) f
Next j
5 B; ]; l% l7 F9 z5 q0 Px(k) = (a(k, n + 1) - m) / a(k, k)
! e5 o9 F( ]# i- H7 V) A" [7 jm = 0# _; ?* N- w) K5 r8 r b, |
Next k '结束回代
7 n6 Q8 B8 \$ o9 v# f) c4 B5 u; p
Print "--------------------------------"4 X3 T6 H' T# |1 g6 C; ?2 s
Print "方程组的解如下:"- M2 d8 I1 ~5 \5 D6 F9 `( p
* Z6 n. [* G' |2 ]$ Y
For k = 1 To n# m! s% b+ l- y9 e. c" C
Print
, D+ r6 e8 I; }$ j! b. d1 YPrint "X(" & k & ") = " & x(k)
5 X# o! ?% C8 c/ [Next k
7 Z$ A- b0 r, k# ~Print "--------------------------------"
C( X1 R! U( J, _0 h1 f0 ZPrint "其中各行Ax-b="# y, D7 F( T8 Z+ D/ A0 X8 p2 G& I9 p
Print
+ q$ X: }0 C: gFor i = 1 To n6 E0 T; H: p& k! q1 ?
t = 0
& I [% `! X5 J- D" v u& w7 q/ Z) zFor j = 1 To n
, D7 t( W- ]& M1 vt = t + a2(i, j) * x(j)
- H/ t. f& g6 t" [ TNext j6 w& ?8 w5 p8 e! o4 n+ _
t = t - a2(i, n + 1)
" L. D4 y6 S! ?1 d# y n1 c) R8 lPrint Spc(5); "第" & i & "行:"; t
, @8 |8 d8 Z" m7 [) x iPrint
) q: Y# @4 r- n6 a6 JNext i
2 u/ m% W% G: s1 j( v- U$ A1 B1 g: D+ C, b& k* U- }
End Sub |
zan
|