QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法  }$ U+ D+ f  I) }: ?
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
" `% H/ ~& f5 Si = 1: j = 1
! A* o" o6 n/ Mn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
$ C: m$ j2 I4 r4 M# ^ReDim Preserve a(1 To n, 1 To n + 1)8 k/ m1 v( v. W" ^; g+ e. A
ReDim Preserve l(1 To n, 1 To n + 1), L3 R+ _2 h8 @! f
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single: q7 F' o- L) c* r$ N5 p& S
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(). m: j5 G$ r+ n. K+ i! F$ e
For i = 1 To n
- Q' @' P( E" v' F. NFor j = 1 To n% j  i% D, H. O3 D
a2(i, j) = a(i, j)
- P) F; c) }/ b) E; [. D! H1 A4 gNext
1 O$ e2 h4 w. [+ u6 K( k% [Next '将a()的值全部赋给a2()# Q4 P/ J) d: _9 N
m = 0
6 O/ J7 v: f+ j# U6 UD = 1
1 Q5 B0 R, D( LReDim x(1 To n)
! S) \- m( B: V4 @Print "--------------------------------"$ |8 L% Y" C! x6 o6 j7 N4 n
Print "您输入的增广矩阵如下:"8 O; J* s6 ^: K
For i = 1 To n5 ~: p: k1 R! d/ O: _. V4 J
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))8 Z$ N. f( [" m! g' @
For j = 1 To n$ g" H2 F: \) R3 c( W
a(i, j) = Val(Left(s, InStr(s, " ")))' W* B: N2 t" j0 b" v, s* F% O2 Y, b
s = Trim(Right(s, (Len(s) - InStr(s, " "))))& q9 }/ E1 {( W" {4 f8 Y: I  X
Print a(i, j);( o1 e! c* ^! f# U" ?" n9 c
Next
' ]/ H# S8 f  e: ?2 Ja(i, n + 1) = Val(s)
9 a2 U! b) ^9 xPrint a(i, n + 1);5 X( }& Q' H$ W- @( h5 t
Print
8 t4 }3 ]6 r9 F# P/ A* E* XNext+ S% \9 l4 o4 Q; n( h
: N& I0 d) ~8 b
For k = 1 To n - 1 '开始消元, C$ A$ Y* D1 ]9 a0 A/ U
If a(k, k) = 0 Then) W( i1 H+ X4 n
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
0 K6 y6 F+ p( @1 B' k: GExit Sub* H( _* x) u5 Y1 }; b% G6 F& b
Else- I. w0 L  O& T% p5 ~
For i = k + 1 To n0 {8 t8 ^# Y, C  @
l(i, k) = a(i, k) / a(k, k)' r& z7 |  O% e
For j = k + 1 To n + 1  d$ {0 p( ]$ q$ n
a(i, j) = a(i, j) - l(i, k) * a(k, j)
0 i. F2 h+ I4 R8 [) TNext7 ~7 j3 k5 Z5 y6 I+ ]  b
Next% h2 f: M- m, z8 V% _
D = D * a(k, k)9 |1 M+ L2 h. H, O$ t- C
End If
& o- N2 J" {# B- c5 ^. u7 B- _Next k '消元结束8 w. a* R0 @; U7 y* e
If a(n, n) = 0 Then. M! ~' [" l  V! b1 l+ e( d
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
' a. t* {; R3 ?1 _' A, aExit Sub
0 q# _: }9 v6 @' M1 P% I8 D; ?; A! kElse0 ^- ~1 G! b; C/ V5 S( J
D = D * a(n, n)
  V' O  E6 n4 _. R0 e0 o0 O$ _. h7 vEnd If
  N: E0 f" F1 U/ VPrint "--------------------------------"
3 i0 `+ ]$ C% d, C% pPrint "系数行列式的值是:"; D
+ v5 S: q! o; [+ d! n- Wx(n) = a(n, n + 1) / a(n, n)1 w, U; i2 T1 F6 P4 f  d* ^
For k = n - 1 To 1 Step -1 '开始回代
, j) `2 Q& E5 d, U0 T9 s5 w3 KFor j = k + 1 To n
0 K- f7 U/ B* p+ w' y. I, K0 u# Bm = m + a(k, j) * x(j)3 L4 `: O- z7 C/ m+ D, L
Next j
6 ?9 e4 n1 n: l! h/ _# Dx(k) = (a(k, n + 1) - m) / a(k, k)( n; n% ?! i; X3 v
m = 0
4 T0 i5 h1 r8 J  j- qNext k '结束回代
7 b6 B- v* d; v! Q6 @6 }: l( }: s4 k7 q  e1 O! i( o
Print "--------------------------------"- w1 `+ @& ]3 o2 @" S
Print "方程组的解如下:"/ P# D! r8 X; h8 O* e! |
( w, ^( Y& F8 i
For k = 1 To n# l; u( J- F) @) A
Print) n7 K- y' V" g$ z5 T) p
Print "X(" & k & ") = " & x(k)
$ K. w0 z* R! n8 X4 [) a$ `Next k
: v" v5 C0 y, [8 ^- BPrint "--------------------------------"
  l# L( t0 P5 @; |Print "其中各行Ax-b="- ]! D1 _. x8 n; h3 x6 y
Print4 J" U% M6 B7 n# l" z1 t
For i = 1 To n
5 x; z5 h9 B* L2 mt = 0' N0 b2 r4 r8 o( J9 `
For j = 1 To n! ^: X* Z, [+ t
t = t + a2(i, j) * x(j)
* N6 V1 s1 |3 U0 b: R( n5 ~Next j
$ ^  O# v4 `, `8 kt = t - a2(i, n + 1)
' O% I9 P. f, v) G4 g/ qPrint Spc(5); "第" & i & "行:"; t
' w, x7 B# x$ l# s- N9 a) e. ^Print
$ d, i: t' x: l  Q/ l0 _Next i
5 E' F3 w9 {- l, _. A. D0 M9 ?/ a  \, l0 m
End SubPrivate Sub gauss_Click() '高斯消去法. L) y; u* ?" ~* t5 z
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single0 l. H0 q+ d0 p5 x  ]7 O
i = 1: j = 13 ~0 n% J" e, H( J. I
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)). J, G7 x/ F; ^; y# d1 ?, c
ReDim Preserve a(1 To n, 1 To n + 1)4 N1 T) a1 R; P6 M0 R! ^: B
ReDim Preserve l(1 To n, 1 To n + 1)# k1 p" X' m: T2 N# C
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single6 \6 ~6 `+ P" {8 d8 ~2 b3 U, T
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
9 {7 ~" E6 ^) N/ ?) d" A, e- [/ j6 tFor i = 1 To n
0 \2 w, Y! Q- g8 \" ?1 Z& bFor j = 1 To n5 P3 Z) [) _, R+ S0 v! F9 Z9 W5 ]# d
a2(i, j) = a(i, j)
; P) B- }( n/ t" q( V7 ONext. Z9 m/ l; n4 J9 l# b9 C( k
Next '将a()的值全部赋给a2()
5 f. Y6 v1 x& c3 xm = 04 z- c, ?( P% }  }" J" u0 c
D = 1) Z4 G7 l% V) E9 P. P
ReDim x(1 To n)+ ~% t: p" _: R6 }/ H1 k& s
Print "--------------------------------"
/ o" h8 Q7 P8 m4 @Print "您输入的增广矩阵如下:"9 |( o" [1 S1 J7 w4 O+ n9 f
For i = 1 To n% Z! _+ G% ?& v( L
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
/ b( k! j# k4 `0 q8 RFor j = 1 To n
1 f. R& @4 h& Q* G& Ra(i, j) = Val(Left(s, InStr(s, " ")))7 S# {/ a# @. h) k% |' b
s = Trim(Right(s, (Len(s) - InStr(s, " "))))7 E4 }5 W1 c" v" T8 l
Print a(i, j);
+ K. G6 k% o0 [5 g& Y/ I' fNext: @# N( R- G7 }3 l; _1 b& n! g
a(i, n + 1) = Val(s)6 \% [; @* a# G0 y5 Q2 ?, J) I( x
Print a(i, n + 1);8 X6 s1 ^- S- v/ B
Print6 G- a* I* V/ y* Y
Next
2 F$ r% @: X7 f1 q) U& w- l- `
' x. x5 w$ j% w% k4 a" \* tFor k = 1 To n - 1 '开始消元
, l+ K" h; a3 C: D+ W+ kIf a(k, k) = 0 Then
: p, Y  O8 c7 i% i  q$ A, hMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
& ]& q2 b' g: f0 V9 Y7 d6 Y! HExit Sub
' l0 r: W  j2 B! r: HElse
- k9 s! |% b% y/ Z& }For i = k + 1 To n
. C" ~/ e* l2 y) Q$ f! ?; p0 pl(i, k) = a(i, k) / a(k, k)
7 F' \% S6 g5 D% M& Q- fFor j = k + 1 To n + 1
/ q. R+ w9 y# `5 M. ^. b7 {# ha(i, j) = a(i, j) - l(i, k) * a(k, j)7 e( U" T* K0 U" G$ A! U
Next6 Y. z4 D" W+ f: p% `3 E3 I$ w% t
Next) f. ?! N0 G2 o! d/ I
D = D * a(k, k)$ w" h4 R- z' f0 w* B
End If
2 N! p% P! Y+ D8 uNext k '消元结束
: A6 ^' o8 k/ r& a$ q( iIf a(n, n) = 0 Then
1 J) B6 n. S. J( x8 l7 MMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"3 B% ^. T* |5 d/ V) \3 _% n
Exit Sub
7 g- Y; Q6 `1 E3 VElse
/ g# H, b' G3 J- kD = D * a(n, n)
" t- l' r0 y2 ^* A- m4 zEnd If
* f% G# Y3 t- ]- ]! ^% F0 ^8 C2 WPrint "--------------------------------"+ h% M$ s/ z& P  S
Print "系数行列式的值是:"; D; v2 O6 Y& A4 k# S2 ~3 b$ }
x(n) = a(n, n + 1) / a(n, n)
: p7 Z& F" E+ e9 f4 g. EFor k = n - 1 To 1 Step -1 '开始回代
; D1 E1 x+ `) t2 a$ |- V* l) qFor j = k + 1 To n
8 {9 {7 q' H* y  x6 m- [m = m + a(k, j) * x(j)7 ?3 e1 P6 z- C' ~
Next j0 p9 o/ t+ u  n0 u. l( V
x(k) = (a(k, n + 1) - m) / a(k, k)
8 @. N6 t! c6 Y' Y, X: ~m = 0/ J) D% D. h! Q8 `8 N8 \
Next k '结束回代
1 R" q+ D' l. {5 m
" ]2 W* T+ Q$ U2 x, i* tPrint "--------------------------------"1 ~2 f0 b5 x; S
Print "方程组的解如下:"
; P1 }$ ?" |& W7 {8 Z
5 I6 }2 O* B1 x) P- D; hFor k = 1 To n' p) _' x1 v( g: v1 U1 |
Print
8 O, X; N# R& y: TPrint "X(" & k & ") = " & x(k)" v8 w$ w, e3 [9 H$ G' e. [
Next k: Z' d6 a" m" l* y: B, L
Print "--------------------------------"5 m% k& ?2 ]7 C% ~) O; d" K8 k
Print "其中各行Ax-b="
* L. N/ u6 \& P" D& d6 L3 W4 n1 @. @Print8 P1 B) V0 a1 r6 O; v
For i = 1 To n. }$ U  a% F; L; Y( x: l
t = 09 V8 e4 ~5 D: g6 g# u
For j = 1 To n
1 b- p  O0 u7 r5 Wt = t + a2(i, j) * x(j)
3 H! e) ~% L& J1 a8 }& fNext j. Z' D8 E) T2 T
t = t - a2(i, n + 1)& x( N$ H; b# F) x3 u5 I
Print Spc(5); "第" & i & "行:"; t4 @5 U8 D" h$ ^- F
Print5 p. w8 W; o) b1 U4 h% u0 H
Next i/ G  y$ f& {+ {+ d

& W5 l7 L0 P% E. ]; f; DEnd 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, 2025-7-11 19:47 , Processed in 0.728788 second(s), 67 queries .

    回顶部