在线时间 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() '高斯消去法
' S/ B( A2 Q( R+ d! T Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
% o; _0 n) B* b* p% ] i = 1: j = 1
* N, N* j$ J0 M3 j n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
+ _" a2 ?+ c9 F3 U$ J ReDim Preserve a(1 To n, 1 To n + 1)
0 }3 |3 C+ ~5 g/ N; D& D ReDim Preserve l(1 To n, 1 To n + 1)) T0 M& z J0 I1 g
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single1 Q& h* p& B- f1 M, `: [
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()' d) Z: u& Z: P6 Z
For i = 1 To n
# x& m4 c* i7 I8 l0 K9 O' G For j = 1 To n _1 d9 d( j+ h8 f! B0 e' k
a2(i, j) = a(i, j)
% S% \7 j/ e; K4 d5 T0 a Next$ B( Y# j6 K; y0 H/ U0 O0 S
Next '将a()的值全部赋给a2()
) D# v) j8 C6 s, p6 g7 c) G m = 03 F1 g: u c+ i& e+ q! z5 W8 }
D = 1
# [4 ~* N( D' n8 k9 M3 Y. r' h5 y ReDim x(1 To n)% a$ W9 B4 t. @/ \- t) P
Print "--------------------------------"5 z- P" F2 ~( H" C
Print "您输入的增广矩阵如下:"
4 g8 K: V6 c3 r- Y: x d' E For i = 1 To n, u' o$ U4 R! m! P# y( x" Z% t
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
% u9 l- q) k! b9 `% b! D For j = 1 To n0 E0 S2 Q; x# M' ]) {
a(i, j) = Val(Left(s, InStr(s, " ")))
8 J0 H1 R) X# Q) k) U s = Trim(Right(s, (Len(s) - InStr(s, " "))))" g4 C1 z: G. i* U' _
Print a(i, j);
# z- N/ O) p9 K J* y3 ], t Next! q! ^' X9 n: e1 G7 V
a(i, n + 1) = Val(s)
% R% j7 [6 P, x0 ]" Y3 P7 J# f3 ^ Print a(i, n + 1);
) n; a- K& _! ~9 h) I Print, S( T I- C: h2 j* i t0 y# U
Next
* N N; ?2 ?8 _; b# I9 Z
9 s( ?, [3 [. C For k = 1 To n - 1 '开始消元
& ~& n; h0 T; \3 x0 H- l If a(k, k) = 0 Then8 Q4 ~2 [1 J9 H5 x' H: o6 P
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
6 [- i5 C8 ~. X$ z m( Q Exit Sub
" J! b5 n8 |, [- i3 J" Q, r Else
* A% M% t0 ^& r. h8 o% H For i = k + 1 To n) K, ?, h7 r' f# x; X4 ?
l(i, k) = a(i, k) / a(k, k) k/ g8 S' E6 W, Q9 U* K
For j = k + 1 To n + 19 h# K; u- R/ E2 S7 q
a(i, j) = a(i, j) - l(i, k) * a(k, j)
( P v c+ E ?) r Next3 H/ n2 g0 B; h: q4 P( \% D
Next
5 ?9 d0 F, U' m D = D * a(k, k)" P- w# _6 o, A' X4 o
End If
! A* G: _+ H* h( Q. u1 B& {+ x Next k '消元结束
4 J2 O6 u# y" _6 |! T If a(n, n) = 0 Then
4 }, j0 w$ N# B& C' J2 k u: B MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" m6 l9 b) F+ N) I* a- ?6 z
Exit Sub
, _0 ~. \: H) p, H( o9 ~. U Else
1 Q) w: }8 {* @* Y0 h' B2 ^ D = D * a(n, n)
' i) R& y1 Z6 h8 v. ~6 j8 U! ^, Y End If
5 A0 R: H5 x/ V" B Print "--------------------------------"* O/ y$ ^2 w& G0 i9 @0 P
Print "系数行列式的值是:"; D" u2 c2 ~% P( u8 F
x(n) = a(n, n + 1) / a(n, n)
9 S6 R) i/ E K For k = n - 1 To 1 Step -1 '开始回代
, U& Z' t- }" m9 J- R For j = k + 1 To n5 j# D$ B; T# T3 T8 n$ S% x5 F' S
m = m + a(k, j) * x(j)
* i. d5 u# I% Q) v Next j
; P% |$ c, {6 g* t) M; t x(k) = (a(k, n + 1) - m) / a(k, k)/ L8 X& S/ G7 A$ D6 [, Q! c' e
m = 06 s$ V+ \: m- g: r# \2 Y
Next k '结束回代2 @! }( s8 \, J2 j) O
4 s: ~) Y( j: w. n* B! _
Print "--------------------------------"% M7 T8 f {$ d I- d, ~
Print "方程组的解如下:"
$ H" E0 h& p8 n' ?, ` % o9 n+ D3 y; d) l* n
For k = 1 To n
% v8 I$ z: h$ G7 _+ s8 P Print
3 e$ i: p1 @ W0 L! G Print "X(" & k & ") = " & x(k)
* N! r% n7 u& Y Next k
2 \1 ?, h" `4 K Print "--------------------------------"+ F8 S g; d; W, g1 ?
Print "其中各行Ax-b="( S. T7 d& w" r
Print1 Z' k& ]" \4 P& K4 d2 s
For i = 1 To n
2 K5 {+ A7 b4 P A4 i5 P9 o4 i4 i t = 0
b" R- Q9 V5 w; Y For j = 1 To n
; ~0 l9 u( Y9 J8 c: ] t = t + a2(i, j) * x(j)
Y6 |: K' t6 l" C- I( P4 S Next j% n- l. c1 _4 e' C! g
t = t - a2(i, n + 1)4 ^, Z* L/ A; z1 U& Z
Print Spc(5); "第" & i & "行:"; t* l0 U# L' b& h) E
Print
8 R* M- x7 K& Q* Q Next i
( @/ G8 y4 E& r% B! a 1 x9 M+ h2 h6 M N: P
End SubPrivate Sub gauss_Click() '高斯消去法+ F& F0 y5 `0 t
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single+ D' b, }* R- z" a6 g% Y1 T6 g
i = 1: j = 1
4 D) J7 m6 h6 ]5 U! g' G- _ n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)). ]" E, u3 y7 O& [% e) d M6 y
ReDim Preserve a(1 To n, 1 To n + 1). I/ g O; l5 Y+ X4 w' t r
ReDim Preserve l(1 To n, 1 To n + 1)
( t0 Q0 ^: \. L& D! l Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single2 B T0 R5 q1 p, b" @
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
) s' h4 R9 L- G, t; j5 g For i = 1 To n& D8 Z7 {8 q. Q# r# u8 Y2 q
For j = 1 To n
( ^" ]. w+ P/ R5 B$ y* `" v0 w: } a2(i, j) = a(i, j)# m d! D! r: ~" n1 {8 |/ }9 r8 _
Next
6 g8 E5 t o: i! Q, }. C Next '将a()的值全部赋给a2()
. l0 a8 {7 S9 a- H m = 0+ Z2 w& P% ^/ {9 {7 B7 Q) x
D = 1# U0 n4 g7 A) x, {5 f8 m
ReDim x(1 To n)
% Q6 R; |8 m7 C7 M7 J- |( j% A1 \ A. A Print "--------------------------------"
k9 v X- L# ~6 A' g6 W" F9 a Print "您输入的增广矩阵如下:"
. J/ {- n9 ?$ x% [ For i = 1 To n$ _: M! h4 _' n7 X. m
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))& K, e1 P( w! u1 N z: s
For j = 1 To n- T( N8 D6 H8 T% s
a(i, j) = Val(Left(s, InStr(s, " ")))
! x! e% U- Z# ` j. Y* \( I s = Trim(Right(s, (Len(s) - InStr(s, " "))))
2 e2 Y, N: A! C3 E Print a(i, j);1 V2 `0 h, u! l/ E1 ~
Next
# o8 L$ r3 q) ]+ h a(i, n + 1) = Val(s)& W6 f( ?' p9 k# Z% J, x3 P6 G; p2 I
Print a(i, n + 1);
C+ L3 C, f; ]' ] Z Print
( i! }% I) Y V9 q! L" G8 t# m Next4 b# X) P( F ~) l( u
- o3 T+ x4 y+ d9 g
For k = 1 To n - 1 '开始消元
- q# c, |5 x5 O/ z If a(k, k) = 0 Then
6 ^7 e# P2 t; P, T$ Z# k+ F MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
3 d1 A/ n3 ]2 Q& B4 v. a Exit Sub
' J' b* C: {8 y; w5 m$ f2 j5 R Else8 [% J* O4 n( E& q/ [2 M
For i = k + 1 To n! t+ U2 g# u9 d
l(i, k) = a(i, k) / a(k, k)6 {) [$ ]; m* i8 I0 M. Z
For j = k + 1 To n + 1
0 @0 O. Y" {, ] a(i, j) = a(i, j) - l(i, k) * a(k, j)
/ P$ D. X1 [/ C6 S, s! _ Next h( f9 G; ~3 D0 O% \
Next; j, S3 q+ [8 U) B
D = D * a(k, k)
& V! ]. P" f8 @8 s End If
. g- A, O+ @: N2 q0 M Next k '消元结束
1 A( @7 X7 @9 f1 i$ j If a(n, n) = 0 Then! M0 }! {& a" B
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
2 W+ r% w, P0 G0 p6 k Exit Sub& r2 Q" \* x8 _5 j
Else
3 z4 \! T" o* G8 X! L D = D * a(n, n)8 L, d# W" I2 N
End If8 J1 m% A1 ?$ ?' ~: A& q6 }. ~
Print "--------------------------------"
; Y' {( D' j7 v# [, h# f! I5 { Print "系数行列式的值是:"; D
8 X8 @$ t! v6 T0 x$ @% B x(n) = a(n, n + 1) / a(n, n)
2 a( y( i% I* @ For k = n - 1 To 1 Step -1 '开始回代 I3 d# e! n8 U8 n
For j = k + 1 To n$ `3 v9 g6 U1 Z% c: q
m = m + a(k, j) * x(j)7 c+ G7 A* X9 o
Next j5 w3 q$ ?" P3 O9 Q& y
x(k) = (a(k, n + 1) - m) / a(k, k)
* A: v" \5 k- z, @& V9 L& [ m = 0
) ]) H- _( z2 g) w" Q" h! q1 R Next k '结束回代% o+ H4 a4 W9 _( \. I, R
2 y% y& o6 i3 w Print "--------------------------------"
3 t: s: \/ C: ~" ?( E6 Y. U Print "方程组的解如下:"4 s6 y0 d3 N9 Q- C; {3 }$ P
2 l6 w+ u" f5 t0 e) {. z0 J9 e For k = 1 To n. M6 |+ G" T G! o1 P* V' U
Print
; R- r; Y' G, x: m7 r Print "X(" & k & ") = " & x(k)( V5 Z( w6 p, H; x3 A
Next k
, _3 V" g, c2 K Print "--------------------------------"
8 z" I' m E/ b3 [( B) b7 A Print "其中各行Ax-b="( @7 E, D8 L& x3 U5 H" x8 z
Print* Z8 r) a! [- F
For i = 1 To n" { [, N* |, H A" y/ W C3 q/ X
t = 0( @5 _; d9 |* }, C: g# j5 O5 t
For j = 1 To n
! ~" | t4 o+ }3 d$ _7 w4 \ t = t + a2(i, j) * x(j)
: I6 R2 ]" |& V1 R+ Z Next j
. G$ ?' l/ n- n2 S V% U5 Q t = t - a2(i, n + 1)' L# l2 E V# k, l9 o' H: m6 Q g
Print Spc(5); "第" & i & "行:"; t
: H% E2 R! U* t% R8 @ Print" m3 J F1 B5 j; W) a7 H/ K% N# \
Next i
4 V: O7 t4 S$ g % q8 e5 G+ A2 O3 t! y2 C4 F
End Sub
zan