- 在线时间
- 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() '高斯消去法+ y8 Z9 n1 H7 m3 S
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single" I0 o7 L8 |& ?/ w
i = 1: j = 1
+ _ x* d; P/ D# Y3 G; h$ j6 Tn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))) p7 g& s8 O, H7 g/ J
ReDim Preserve a(1 To n, 1 To n + 1)) O7 _- l; P) |8 c: V6 o
ReDim Preserve l(1 To n, 1 To n + 1)
/ A Q/ {) e8 o: m6 EDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
" H0 h4 K% N+ C; Y1 f0 ^# _- uReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
- S- ]# c z9 r( `- E1 ?; w5 ?For i = 1 To n
9 J5 i9 ?5 v/ t) _0 M3 mFor j = 1 To n
/ w( J- l) \) k7 [1 w+ La2(i, j) = a(i, j)
- i, P* ^- h( B. d8 A6 R4 DNext4 r% D/ Y5 E# E% C( I: F
Next '将a()的值全部赋给a2()9 H4 D! e2 G* N0 B
m = 0) Z0 _% t% }6 q; v( Q- o. t
D = 1
; A8 ^" d2 S3 r! t3 q# S% ZReDim x(1 To n)
% i: Q6 O9 L. Q' \6 NPrint "--------------------------------"
+ t& ~# d& X( O; j- J7 hPrint "您输入的增广矩阵如下:"
9 B ]' w; N9 m; h1 uFor i = 1 To n. ~" v; `3 j3 R
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))6 T- i H, {; [3 {- k2 N/ X/ E
For j = 1 To n
1 T# k2 ?# g! ]) t- X+ O# v; na(i, j) = Val(Left(s, InStr(s, " ")))+ D9 H8 i) c" U/ ~0 E" ]
s = Trim(Right(s, (Len(s) - InStr(s, " "))))5 I& b! j: b0 a( r9 c' z0 V
Print a(i, j);& o. v+ I9 V! r
Next$ i: o& {% U, W& m( x
a(i, n + 1) = Val(s)
8 L- ~( ~8 @- Z6 ? U: Y* q+ A& \Print a(i, n + 1);: R# W4 D, m/ F6 G1 N! c0 \
Print7 A) y# W$ T1 q& j Q! E9 Y
Next
6 X/ G' F* V/ c& ^5 D- k" M; v9 W- Y! Q) [3 U8 |/ \ N2 q+ X
For k = 1 To n - 1 '开始消元" U6 c0 Z/ W" }6 C) P. A
If a(k, k) = 0 Then7 y' X. G2 ^8 L, {1 ?- h$ w
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
0 g* B: p3 R% C6 AExit Sub/ Z+ O) k0 h/ }: D1 I% S# r& U& e
Else6 o+ t$ F5 Y; E: A% g
For i = k + 1 To n
% P- ?- V" r2 p# w' Vl(i, k) = a(i, k) / a(k, k)4 {2 z1 L- b7 i3 w$ \
For j = k + 1 To n + 1. ~% n& K! I1 F8 _: |/ |% J( u
a(i, j) = a(i, j) - l(i, k) * a(k, j)5 h. R) l2 r2 v7 x, i+ p9 Q) `
Next
y; q) y1 F( k0 lNext
. H! Q# t; H+ g# dD = D * a(k, k)
- ?2 l9 g& E. r0 @, y, GEnd If
1 K# G" i# T: @8 v# Z2 @Next k '消元结束
: q7 S0 K" s3 [4 RIf a(n, n) = 0 Then# j$ I# W* E+ [- p; q% F2 `
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
" T% H" Z7 Z; E& O5 b& sExit Sub6 K T4 @+ m, o
Else/ y6 }9 h1 U- {3 K c- k
D = D * a(n, n)
% P7 K- F9 x! p* P' IEnd If
5 c8 S' ?' J+ J; t! q! Y9 W, LPrint "--------------------------------"& }6 l* M; Z9 w" _+ ~
Print "系数行列式的值是:"; D: p7 H+ P7 k0 L1 N; K+ U
x(n) = a(n, n + 1) / a(n, n)
5 H/ I. t1 ~5 S+ U; rFor k = n - 1 To 1 Step -1 '开始回代
+ k* E; B& O% DFor j = k + 1 To n- ^: \! L" X9 H: o. P7 q
m = m + a(k, j) * x(j)
' L9 ^' X& V+ ANext j
" W1 h2 _* d) Y0 P9 {x(k) = (a(k, n + 1) - m) / a(k, k)
8 u1 N# L& t W1 sm = 0% a" ~% o; }. B
Next k '结束回代
% m$ I2 p" F2 @+ J c; v8 s
0 R1 Y8 \% Z; N7 ?. s; q6 ]Print "--------------------------------"
+ c0 Z# d& P5 O# N5 s* MPrint "方程组的解如下:"9 I/ b- q& Y7 S7 q+ ]' P" l$ [6 Z
9 }+ Z' e3 D# p; J1 j% e
For k = 1 To n/ t3 G- P0 }$ M5 ]$ Z* e; v
Print
1 S3 I7 X) F1 }0 L5 O: qPrint "X(" & k & ") = " & x(k), h, ~% a6 N" S# U. r& o% f
Next k3 x( ?! u+ P- f1 l$ R
Print "--------------------------------"9 C! z# A, ]1 m! Y, C0 n
Print "其中各行Ax-b=". S7 p: e# L8 I* a& ~: d- O0 q
Print: P( J3 ?) `$ K
For i = 1 To n
, K4 ?& J0 e, S/ Vt = 0
5 q2 r! s _! A7 C4 RFor j = 1 To n
3 ^. t8 H U+ ]5 M: dt = t + a2(i, j) * x(j)0 C+ y9 p/ C: I9 [7 X T
Next j
' q9 A# H8 T2 h! At = t - a2(i, n + 1)9 l3 ?: j3 l7 s0 t( Z
Print Spc(5); "第" & i & "行:"; t
3 [, |- J; l" RPrint1 s0 C5 V- i9 J# D0 T+ B3 U
Next i
8 L6 C: B' K" J. E3 M' B6 D( o) r; B
End SubPrivate Sub gauss_Click() '高斯消去法2 f& V( h6 L- e7 l$ l' W" }
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
, Q- i4 F+ z5 Y; C, d, yi = 1: j = 1% [" r5 j5 m. T$ ^( z# O
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
3 ]9 X4 s; y2 ]0 ]- v- AReDim Preserve a(1 To n, 1 To n + 1)
1 y. _) {0 E" s; G! cReDim Preserve l(1 To n, 1 To n + 1)
' ^/ J9 Y3 w. Z" s! C" v7 mDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
5 v% O; N: P, G% D# l+ O! \- PReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()$ F, i7 @) B& ^! f, P
For i = 1 To n; a7 d8 c/ O2 _
For j = 1 To n6 s! K/ R5 f7 q( m# i
a2(i, j) = a(i, j)
# M' y4 u4 v: N9 Y0 E0 Q- o3 mNext* g" P# y# g. p- ?- T& \
Next '将a()的值全部赋给a2(): C" J2 l1 u$ z8 @
m = 0
* m3 c1 R6 G3 C9 l' j C' G$ |D = 1# _& l0 [7 g1 l, ^
ReDim x(1 To n)7 r' P( D6 s; u4 j
Print "--------------------------------"* Y1 N$ n0 C3 ?5 f; F' V# j- y4 F! j% B
Print "您输入的增广矩阵如下:"
' q2 g) y7 j q4 | D' v& w( EFor i = 1 To n
& A. i& t7 a0 j h0 p* q& R% Os = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
! Y. p7 S8 a0 m2 |4 r9 m* ^For j = 1 To n0 Q7 F% X; ?# ?% i! v# f. S' K
a(i, j) = Val(Left(s, InStr(s, " ")))
' c( k9 J" \ F7 }/ s9 ?s = Trim(Right(s, (Len(s) - InStr(s, " "))))
9 D1 A) I0 a+ q! ]! K( ePrint a(i, j);
( V' ?. s6 H( i5 r9 r8 `- H2 z$ c' \3 _Next% X1 J( H; H: ?+ M4 P
a(i, n + 1) = Val(s)- [, [8 H7 w7 C9 @; |( }; T% I
Print a(i, n + 1);9 n1 P+ ^9 W) g7 I: e
Print
$ Q. a" m3 _8 C3 m5 Z3 yNext
( c2 W6 G/ O2 f, L# O$ ]
" o( x1 y1 l; Y# x$ L& NFor k = 1 To n - 1 '开始消元6 P: h# e4 a- a# s
If a(k, k) = 0 Then
# q+ m7 g1 |; g; b( u" m) MMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"# p5 k$ V7 P, t3 ~& ]
Exit Sub
) S6 e! K S) l; YElse
+ _+ N/ H0 K. }9 U0 aFor i = k + 1 To n
7 h8 r4 r; H' ~* y/ Ql(i, k) = a(i, k) / a(k, k)% }% E- L( n6 C2 d& Z
For j = k + 1 To n + 1
4 V' Q, e8 f) \8 v: q& f, va(i, j) = a(i, j) - l(i, k) * a(k, j)
: i, q8 H, [: [' ^/ I( @& J% g7 B7 U; VNext
9 I+ ]* g7 m2 {0 ^9 }( q. RNext0 W: A1 T0 S$ J, @; T
D = D * a(k, k)' b% t" y" l ?: Y3 q( C( L
End If% r4 ?1 t4 Z5 J
Next k '消元结束- t4 i9 c; d& A* @) D
If a(n, n) = 0 Then) r7 P+ v- l9 `( @8 J2 V2 N3 @' y. k2 ]
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!". I: b, n; Y; k5 S
Exit Sub- X$ ?* P" O4 i" L/ R1 X# S
Else
: k* `% J3 F, kD = D * a(n, n)* Q) Y3 r6 R# ^0 {+ }) S
End If. u A9 r( W( B# p& i# V. {
Print "--------------------------------"/ ^; K1 }' {6 F& b
Print "系数行列式的值是:"; D6 R- [6 i) Z7 z- r
x(n) = a(n, n + 1) / a(n, n)9 m( c- X. ^; S) _3 j" Z6 j9 W7 E
For k = n - 1 To 1 Step -1 '开始回代
: i# W4 [0 |2 l7 OFor j = k + 1 To n7 Z, t& h) S0 I* }2 b" Z( V
m = m + a(k, j) * x(j) t+ h7 S1 }! E5 t7 Y1 C f
Next j
: d# w$ a5 l/ Y k2 n& R* Ix(k) = (a(k, n + 1) - m) / a(k, k) {7 |4 ?4 P6 A' h# M
m = 08 i% Q6 m, a% K- |. U. |- G6 W6 @
Next k '结束回代
1 Q* u& ? L$ T. K+ d4 X
& k% W' \4 k l$ {* ^0 e- EPrint "--------------------------------" V- g1 K/ q% E! I9 g l
Print "方程组的解如下:"
+ u$ Z& I7 j! w' a: L; U9 `+ O
- z2 i9 i: b1 Y0 |7 v0 J- E! c3 gFor k = 1 To n
& O1 S; P0 ^/ L5 u4 j3 r7 @3 b( FPrint
( y/ {" n3 {& j- p/ t9 TPrint "X(" & k & ") = " & x(k)/ m& `' `' c, j' Z! L5 B t
Next k$ S# n4 E6 d, D- B" a1 A7 V3 @# t! n2 |
Print "--------------------------------". ~5 I+ q& |7 v
Print "其中各行Ax-b="
2 h: E* Q2 L) b: \5 I4 l& rPrint
' j8 U$ |' M, X' {2 A, E; MFor i = 1 To n2 W+ z7 H( ^& p& N. u) `
t = 0
* N# @8 b$ ?( F1 i3 J* }For j = 1 To n
) K( K k. b# bt = t + a2(i, j) * x(j): ?$ C& P3 x# m4 k% R0 u
Next j1 \/ `, T s) y! K1 \
t = t - a2(i, n + 1)
+ P* c1 e& w" @+ F& k# _' U0 lPrint Spc(5); "第" & i & "行:"; t
; n- O; M* t- W8 k& ePrint& J9 E3 u6 \, E) v
Next i) v* [( {, ]" t$ _7 g7 o8 F/ _* D0 T
. l. z; U7 ? m6 T1 f! u0 j
End Sub |
zan
|