- 在线时间
- 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() '高斯消去法$ F1 S9 o& I) }$ K$ z" c4 H! w- z$ Z
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
* s* d4 b+ \; \i = 1: j = 1
) D8 c) m2 Q' B* ^. ln = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# R3 T- L1 e, l; a: Q
ReDim Preserve a(1 To n, 1 To n + 1)
+ R9 N. y1 L& a. [/ U$ j: b2 ]ReDim Preserve l(1 To n, 1 To n + 1)
! U# W) K- v$ i. S1 V( ZDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single5 c( m# S4 x) ^; F+ y! F, s7 d
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()( r6 q; J8 Q# o0 R1 l. s- n# B
For i = 1 To n
" ~, U/ f# [8 z% o' v* NFor j = 1 To n1 m0 I2 S+ l; M8 s H4 F
a2(i, j) = a(i, j)
. `8 n2 I! O. A2 MNext3 n k# W8 A p. s
Next '将a()的值全部赋给a2()# ]; N5 P# m' f& }' a5 v6 d
m = 0- v! R* s, p& n% Z" ~! v
D = 1
( d6 r) T1 k8 yReDim x(1 To n)
% g2 w0 C* k0 J; Z' e. oPrint "--------------------------------"
' l! }7 r, K9 o5 x) qPrint "您输入的增广矩阵如下:"
6 E, z' h! @( O4 n: \2 hFor i = 1 To n5 b) t) L; Q9 }* R" Y- P8 D
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
: D: a A/ C% @- j3 {For j = 1 To n3 Z$ F9 V9 y. ^9 @
a(i, j) = Val(Left(s, InStr(s, " ")))
( y7 X5 [% L) s% Z6 Us = Trim(Right(s, (Len(s) - InStr(s, " "))))
* Y0 j& w2 ]0 `) c9 k( ?; t, q1 JPrint a(i, j);
& X# z; U/ @; K0 C1 Q( ^Next
1 D+ {' [% D0 B% D" [% Ta(i, n + 1) = Val(s)
K% T; u' Q/ P" A. R3 k; [Print a(i, n + 1);2 x& H8 _, p( ~, w( }: _% N
Print8 l; H5 b5 |8 L: j" `+ j! I& q
Next
2 k% s( S: U, Z, x
& g) Q) ?- D7 W1 D: I8 D, WFor k = 1 To n - 1 '开始消元
% V7 f. d3 g8 z' t9 G( \. RIf a(k, k) = 0 Then& d. M2 |& p7 A+ T* `0 D
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
0 X- ` ~( s/ sExit Sub
% N0 j5 v! Z+ F$ c4 DElse
% L% v* j6 v8 ?- \For i = k + 1 To n1 a* ]. ?1 W$ c, |/ H: y
l(i, k) = a(i, k) / a(k, k)$ z7 v! q- b% u2 l( b
For j = k + 1 To n + 1
6 ?. D& T2 `/ ?) J7 |$ Ea(i, j) = a(i, j) - l(i, k) * a(k, j)7 A2 i- T7 o2 ?4 B. [' U
Next
8 a% u2 ~. w" p/ Q9 n' B' Y& {" iNext& i8 M( o; [; t. G4 ]: |
D = D * a(k, k)
0 a) o( J, W0 REnd If
: y" x0 I% M6 @; b, v% hNext k '消元结束0 [: @, H" Q( J$ I1 h& d' n% i
If a(n, n) = 0 Then- i T u# Q7 b3 t2 a
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
: m0 n& L9 t" s& m$ S& W+ aExit Sub1 N! M1 {+ N' p0 w
Else
1 @% `/ x: z+ s* ^3 AD = D * a(n, n)
- t% s5 H0 D; r* g( h. g# EEnd If( X( H. Z) n) M6 e
Print "--------------------------------"
9 t9 I" l" _/ i2 D( XPrint "系数行列式的值是:"; D
: c" `0 q1 D) O( {9 gx(n) = a(n, n + 1) / a(n, n). |" E, o$ s7 y/ A! t
For k = n - 1 To 1 Step -1 '开始回代
8 W' R2 |. T( I lFor j = k + 1 To n
& g0 u4 C8 v8 |$ }m = m + a(k, j) * x(j)
+ k$ e) }2 ^) XNext j/ o8 _* ] r5 J8 \5 m
x(k) = (a(k, n + 1) - m) / a(k, k)
Y) @" N% P$ e Wm = 0
1 t& {: E# K) v0 p0 X) \/ v4 sNext k '结束回代% X+ \5 H n" e- c
+ d! o" S8 _5 G. c# t, pPrint "--------------------------------"
. K5 [6 X( D9 W1 V9 M3 B# w- S1 APrint "方程组的解如下:"
. s: L, E5 \4 Q3 R/ i* {2 d- D
' U! ~4 E& ?8 e) u# E! W3 wFor k = 1 To n9 r* m B- p2 i# t
Print
) z, W" U& t" K/ \1 j1 u8 s3 {Print "X(" & k & ") = " & x(k)
4 c/ w0 x5 ?/ X+ X& sNext k
2 G. I8 M" Z5 r$ o5 V, gPrint "--------------------------------"
% h4 d/ Y9 W5 ] Z; hPrint "其中各行Ax-b="# ]& p# w6 k& m* H
Print3 t+ y: U1 ~4 `" G4 R2 k
For i = 1 To n! C% ?/ R" s& d$ {$ N
t = 0
' s# n* [6 S2 G9 bFor j = 1 To n
( M4 X! Z$ b/ h' u7 b/ Pt = t + a2(i, j) * x(j)
9 j4 q1 d5 j, q' {) k/ mNext j
+ Q' b p' k e, [* Xt = t - a2(i, n + 1)
+ |; I0 ^! d2 @ u7 {' kPrint Spc(5); "第" & i & "行:"; t
: I5 G. C) r" U4 L* d+ }Print
- r4 z) }' I8 p# h: v) i0 k, aNext i
7 {2 i# d) y; K C7 }& n9 f# X2 M) w8 c2 j
End SubPrivate Sub gauss_Click() '高斯消去法
$ }+ G. Z# m5 A: A5 c! V2 }Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
1 W0 e) e3 T4 u, Y" s' mi = 1: j = 1
- E4 t7 }" [5 O- x, n, P6 Kn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))( t0 ^8 t7 L7 ~( z- j+ \ V+ \1 T
ReDim Preserve a(1 To n, 1 To n + 1)
! `. Y0 E: `! F$ T( eReDim Preserve l(1 To n, 1 To n + 1)' N' N- r, }7 B. j! ^2 a7 n
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single' B. D4 I6 H# G" i2 V7 z0 j& o/ {/ h
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
4 v, j+ G0 p4 v; d8 s. BFor i = 1 To n
, A2 ~" A: H* j4 p t( SFor j = 1 To n& t9 p/ R3 S7 y; n
a2(i, j) = a(i, j)' n- v* R. @3 U* q Q. P- v- K
Next
9 w% O; z2 G$ @% M" V0 VNext '将a()的值全部赋给a2()
/ \2 p- }, {* h, R$ Km = 03 y3 Q5 f; r. e
D = 1
! I3 {0 b% a* vReDim x(1 To n)
9 g3 v. F3 x! r5 [5 zPrint "--------------------------------"
' _; N; O5 D5 m6 cPrint "您输入的增广矩阵如下:"
* U; L' i2 W$ CFor i = 1 To n- `7 y6 }) X2 e9 d+ S& ?3 ~$ N, W
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
7 W3 h! h4 g, l$ fFor j = 1 To n% \, ]3 M; t; l
a(i, j) = Val(Left(s, InStr(s, " ")))' k& t- t7 N. b `" Q8 q# [( X
s = Trim(Right(s, (Len(s) - InStr(s, " "))))# @, i3 x1 O2 ?$ T+ ~
Print a(i, j);
6 ^3 K- ^) R# dNext
5 L: {" g+ J. @& v8 M6 w8 Wa(i, n + 1) = Val(s)
% ^3 z8 \ O. t0 e* E, `+ cPrint a(i, n + 1);8 K* X' q- M. w4 R
Print2 N9 ^: Y/ {' ^4 w/ X* r1 R
Next
\# q! O% m1 c# _) o4 G: |
8 I. o+ A( j" x9 a+ XFor k = 1 To n - 1 '开始消元
, L# F! |5 L1 oIf a(k, k) = 0 Then
5 m" o7 L$ | ~7 ^MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
( p, [* S7 ]) e2 X" EExit Sub
/ _/ ?7 `. z" Z8 M' BElse
& W' y6 _ S) vFor i = k + 1 To n$ \! f8 m" x4 `% C, j" i# g
l(i, k) = a(i, k) / a(k, k)0 g6 `- g+ e/ |- q$ a
For j = k + 1 To n + 19 t8 ^! \; }3 v+ |$ P4 o# O# {
a(i, j) = a(i, j) - l(i, k) * a(k, j)0 r! J; W9 m1 ]' M+ l
Next
# W- s! ], t8 d* SNext
x6 L9 P8 U8 ^/ ~1 e; r6 |0 S' N. M9 uD = D * a(k, k)
' `% Y' E% B3 r7 @( q) O5 aEnd If7 {; t* A2 ?; v5 E _
Next k '消元结束
, \$ v/ `$ j6 pIf a(n, n) = 0 Then/ ~; e" J- M ]% q- _" f2 d! n
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"* E6 j6 B/ y2 M, u
Exit Sub7 a, P( d* Q$ T3 w, X* |
Else
- ]3 u; }) O7 PD = D * a(n, n)
, l; ]3 @" r/ u0 `& A" {& _2 sEnd If
+ e5 S5 x* }5 f& |4 s' n8 kPrint "--------------------------------"( ?* |0 O5 F5 x& U$ _; f
Print "系数行列式的值是:"; D
$ E. U0 R& n/ `+ l- r" Ax(n) = a(n, n + 1) / a(n, n)
% U0 K; ?; T6 h1 W' j/ l8 VFor k = n - 1 To 1 Step -1 '开始回代
" w9 E6 R: m+ r% S& BFor j = k + 1 To n
8 \ x! \6 l) H7 q- mm = m + a(k, j) * x(j)& _; g0 M$ G) V, Z
Next j+ B" [- Y$ H9 \4 G+ G! r
x(k) = (a(k, n + 1) - m) / a(k, k)
! m- X9 W5 g/ nm = 0
" h% l9 f0 N' y5 R- }( SNext k '结束回代 T! j/ N e" o1 a" w* Y' w. f7 ?
: z( Q n) S3 E1 A# Z# d; j
Print "--------------------------------"
! u; @+ F, d7 w' O. xPrint "方程组的解如下:"
' e" T( U7 N8 B) a& f
+ e4 T. t; h. T, h, L" X$ y- s% U6 wFor k = 1 To n
3 ]* j5 s. [& O. O, PPrint6 w; O" \ y3 H" D, A" N( B( V
Print "X(" & k & ") = " & x(k)
) N' D( N3 T8 `& sNext k
/ T- t0 N& x% L+ `Print "--------------------------------"" P9 @4 t1 }) x
Print "其中各行Ax-b="
+ E! z' u& _! w0 ], t1 ^Print
3 p7 p. ^$ O4 WFor i = 1 To n/ i. m5 i5 G8 g/ p
t = 08 }! @4 C- d# X6 Q
For j = 1 To n; U# J# k9 Q# k
t = t + a2(i, j) * x(j), l9 [- y* }* ^# F8 t
Next j
2 b3 r. v$ @/ [. V2 ^t = t - a2(i, n + 1)4 v, l- G' K+ n/ c U
Print Spc(5); "第" & i & "行:"; t
# r% M5 n& `) f$ \* pPrint! i' e8 |1 l4 r) C
Next i
' n. y# T' X! b
+ U# x! p! |. _% F# S! mEnd Sub |
zan
|