- 在线时间
- 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() '高斯消去法
5 n, Y* L+ a" r& w" jDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single) H" f: I9 y- V* S" c2 c7 }
i = 1: j = 1
+ x# Y( |$ f9 |( C2 Bn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
! r* R& g" |- }5 h* }, oReDim Preserve a(1 To n, 1 To n + 1)
" x6 m- f4 V8 W# gReDim Preserve l(1 To n, 1 To n + 1)6 k& ]; `5 I) x) |! W1 m o
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
9 x( y# e6 S! AReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
9 ]1 A% O: \4 z) k7 J* N9 n$ \- BFor i = 1 To n
: `, M& @% e5 SFor j = 1 To n( C' O8 r# J4 q0 }/ O
a2(i, j) = a(i, j)! y% j% d0 k: v/ d8 Q7 U
Next
4 M5 A; O; \- wNext '将a()的值全部赋给a2()
5 E1 g! C5 u) w2 B6 p! z( Km = 0' K0 @. j: I, G( ^
D = 14 `' e/ \7 b! `: Z1 g& I8 Q
ReDim x(1 To n)9 w$ x+ _& ~/ I
Print "--------------------------------"
$ b% l) u, _4 i- P* r1 Z0 A0 UPrint "您输入的增广矩阵如下:"
g% W; r6 h0 C1 L$ N4 G. l( vFor i = 1 To n
+ a) \" l6 r! T7 O; ^! | gs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))% X/ R4 _' }$ i0 V/ d! B5 m9 ?
For j = 1 To n
" q- A, f4 u1 ia(i, j) = Val(Left(s, InStr(s, " ")))
; _* |2 ~0 g5 ws = Trim(Right(s, (Len(s) - InStr(s, " "))))
0 @6 H7 X' \: t% ~% M1 ?% E+ hPrint a(i, j);
: O' U! M; P9 D8 [9 j2 [1 J+ g; kNext. M4 P, _$ N7 g2 z
a(i, n + 1) = Val(s)# P: z. j) r+ g+ [
Print a(i, n + 1);$ X8 i [1 q$ q6 f" Z5 B
Print" g" q# e2 w3 ?. U: q; B2 Y9 r
Next
0 e7 `7 P% N9 s; B/ r( L* m( v3 B6 P+ w- @6 Y2 v, `
For k = 1 To n - 1 '开始消元
% p2 a+ t" w* E3 [, X0 a3 UIf a(k, k) = 0 Then
- \9 H3 k1 [+ {! o. r' xMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"- x8 z, \) ~ Y4 O# J e! J
Exit Sub7 m6 K N# d8 h$ ^5 q$ L9 m
Else b- l" T: a8 m" H, `) e. x
For i = k + 1 To n
* T, [: p! C. o- V) f7 U n# g$ z6 ? @l(i, k) = a(i, k) / a(k, k) v# s% R. V! G* m; j8 w9 Y
For j = k + 1 To n + 19 o2 i/ E$ d. H0 z# `4 K
a(i, j) = a(i, j) - l(i, k) * a(k, j)7 K; m! s3 [ G2 E5 O- q7 M
Next
G! x6 e0 j3 Q: D D% a7 n8 aNext
. K3 n3 u7 G+ sD = D * a(k, k)" [% @. c- F9 d4 R% Z* }5 m) t
End If* I+ J/ C) \3 D( N: i1 s
Next k '消元结束0 N% A+ }! p( H, F1 Z$ ~+ [/ L8 v
If a(n, n) = 0 Then
* Z! G. d; @# d2 e8 `% ZMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
$ U3 Z# A$ H! F/ X! i8 ^( A8 k! nExit Sub5 t8 e& K7 A. N5 u
Else: o- F' Z. B2 o$ \, \) g- X
D = D * a(n, n)( x, M5 q$ O& H- W. Q1 o/ b8 L
End If0 E& B2 X ^# H# s8 Z8 z5 F
Print "--------------------------------"
! B1 v; n- b! ~4 {Print "系数行列式的值是:"; D
0 i' D8 f& y. X4 cx(n) = a(n, n + 1) / a(n, n)1 ?# t( h; p* W# Y5 P2 X
For k = n - 1 To 1 Step -1 '开始回代
) H; _( p ]/ X2 m; b2 c v$ A3 SFor j = k + 1 To n8 S/ {; l+ m+ |7 k! n
m = m + a(k, j) * x(j)
6 V1 L8 v" s4 f( y) @# I+ dNext j
0 K* }! b7 V$ M7 I& S0 T0 c4 rx(k) = (a(k, n + 1) - m) / a(k, k)' y8 ^. {2 l2 I( n, ]0 x% e) f7 J
m = 00 ]& G# {3 n t) a) V
Next k '结束回代- x0 V O" G- u: H" @. h: \
# R2 Y+ s0 L0 ]
Print "--------------------------------"
2 i. {) c% F5 v& {Print "方程组的解如下:"7 z! }) M K5 F1 e
- u+ ^2 u/ T! h
For k = 1 To n
5 C* K/ d1 F% `$ VPrint
/ `! N5 Q' t5 l7 yPrint "X(" & k & ") = " & x(k)' z! J- d+ R3 J: h: O
Next k
! g& S B y2 DPrint "--------------------------------"+ s' ?% ^* [0 v* n3 S8 l! o
Print "其中各行Ax-b="
; |: e* O2 c3 A. wPrint6 I9 o6 s: X! {8 N/ @7 Y5 b& U
For i = 1 To n) K+ @/ F$ d8 T; h V
t = 0$ @: `& r6 J9 R
For j = 1 To n' \; Q" W' G. J4 D: x$ A" x( Y
t = t + a2(i, j) * x(j)
9 |7 r7 y( c% u5 \( n$ ONext j
8 f% V7 `0 h+ D3 J2 P, yt = t - a2(i, n + 1)
: C: C$ w: J- h* G) D1 HPrint Spc(5); "第" & i & "行:"; t& z8 V" N, R, s" ?2 ^
Print. o2 j1 }+ v8 Q, Y$ `& G. f" D6 H; e
Next i
- b0 y, `; h( l8 t: L
+ s) c5 r. Z2 [" O& eEnd SubPrivate Sub gauss_Click() '高斯消去法
, z' Q" E9 V2 Y# L& nDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
) M! P; Q4 Q" s1 i+ c- ei = 1: j = 1' v$ { S4 T3 d4 [8 X+ g( P. @( o o
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
$ Y' P7 W4 U: `. i5 D7 R! M0 @1 J* TReDim Preserve a(1 To n, 1 To n + 1)3 L, _$ g9 S1 N: L
ReDim Preserve l(1 To n, 1 To n + 1)
, g W9 [; M( m$ _0 J2 K1 ]/ b$ WDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single& t- N& R7 @- f4 e6 v
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
, X! r7 ~+ q+ pFor i = 1 To n
8 ^) t# V8 y; g p! sFor j = 1 To n. e$ d. }0 R8 [
a2(i, j) = a(i, j)
$ A; E1 x- `4 z7 UNext
, a. c+ M# U* }: rNext '将a()的值全部赋给a2()
0 X$ {! |4 q; h3 Pm = 0
0 ~# n+ D+ S* b" b$ r' d9 jD = 16 _4 E0 ?+ p' E3 j
ReDim x(1 To n)# b- b8 n1 f% c
Print "--------------------------------"
/ ?+ K6 F) M; p. B b1 ^) TPrint "您输入的增广矩阵如下:"
! `% b' G' h" n" t: t/ G/ pFor i = 1 To n
3 d8 \8 I. |3 S9 Z9 @s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
2 s9 \$ p# W* E* l- G5 YFor j = 1 To n+ x8 f5 p, b, c" C' h
a(i, j) = Val(Left(s, InStr(s, " ")))9 D" L3 v P. S) T5 f
s = Trim(Right(s, (Len(s) - InStr(s, " ")))), G+ Z2 D7 I0 G: e: V
Print a(i, j);
% X! a$ d5 G8 X; _: J- x1 \Next
/ S, h8 a% q1 d3 ja(i, n + 1) = Val(s). Q, B4 P% J _
Print a(i, n + 1);
( J8 M* t; c2 W6 c) W1 aPrint% H/ G1 y: c8 Y3 |+ b+ B/ i. ?
Next
% j9 v7 E$ j$ U0 d! C! R$ W6 x# {8 ^0 H3 ]+ R: I3 H
For k = 1 To n - 1 '开始消元
3 E' Z. x& O' W! xIf a(k, k) = 0 Then
4 q u7 Z. F' x- I* k+ d5 DMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
' \- d3 p( T ]6 c9 a- ~+ MExit Sub2 m1 j' J* [& w( {
Else t9 ~% S9 Y& d) [0 j0 K
For i = k + 1 To n: ?9 Q& A& O; z- T, k W$ @
l(i, k) = a(i, k) / a(k, k)
' U. |' y+ E1 y9 q% N1 XFor j = k + 1 To n + 1# I! a1 t4 O1 c( R$ B9 q3 w9 s
a(i, j) = a(i, j) - l(i, k) * a(k, j)
+ j4 b* ~' H* bNext# B1 l0 t. x. { m+ X0 p! i
Next
& \/ Q) [5 D" sD = D * a(k, k)
1 r$ G; A$ z# y/ h( [7 d( BEnd If# m" V# y* \ P/ O
Next k '消元结束3 w1 g1 Z5 I+ H) |4 ~
If a(n, n) = 0 Then. ]5 ?* m# e6 y
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
4 y5 U3 v6 ~1 X) P3 zExit Sub
9 X( e0 @* S: ]$ ?. X$ b' a8 {Else, N+ L9 M2 R" @# Q( O, _
D = D * a(n, n)1 X/ b( Y4 c* X4 V" k" W+ K
End If
9 Z0 T) N+ _% M/ T+ Y% q. u' U @ yPrint "--------------------------------", i7 N& d5 K, O, p
Print "系数行列式的值是:"; D
9 _' ~4 V( B- D3 F( fx(n) = a(n, n + 1) / a(n, n)9 U0 \$ \" Y& G7 U
For k = n - 1 To 1 Step -1 '开始回代
$ j) h* W. e3 f! EFor j = k + 1 To n
) H4 e0 S w* S* I1 U4 \m = m + a(k, j) * x(j)
) a5 H' p! [* I/ e% Z8 t: q( bNext j" d5 Z/ z& ?" ^/ ] ^5 v( [# z$ o
x(k) = (a(k, n + 1) - m) / a(k, k)
- O. H2 M8 H6 ^4 Lm = 0
# A7 B) C% d# a- l4 l; H' S5 T: G' }5 bNext k '结束回代- k: M8 j# n. x- x( j
9 ^" E# _: i; M: L2 x+ y1 t
Print "--------------------------------"
7 H" v- {' E+ j n- PPrint "方程组的解如下:"; @+ I. @, c W4 C
; s/ X( k& P6 B
For k = 1 To n) \/ @. P6 e( x+ M6 o
Print; ?9 F$ H" @; W0 d) h W9 ?
Print "X(" & k & ") = " & x(k)+ W. P( s. J6 X7 e
Next k: x. u& ~& K: u1 o* v4 e
Print "--------------------------------"' K/ E1 H/ O0 A! @, j9 A5 V8 K
Print "其中各行Ax-b="+ z E0 x; h+ L7 O4 W( B- y
Print; Y( j- F& ~3 ?5 L
For i = 1 To n
; Z, T" q7 o+ z6 _t = 0
- g% R0 y$ H3 T* t8 gFor j = 1 To n
! z4 T' j, k, Z$ |, N4 Dt = t + a2(i, j) * x(j)
2 L! B- @2 a: \2 E: J0 YNext j
# T1 d2 i% j! ~t = t - a2(i, n + 1)& C- Q- S3 s3 L t2 ]- K, T+ @1 S
Print Spc(5); "第" & i & "行:"; t- L5 W8 b3 q/ {% \( }& Z! E
Print
6 R# Q) Y4 k) m6 dNext i
3 v1 ]" E; ?/ z; W
4 A- L z7 e! b2 D- J; sEnd Sub |
zan
|