- 在线时间
- 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() '高斯消去法
! d9 O0 G! A/ c3 Y% K" VDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
8 d/ [+ O1 H2 I* N ei = 1: j = 1* A$ L+ ?/ h1 e
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))7 \, z& x S! [' ^" }% W
ReDim Preserve a(1 To n, 1 To n + 1)" P6 x' \& r9 F5 ]: R, b# `4 r" M
ReDim Preserve l(1 To n, 1 To n + 1)( R& V# y: f0 B) p, e; u
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single2 m8 u& k* t& b/ ~3 Z& U( J
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
0 w6 b$ j+ H2 H' d# a3 g% FFor i = 1 To n; a1 \) _7 N) z; X% Q$ `
For j = 1 To n1 { F: {5 s% v* @# G6 P# t" ]
a2(i, j) = a(i, j)+ e. j( z5 T5 R# A
Next
. U% ~6 O% u$ u; w6 ^, ?6 [Next '将a()的值全部赋给a2()) n+ C! d* V' `
m = 0
' Z5 n& P! f3 b4 r/ m! o% nD = 1, V9 q; ?# E( R5 e
ReDim x(1 To n)
4 X0 [3 U/ k) X, iPrint "--------------------------------"& b8 [2 J c# p" [# N
Print "您输入的增广矩阵如下:"8 C$ m, M1 p2 x2 j6 T9 G
For i = 1 To n: k& J2 S, k. {% e5 o" f. V
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))0 K5 W: ?9 X+ y1 t# c9 [( a
For j = 1 To n5 k, z; i0 m0 }
a(i, j) = Val(Left(s, InStr(s, " ")))" [9 ^7 [% B' @" _4 d) q
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
; k7 m0 [8 N7 r, ?* g5 WPrint a(i, j);0 Z4 x- x, t2 N3 m' p; a" ]% \
Next
6 R0 x! c8 ^- P+ t. za(i, n + 1) = Val(s)
& }% h% R( d( z; r' J/ cPrint a(i, n + 1);9 x2 i% Z6 T1 q2 J m
Print" r( ^9 A H/ Y% S/ n& Z
Next
8 `5 Y K8 ]3 Z1 ^ ^, w- X5 C
' W q! b$ {" F3 k; w9 D2 ]For k = 1 To n - 1 '开始消元* I' g7 t) B0 ?; T& L
If a(k, k) = 0 Then
& Q T% C! O, t. F: g4 z& eMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" A4 o; m; e* F" E- f( e/ e
Exit Sub# y- ^/ A, i5 `* Z- P4 N
Else
4 A9 T2 O# @ q% ?4 f! x$ ?For i = k + 1 To n
2 O3 ^- K6 t% V* T! ]8 el(i, k) = a(i, k) / a(k, k)3 r# W0 _0 m* J1 b
For j = k + 1 To n + 1: ?0 W+ R5 W, _* _% U, p" d
a(i, j) = a(i, j) - l(i, k) * a(k, j) j" n i0 ^. B/ {: Z
Next
; v! b; @2 U9 D* g- n- P% RNext! `% h% b) H% D7 U9 R6 u
D = D * a(k, k)" u& s6 U5 W9 J$ G# T/ e. ~ D# Y, V
End If. t& i; p5 K) o) `8 c2 f
Next k '消元结束
5 y6 `5 U' l" Z ], aIf a(n, n) = 0 Then, W# ~- S1 G0 p+ c2 g% e# Y
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!", a8 R: w. G% i( P1 Z/ E/ x
Exit Sub8 L( q2 C- e" ]1 B9 V' j
Else5 D4 `7 L6 g2 J6 l. M
D = D * a(n, n)$ Q# @$ F; {: _5 V. G
End If W& T& L8 x1 ~- `6 y' ?; a
Print "--------------------------------"7 K! i- \. s4 c3 u3 T7 s
Print "系数行列式的值是:"; D3 k" P* l1 q$ p7 X" g. |9 ^2 Q# w
x(n) = a(n, n + 1) / a(n, n)
$ }8 o M0 Y$ a8 M9 \9 ~For k = n - 1 To 1 Step -1 '开始回代$ B1 m2 z+ l& O2 b$ O+ m
For j = k + 1 To n* `$ O/ ?0 {/ U. q' O
m = m + a(k, j) * x(j)- L s( h$ u" r4 {8 r5 E
Next j2 K% G4 w- |+ O/ _1 r/ k5 ^* P
x(k) = (a(k, n + 1) - m) / a(k, k)
, g' C- b: m4 ?8 [! P* \; q. Em = 0
# Y4 F. ]( v! v M8 i3 d8 nNext k '结束回代
4 c- c% F/ }9 I8 A/ p- A" ]" j( V& J2 l! T Y$ ?
Print "--------------------------------"
+ d6 {5 g! Y. c' o( ^- GPrint "方程组的解如下:"+ d+ z/ ?: x. s# B+ Z; E1 s
4 b2 X" R- x9 U. ]
For k = 1 To n
8 f. {8 o7 u OPrint
( p. A/ u! W. N/ h4 ZPrint "X(" & k & ") = " & x(k)
" x0 F( Y, Y( `/ @5 v' o" D" C7 fNext k
* k1 s3 n+ c$ q" YPrint "--------------------------------"
1 ~0 N3 H' `3 wPrint "其中各行Ax-b="
' U" f7 o8 o* t) X8 BPrint
' l/ ~: a+ {8 K* P& w* b, NFor i = 1 To n( `4 c: a! X" v$ ^! M0 e5 N* w' M# ~
t = 0$ J a8 m& n4 i, n
For j = 1 To n7 ~7 S3 J0 i6 f0 ]: w
t = t + a2(i, j) * x(j)
! b7 w6 l. U' H% Y# r* W% ?9 JNext j
) X9 i- H& E5 U2 [ Z: q1 G" `t = t - a2(i, n + 1)
" i' ~5 D4 k; _: N4 fPrint Spc(5); "第" & i & "行:"; t
) K% L$ ]4 L5 O3 x9 sPrint
1 _6 Y, H. N9 J3 N7 \ FNext i
2 F( u; v+ f) g
& S5 N: h, T) k. B8 qEnd SubPrivate Sub gauss_Click() '高斯消去法
: }2 n$ u4 y! S9 jDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single: p+ v( {) l1 J+ P
i = 1: j = 1
+ ~/ D8 O0 ^2 K$ H! u1 i" on = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))7 P0 d/ p) h3 U8 e
ReDim Preserve a(1 To n, 1 To n + 1)2 v, L% O' U( E2 I- _8 v% `
ReDim Preserve l(1 To n, 1 To n + 1). k" V L+ X( @
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single; X+ ~0 d/ W3 z/ H# b* i' T9 v* w
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
+ O% @5 @9 I& J* E% T9 ]For i = 1 To n9 Q/ \+ F$ P2 i- v9 v. k. @
For j = 1 To n$ w1 }7 ?3 X, ~" M% j2 F
a2(i, j) = a(i, j)
+ Q* B3 Y# P$ @9 D# iNext" }" m4 q6 E$ w
Next '将a()的值全部赋给a2()
: n( a* {: U2 m# O5 G) Wm = 0
& n( P3 x" j9 s4 x- G, l: U' BD = 1$ c c9 I6 a" G" ~/ @
ReDim x(1 To n)# n: _5 X: b! A
Print "--------------------------------"" q F: }) o5 Q/ X$ V
Print "您输入的增广矩阵如下:"
3 [7 D) I( A1 X0 q- E: MFor i = 1 To n. U4 \, Z. s. z. `3 I& S, r
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
' \; A* k( e. u( j# H1 d% xFor j = 1 To n' L7 X5 d9 i' P. z9 V! m
a(i, j) = Val(Left(s, InStr(s, " ")))
$ n# U0 e5 t3 N& T6 I$ `! ]; C" Ps = Trim(Right(s, (Len(s) - InStr(s, " "))))
% j; ~$ o& a% Q9 g2 l) {! RPrint a(i, j);9 {, N6 _) Z# v% l
Next
" w L* N9 f) ha(i, n + 1) = Val(s)' j- B" C, ?' d: g3 W! V4 Q6 A
Print a(i, n + 1);
V3 i1 k8 A" K0 RPrint
" t; ?) k7 Z9 M2 P1 }Next
6 n! r5 L: q! o* V8 E7 k% u, w8 p! y
, I" r& ?7 M- s. u f3 V+ Z% sFor k = 1 To n - 1 '开始消元
8 u% g+ [ I+ e) A2 h# ~If a(k, k) = 0 Then
% |! U9 a* D' g% ?* _MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
4 a# s5 m3 a$ R+ h6 F C# D8 O# }Exit Sub2 W6 D# i6 G% A, ?9 a
Else+ R( Y) O) S% m) D9 p* ^
For i = k + 1 To n
* V! a5 t: A, q- _l(i, k) = a(i, k) / a(k, k)
$ `; |% U" i0 m1 E. j9 H/ GFor j = k + 1 To n + 10 q) t6 h1 r9 V+ [0 R
a(i, j) = a(i, j) - l(i, k) * a(k, j)
9 n& X- @1 e: |3 x7 g" X) yNext2 ]1 S8 @9 t% D
Next2 U7 u4 `" A) f
D = D * a(k, k)
! ]" M. D. Q. x" y$ v9 IEnd If& M4 h9 D# N4 F) x! u
Next k '消元结束
% Z4 T" U" @9 C8 a: c3 bIf a(n, n) = 0 Then5 a$ v! O8 ]( e8 o' Q& a
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"7 {' D, T; i, s& P! r% Q& x/ I$ m
Exit Sub" }% a$ z* q8 E& A8 p. U: a4 v
Else4 y4 y& V ^- I3 v, b
D = D * a(n, n)7 \ T' \9 A& `
End If5 q6 U1 J( l- `5 W; c8 r7 Q
Print "--------------------------------"
+ I, B/ i* i5 S! yPrint "系数行列式的值是:"; D/ ~( [& i; S. [, E: f% P- V6 Q: B
x(n) = a(n, n + 1) / a(n, n)! \2 f* f. j* B3 U e9 x# U8 q
For k = n - 1 To 1 Step -1 '开始回代5 p; S7 O6 ?4 C7 w+ T
For j = k + 1 To n/ a$ s1 r$ i) t* z& t; _
m = m + a(k, j) * x(j)
( B) L9 ]1 j' @Next j
) A1 w: v* _: H) A: J4 w4 Y1 Zx(k) = (a(k, n + 1) - m) / a(k, k)
/ j( f8 }* I& }' N( E& }* fm = 0. E+ V1 i7 {# r* X. K
Next k '结束回代
' l; k4 k' @) H% S, a c. s+ M* j: U' z7 ]! ]2 S: x& R
Print "--------------------------------". U1 p3 q% m5 P
Print "方程组的解如下:"8 C. X1 y) ?8 c; k* ?
; R3 u" q, X3 v0 G5 H2 dFor k = 1 To n
) _: u7 S6 }1 s+ T( h: K% I: uPrint
6 `& J$ c# |4 f& _$ Q2 _Print "X(" & k & ") = " & x(k)
3 `/ L8 ^/ o4 v3 cNext k: U. f) y( O$ S
Print "--------------------------------"
n4 e- E$ ^* J" TPrint "其中各行Ax-b=": S* m- M8 R) ?
Print
3 ]% v+ L8 Y9 WFor i = 1 To n
" J( s# S; H+ F: ?9 j& ht = 0
2 {. i/ }1 C5 r1 TFor j = 1 To n
8 t3 i, K7 d5 W, t4 _% @t = t + a2(i, j) * x(j)
0 \, ~% v! ~! P+ S, f* _Next j8 x% R7 S |! U6 }
t = t - a2(i, n + 1)9 F0 _! N' c! x
Print Spc(5); "第" & i & "行:"; t
* \% \* n7 [( g) XPrint
4 g1 U! n% H$ CNext i
$ d6 x4 Y6 O/ i* o0 S- T5 A( f0 H
0 `" u. R6 S4 lEnd Sub |
zan
|