QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 17987|回复: 3
打印 上一主题 下一主题

[讨论]高斯消去法---这是用VB编的

[复制链接]
字体大小: 正常 放大
god        

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
: x  H" z- f2 X' Q. E' J, lDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
0 G3 W$ A& G$ i: n$ _i = 1: j = 1: h; P' P7 c/ z/ C1 _# h, F8 L1 o. z
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))% y3 O* m6 Y( H
ReDim Preserve a(1 To n, 1 To n + 1)
. c0 C; J; f- G7 I3 DReDim Preserve l(1 To n, 1 To n + 1)( Z8 C4 o* n4 {6 p+ p2 u* H/ q
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
) z: U& \! q* |9 C% {  s: YReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
" `4 V& Y" V4 w1 H' ZFor i = 1 To n
6 a: X) R; K5 c; ?+ m* [6 [# QFor j = 1 To n
& y7 s: O/ V6 p) P. {3 s+ Ua2(i, j) = a(i, j)
- n0 b6 a7 ~4 O/ a3 Q0 k; {& GNext
/ U+ [* k4 ^1 Z2 pNext '将a()的值全部赋给a2()
. B) \: \- [7 p: X9 tm = 0
! I. u4 K* y: ~$ U( cD = 16 l3 p" C2 P& W3 C( A: M' M" z# G
ReDim x(1 To n)
/ B2 E# y2 _( t4 z' SPrint "--------------------------------"
6 }3 Y8 H2 G* R- k! aPrint "您输入的增广矩阵如下:"& @, _! ]8 ~% l* d
For i = 1 To n
. i4 i; Y5 z7 b  C' w" o! O  gs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))0 ~* S, N. p) M7 b4 t) v) ^4 |
For j = 1 To n
1 Q* R2 M6 s- z+ b* \a(i, j) = Val(Left(s, InStr(s, " ")))
4 N* P; L4 y3 b7 T: Js = Trim(Right(s, (Len(s) - InStr(s, " "))))$ G2 f7 a; \1 G
Print a(i, j);5 k% e' Q/ n, [% a9 _- q
Next( \4 F( t* Y7 A+ D9 J5 ]
a(i, n + 1) = Val(s)/ }( W3 _& k9 y( I  }$ P
Print a(i, n + 1);
( z+ d9 h1 q! f3 [2 e9 iPrint& G: P$ \! A) C( L2 ^' i
Next6 C/ U% L" G9 |# X  m
: R' g0 _, n2 m' T( C  S
For k = 1 To n - 1 '开始消元$ M5 x0 J; @, K
If a(k, k) = 0 Then
! _; o) U, ?5 H- h: j1 j4 ?! XMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
% O. K" R' [" kExit Sub
* A, T/ G: D" O) {3 u1 qElse" @1 T+ N, t" U; a, h# o
For i = k + 1 To n
8 J% u" @1 l% `( I- m7 Nl(i, k) = a(i, k) / a(k, k)
0 |4 Z* B6 V, e8 {3 m+ N& M5 pFor j = k + 1 To n + 13 g$ _/ g  r/ Z$ k, `
a(i, j) = a(i, j) - l(i, k) * a(k, j)
+ l( [% X: Q7 I1 VNext3 \5 i: C7 u  {# E& @
Next% D5 j, @* d. n4 H7 Z
D = D * a(k, k)/ w* c  ?1 k( e' d( @% t
End If
) Y0 E6 v" }. yNext k '消元结束3 Q: R5 y+ N9 g/ s4 Q
If a(n, n) = 0 Then/ m# y0 P4 h0 Q) }" q, _
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"2 y3 X, f/ |3 g0 ^, }
Exit Sub
$ J5 @+ X- v9 qElse
# P6 M8 m) u2 B( I, a) L# p; a2 XD = D * a(n, n)) V. C4 N5 V( n# z: @1 j  j
End If
& v2 h9 u, X, L4 gPrint "--------------------------------"+ N, ~  c1 G6 n* e
Print "系数行列式的值是:"; D  d$ c% U4 e: d. n5 X8 }
x(n) = a(n, n + 1) / a(n, n)
, F+ [' P5 G8 r( U: fFor k = n - 1 To 1 Step -1 '开始回代8 V! H+ Q  k, b
For j = k + 1 To n
' O9 e$ A" ]/ O1 qm = m + a(k, j) * x(j)
1 }, X/ I/ w: B! lNext j
# j4 i) o1 t5 K" J; p: F" Hx(k) = (a(k, n + 1) - m) / a(k, k)' {) Z9 V& w! e; K9 ^6 h' X0 z
m = 0
, e9 T2 T3 P- QNext k '结束回代
+ y2 M" X0 h! B
2 Z! B- u4 @; S4 n) x' H! RPrint "--------------------------------"# o" Z) b9 k0 V4 W, ~. e
Print "方程组的解如下:"
- y7 @0 i9 f; r) R- U* G2 _6 [$ R9 A7 ~" i. S" ?; u, C2 I
For k = 1 To n( o: Y" z0 N' r. R
Print
; t# y% h$ |6 ^, u0 O3 H5 _9 @Print "X(" & k & ") = " & x(k)
9 i4 ^3 g  j- ]! x, }+ Y* }Next k3 E0 {  t0 n) ~* }5 z5 |: k% I5 @
Print "--------------------------------"' L, n7 {! Z/ u" F9 ^
Print "其中各行Ax-b="7 d. b# B, z; J6 C
Print
# i/ E' j7 e% ?0 ]. o# r) b+ V  rFor i = 1 To n) |% Z0 m2 b  J
t = 00 e8 i, H8 v3 c6 M
For j = 1 To n" w% K+ }6 k2 Q4 h
t = t + a2(i, j) * x(j)
+ L3 P( a5 h( x$ RNext j0 j+ b- y' t+ @: |" c9 T* {
t = t - a2(i, n + 1)
9 s' f7 j- X4 e1 \. y  HPrint Spc(5); "第" & i & "行:"; t
+ n6 {. ~* W6 @9 M6 FPrint* w: [+ W  M- \1 P& W
Next i2 E1 ~9 ?" H# u4 d' j; `. N
# x) G$ C! L- q- e9 z% F; P. D
End SubPrivate Sub gauss_Click() '高斯消去法
  A' l5 l$ Y7 j; l# N0 A6 q7 s6 MDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single$ x. s: i( _* G$ w8 ^
i = 1: j = 1
( g7 F- ~/ y; q9 A$ O( G) G2 R( S2 Qn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
7 d& j6 P# ]% c, B/ h$ mReDim Preserve a(1 To n, 1 To n + 1)
& h; S8 `! l$ V5 j( {- T' V% FReDim Preserve l(1 To n, 1 To n + 1)5 E) r5 ^5 y9 \1 j- y1 Z
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single4 _, G2 Y+ T: k. a4 O( h5 _0 N. ?
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
! c/ Z( q+ F$ n* {3 m/ DFor i = 1 To n% g6 O( O! e4 Q( s
For j = 1 To n
/ X& n8 _: b" s5 Va2(i, j) = a(i, j)$ P8 ?& ~  K$ J& }* {
Next& l9 w/ B4 A# U5 k" j! W4 N5 L& R+ z
Next '将a()的值全部赋给a2()2 @( b2 `+ K5 }# j& b& U4 }
m = 0
7 z7 ]" P* f* E9 a  F; FD = 1
$ E& \" n8 ^, j  c; _4 q. ]ReDim x(1 To n)
% Q5 c" W$ r( P1 L, b0 ?, Q: r6 a* qPrint "--------------------------------"
$ \0 k# x5 G9 [6 D; gPrint "您输入的增广矩阵如下:"% N. s0 m% D) Q+ s+ Z1 k! k
For i = 1 To n  ]. [- A: B% z1 l# b, {. B
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))5 E& R5 l" c2 V! d
For j = 1 To n
/ N' x1 a  T0 |a(i, j) = Val(Left(s, InStr(s, " ")))
) N: S$ U" E+ w- o2 J. q7 B0 O8 G# @5 Qs = Trim(Right(s, (Len(s) - InStr(s, " "))))
5 Q% g0 g7 X" W' h# ]. L+ H8 w+ ZPrint a(i, j);& h" J% {# k" P8 m  u  R8 e7 t
Next
) a2 i6 }" O1 q7 Wa(i, n + 1) = Val(s)
- r+ p; Y4 N" A3 r. Q! [Print a(i, n + 1);
8 ?; Z) q: t2 f  H* B8 w* mPrint
( p, D6 U5 t2 O+ P# s2 GNext, q, b8 J! h- }; g$ U" U
- f( d0 I1 c4 L5 n, S- C8 T) U
For k = 1 To n - 1 '开始消元* J$ }( @/ D" c  W. o! _4 a9 l
If a(k, k) = 0 Then4 j8 d! M$ j$ G& a5 D5 G* ~' Q
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
- O' V1 p% y: q# _( u/ ]  r4 QExit Sub
8 ~) w( F# U) g8 c; bElse
7 H/ W2 j$ y8 M7 tFor i = k + 1 To n5 |9 }9 {! ~& Y; m" m
l(i, k) = a(i, k) / a(k, k)2 t# Y. Z- `* X2 f1 Y% P
For j = k + 1 To n + 1; w7 r' _4 A5 a2 b# T' d
a(i, j) = a(i, j) - l(i, k) * a(k, j)
, n$ X2 y; R5 dNext
/ h$ P6 @2 I* A" E9 {- ]. [Next
5 q& H0 l: y, W% e, _3 I$ R- hD = D * a(k, k)
1 i* q* N- a7 E  d: m; UEnd If
; W- ]& B, e/ xNext k '消元结束$ i4 X" R# E7 k/ f
If a(n, n) = 0 Then
8 {' P2 V, i  a' x! Z) j/ D" mMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
6 T5 K1 E5 V  |* G! _Exit Sub* G4 \5 j: U* a# J! a7 c
Else
6 T9 N+ Q3 J# ]+ Y  ^/ j: p  d" w9 dD = D * a(n, n)
* i& p" Z! e" [- C7 ^8 Q& Q4 GEnd If: U( Z, L' }& |) Y/ f
Print "--------------------------------"
' ~, S3 Z  c2 ~" ?Print "系数行列式的值是:"; D/ I' I& a+ f  {/ l& f  r/ X
x(n) = a(n, n + 1) / a(n, n)
% q7 z% F+ V. K. ]& f# UFor k = n - 1 To 1 Step -1 '开始回代
5 V# c8 h& k0 Z3 t  F( D. ]For j = k + 1 To n9 Q" [  F! y; y/ w
m = m + a(k, j) * x(j)+ f  |& [" P9 O, N. N# F- d
Next j
) q) |) [" P+ J& h2 B; Tx(k) = (a(k, n + 1) - m) / a(k, k), m' _5 R: V- i+ H0 I: Z5 J
m = 0! ~! M9 E$ q  b9 o* y4 }
Next k '结束回代
& ^& ^' s8 X6 r! |, z: y
4 u" e7 @8 H2 J+ o; j; ^6 Q/ l! TPrint "--------------------------------"
- w2 {7 i, C$ F4 M/ \" g% {Print "方程组的解如下:"# b3 ~# b0 U9 R6 a0 ?) `7 @% |! L

, f: [) }7 @5 `# O$ ?, ]For k = 1 To n  ?6 B0 [) e% J* e1 Q/ u; r: p9 E
Print% a$ S. ?4 ]: b) n- E( r
Print "X(" & k & ") = " & x(k)7 H/ ^5 V( c2 k+ z
Next k5 B2 {& b* B+ u  `/ _) w
Print "--------------------------------"  p8 ^6 Y. s2 _8 q( y" p) z( ?- P  W
Print "其中各行Ax-b="$ [/ ?' x2 f# M9 _  F& S, Z
Print) M4 t& X8 j' \6 S- O
For i = 1 To n/ a( c* l2 R7 v& h  G" p# n8 N
t = 0; q4 T9 F6 r& u
For j = 1 To n! c& z) u4 `8 P/ j
t = t + a2(i, j) * x(j)
( V6 i) g9 ~/ I1 r2 N3 BNext j3 Y8 N2 @. m' m0 j0 C( k5 t+ ~
t = t - a2(i, n + 1)% V; H6 q  k- H# K, j
Print Spc(5); "第" & i & "行:"; t
1 n9 q4 M$ M2 `Print
0 e' R, Y; n" |. q! lNext i
& }' F! [5 a9 k" W8 h9 D0 o( e! O6 G" {( B; U$ M4 ?' P
End Sub
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
如果我没给你翅膀,你要学会用理想去飞翔!!!

0

主题

3

听众

22

积分

升级  17.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

0

主题

3

听众

24

积分

升级  20%

该用户从未签到

新人进步奖

<p>您的程序我没看&nbsp; 但是我用FORTRAN 90 编过 </p><p>唯一注意的是高斯消法是有局限的 </p><p>1计算量大</p><p>2不能克服病态方程问题。</p><p>不知道您注意没有 </p><p>另我有FORTRAN 90&nbsp;的选主元高斯消去法的程序。</p>
回复

使用道具 举报

zqyzixin 实名认证       

1

主题

5

听众

1818

积分

升级  81.8%

  • TA的每日心情
    难过
    2013-10-14 10:21
  • 签到天数: 78 天

    [LV.6]常住居民II

    社区QQ达人

    群组小草的客厅

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-7-18 02:38 , Processed in 1.102487 second(s), 67 queries .

    回顶部