- 在线时间
- 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() '高斯消去法' e1 @& W/ I/ c0 R% v/ I2 q2 T; y9 |, J
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
/ u, s2 U1 R6 W9 li = 1: j = 11 T5 I+ h: N# n
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))+ f/ H& G! a$ |2 J" b' S
ReDim Preserve a(1 To n, 1 To n + 1)' {- L1 C0 w9 ]* x! N( v7 Y5 V
ReDim Preserve l(1 To n, 1 To n + 1)0 m! m4 _: N, O% W# W. Q; x
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
/ F ^# _6 }, k! C- UReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()1 v: B( R. U+ `
For i = 1 To n
/ U4 O" E* k0 t# U; V1 @9 dFor j = 1 To n
+ J& ]% o! m& m2 H" Va2(i, j) = a(i, j)
( i9 D1 h* F: ~2 l( a7 MNext. f1 ~2 L( d I8 [9 M$ r9 J( U2 V
Next '将a()的值全部赋给a2()! N3 [9 Z5 @) e* v Z8 ?
m = 0
; x7 x* N% \# o% W6 ^7 AD = 1, x' O3 ?* F6 N8 E9 a; u2 f
ReDim x(1 To n)4 d0 ?8 t7 n/ Y4 V- t
Print "--------------------------------"
# h6 {5 c7 U8 {Print "您输入的增广矩阵如下:"
4 `$ @0 j4 B9 A' @8 A8 }3 BFor i = 1 To n
8 Z% a9 i1 c* Es = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) \7 J! I1 D* @% |) q- U( h
For j = 1 To n2 r6 g7 D& y! r+ Z
a(i, j) = Val(Left(s, InStr(s, " "))); Z, Y$ @. |" D0 d- X' y1 Y1 n* u
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
. }8 R8 s, G* o T) _% UPrint a(i, j);
8 W' i, |7 W) H2 Z4 RNext! y* T0 K2 F- ^
a(i, n + 1) = Val(s)! j2 V7 l" A0 S9 `' w- R
Print a(i, n + 1);3 T7 \9 }" ?( [1 y
Print8 X1 O$ w- p* ~5 n: w+ Y9 s
Next
* Z. C: J5 s- R, ^
3 g$ w: l' b6 B& |. sFor k = 1 To n - 1 '开始消元
) a! d* G- V- _5 U+ `2 u& {( B b5 uIf a(k, k) = 0 Then
* _, }( M8 K6 ^. Z* pMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
u* G: E5 [" w/ k! ?Exit Sub
8 \7 A. }0 @" e1 CElse
7 e( d# {. {# r. zFor i = k + 1 To n
E6 Y: S% t/ f h- F3 g3 K, [l(i, k) = a(i, k) / a(k, k)* `4 r+ z" \ h; m! P
For j = k + 1 To n + 14 Y9 D" n" a6 c3 [1 M H- i3 E) C
a(i, j) = a(i, j) - l(i, k) * a(k, j)$ p6 X5 H+ I7 v; v; G& n
Next0 e- ^! k. ] o# V8 w% S) h/ {
Next0 Y! D5 q- S; v: H" @) s: ?: n
D = D * a(k, k)
' } a0 [8 Z# ~" I% }End If
" z. U. F* ^7 F# _( g! U2 d( H* h4 t7 YNext k '消元结束; n3 ~( \, R6 L
If a(n, n) = 0 Then8 O. o1 G. K* \+ ]+ L' X# h
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
% l. K0 I. ?- r4 O2 E E: JExit Sub; c7 B/ T" z/ i B5 g; y
Else4 |5 Y6 a. Y: B; D, T/ R. R# ~
D = D * a(n, n)
' i1 u# e z( U3 X* @4 jEnd If2 `" o9 T* m; N7 f
Print "--------------------------------"$ o/ ^8 y% ^* n; ]
Print "系数行列式的值是:"; D
% `5 B1 g' V* R; c8 Yx(n) = a(n, n + 1) / a(n, n)2 B3 O% U" D# Q- M* Q
For k = n - 1 To 1 Step -1 '开始回代 w9 o6 I$ U+ c/ R: [$ ?9 E
For j = k + 1 To n% [9 q+ V" m! d; h* ]
m = m + a(k, j) * x(j)
+ r {; v2 H7 o7 q3 H hNext j
8 E' d9 u* \( c/ ] A% ]1 x9 Kx(k) = (a(k, n + 1) - m) / a(k, k)
9 y6 t% y4 h3 v% fm = 04 X, U" D, g* y& S. x( i
Next k '结束回代
* I; x6 Q, H7 d0 J
& }1 K7 ~' t0 z" ~# dPrint "--------------------------------"
* U/ y& ^" v6 n* ^6 _Print "方程组的解如下:". g# X9 T; n& z
7 O# W# V5 R2 }8 g3 L' b
For k = 1 To n- }2 a+ p& W5 V, ?
Print
% [( F2 u/ b+ c! M, L; yPrint "X(" & k & ") = " & x(k)
+ N+ \9 o& l+ N) v- S/ tNext k
. Y3 F0 j& w* I4 ^$ YPrint "--------------------------------"# {# u5 w- e. s. Z3 ]6 A; X8 o7 D
Print "其中各行Ax-b="
2 i: u- `% F7 M, }) m/ O' z) d9 \Print
% Y' B; d* C: [: V d- _% _; T' yFor i = 1 To n# @" ]- ^0 X" v0 o' m6 g# g
t = 0
8 d# Z; L) N3 V) P- lFor j = 1 To n
# |) Y" Z% M( s, E* d7 y o6 h# m: ]t = t + a2(i, j) * x(j)( `8 R& K9 R* A% h6 r" G& t
Next j
! d4 M, c' l' `( S. \# Nt = t - a2(i, n + 1)
9 E9 R; T7 {/ U: b5 V9 b& ZPrint Spc(5); "第" & i & "行:"; t
7 \; j3 g1 z! v; S7 E! APrint
+ j3 }% c1 E: y3 N. oNext i. ?; x$ v/ {# @8 J8 | W
9 c! _; Z# l! C7 C. s
End SubPrivate Sub gauss_Click() '高斯消去法
2 b1 {/ S" H/ A, v# }7 WDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
1 ?1 U) r; d! R, t2 ^7 h, T) vi = 1: j = 1
- s7 F f2 V; |8 t& @n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
9 \, I; A! s3 D/ E! [/ |/ I7 oReDim Preserve a(1 To n, 1 To n + 1). r$ v6 z. E' N3 W/ P" _ K
ReDim Preserve l(1 To n, 1 To n + 1)
) w2 G# N" z) d m5 U0 VDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single% D: `) W' r7 q$ `6 P
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(), }" |% S3 h& F
For i = 1 To n( y" c6 E" C) M0 z
For j = 1 To n0 B) h8 W# \3 @
a2(i, j) = a(i, j)
% h2 x' i& M! ` C- z3 R* iNext
7 ]1 e# ~9 h& e+ ^" A( h+ ONext '将a()的值全部赋给a2()( i7 W1 [" M8 \" v0 r* I" R
m = 0
. ?4 `' j4 q7 J4 ]( E! xD = 1
" P; f: K% X' n% o7 C& m% [7 gReDim x(1 To n)
* M8 v% C$ d% x; e9 G0 _Print "--------------------------------"9 g) `* ^$ f/ _) @- s e1 c
Print "您输入的增广矩阵如下:"
7 S5 G6 l8 O ` l6 nFor i = 1 To n: M. X/ y" J# p
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
- j" b s3 w7 o/ v' [For j = 1 To n
- w( u+ O5 K' ?; F/ Ba(i, j) = Val(Left(s, InStr(s, " "))) N5 T, M/ O3 l6 }9 z) {
s = Trim(Right(s, (Len(s) - InStr(s, " "))))% d& n+ y( Q1 H1 D+ s$ K
Print a(i, j);
8 X6 u$ C7 p$ y0 j" Z! [Next- P: b9 O) l# d7 b2 ?
a(i, n + 1) = Val(s)
0 P/ N& W" K$ `- t) x1 Q, ePrint a(i, n + 1);3 o) u" t3 N9 [" B- W/ f
Print
. A9 y- v4 \# N; P0 wNext
$ o- y' f- {# f5 z( u m" q4 N3 R+ N6 f& a! e8 @
For k = 1 To n - 1 '开始消元
/ V) v) u8 F* `$ y% {2 {# _, K+ ]7 ?If a(k, k) = 0 Then
1 p& H+ _$ M( `% d7 W% |MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
. a( T7 I ~5 }5 ^! I4 SExit Sub, \; U; e6 b$ X1 R7 H
Else
( k7 Z( `/ G* M& [0 OFor i = k + 1 To n
/ |; L1 ~5 B: ^l(i, k) = a(i, k) / a(k, k)
8 s: u f* }/ M4 u) B" M2 B6 F9 Z9 P7 mFor j = k + 1 To n + 1, `. f% _# R% t$ `4 [
a(i, j) = a(i, j) - l(i, k) * a(k, j)# ^0 ^0 w% s* i1 u/ F+ h) p, m
Next8 `8 W ^9 `- d( d
Next3 l; U* F% ?. @8 i; h4 l) a) G
D = D * a(k, k)+ p4 \- p8 P' o2 ? F, Q3 P
End If0 M& h, l; J0 Z. N& l
Next k '消元结束! r$ V0 W3 o4 `! N- ^/ u1 Y
If a(n, n) = 0 Then
. p8 D) o: o5 d$ HMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"; J( D* a- r z
Exit Sub
- {2 f5 N+ Z( r/ w) ^; AElse
' M: P- a" _" B/ q( Y) L/ JD = D * a(n, n)
1 U/ S1 D: `4 Q. |, gEnd If
9 E+ n* k& v- u U6 d9 K. ~7 I0 rPrint "--------------------------------". V2 V6 @5 u' y3 b! H
Print "系数行列式的值是:"; D0 J( x$ L& A. k2 y% T5 [
x(n) = a(n, n + 1) / a(n, n)
6 _, z+ f- }7 H' YFor k = n - 1 To 1 Step -1 '开始回代
: o8 T1 V) e5 N, Y& I" b. XFor j = k + 1 To n
8 j' a7 @( C, L7 T/ F8 Rm = m + a(k, j) * x(j)8 r+ R2 l# ^" B, K- H3 c
Next j& j- F6 T$ N7 `4 R- a8 J
x(k) = (a(k, n + 1) - m) / a(k, k)
& z V" ?& l1 v A& }" y5 w% j, ~m = 0
7 R- a+ _8 O6 y2 r. rNext k '结束回代
" r1 G% W. T- s" L4 Q1 e+ w% h4 |
$ K! R m9 `4 E* |0 T$ l5 r* ?Print "--------------------------------") X* r/ V) H# R! M* a# J
Print "方程组的解如下:"6 R0 ~8 M% ~" J& Q9 N
( o/ R+ ~( \5 ]% D0 c0 {4 }
For k = 1 To n
$ a+ v7 Y& w# k$ \Print+ _ \6 h% V* _/ W# s/ m. K, y: `1 }
Print "X(" & k & ") = " & x(k)- O8 ^" s; \/ J0 ~6 ?* r% B
Next k C8 R$ u1 R; r. Q5 U# ]8 C; @7 u: Q
Print "--------------------------------"& O6 F% f, d9 o! n# D1 w k
Print "其中各行Ax-b="
0 `, z, p2 Z2 s/ x4 SPrint
* x& y* L% C( t9 h; \6 e- `For i = 1 To n
. {- p0 c7 U6 yt = 0
" K$ a: n4 D8 t( i2 {For j = 1 To n7 E: K4 n2 X0 |# v7 M. d1 S; |$ Y
t = t + a2(i, j) * x(j)
7 W1 r# j2 L; M \. l5 t0 F8 WNext j9 ~$ s& a* E. n% ~6 M3 p0 t% W+ S
t = t - a2(i, n + 1)$ v/ O) d6 P, D
Print Spc(5); "第" & i & "行:"; t
( o& i* p h' P$ k/ S, M9 YPrint
# A$ ?0 ?2 P! S R3 hNext i
+ Z& F1 P5 ~ O1 @, X# ?/ b8 g& F L% h" d; R
End Sub |
zan
|