QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法) S% m' s! a; c0 a4 d& W! T$ ?( L1 q
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
' a5 g! v1 \$ c! y7 n4 ci = 1: j = 1% X; \3 `- {- L2 @+ z
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
) _6 t9 |% m( x+ l  ?8 tReDim Preserve a(1 To n, 1 To n + 1)
( ]: z' W- E; b6 K6 @ReDim Preserve l(1 To n, 1 To n + 1)
) ^4 S) ~7 q- K$ aDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single: d, ^) ~2 W1 t2 F* r
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
! R! p" O+ q2 R1 WFor i = 1 To n
- ^. T5 n+ i$ m) rFor j = 1 To n
% X: ]2 s* s' r; ya2(i, j) = a(i, j)6 v5 T6 I7 f2 y* _
Next& ]( [2 M6 p, ~! t6 t7 s
Next '将a()的值全部赋给a2()  n' F- A" @( _+ n9 \( q) }; {
m = 0  {; C/ s1 }3 B
D = 19 z; f% r) [4 }; C3 A
ReDim x(1 To n)2 h. ?3 T$ N* o9 H0 l
Print "--------------------------------"
1 r5 M/ L  Q( X  n3 n) X6 kPrint "您输入的增广矩阵如下:": A; [- _: I5 t  V2 C, @' w
For i = 1 To n+ O4 L2 |9 R" v. b9 o& w
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
: T1 s  f, f+ i  mFor j = 1 To n; `# u" s3 B' W# w, K; `3 L3 ?
a(i, j) = Val(Left(s, InStr(s, " ")))
! U$ ^9 B  p$ n- m- I' Ss = Trim(Right(s, (Len(s) - InStr(s, " "))))  U- F/ f* ~' ~: c1 ^
Print a(i, j);
* _7 x$ Y! L$ H! B: DNext- Q: W+ E' y, z5 @. h/ t
a(i, n + 1) = Val(s)7 ]( k, U( [+ r+ v6 q
Print a(i, n + 1);
4 r6 q5 e* w9 t0 J* z9 KPrint
- P; Q$ w3 w9 b3 Z/ f8 cNext+ x1 Q* t# Q' y

2 g& w. u4 o7 H5 W1 c+ ~' ~0 dFor k = 1 To n - 1 '开始消元
+ Y8 k0 }8 z5 Z! }! TIf a(k, k) = 0 Then
, q/ p6 j% B. Y/ gMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
" l* |6 B' i# V; GExit Sub
6 P: b2 @' z' s' e2 YElse
8 j) Y# _$ c8 r' ^: e: [For i = k + 1 To n
! m8 _) ^8 O, b5 bl(i, k) = a(i, k) / a(k, k)) |1 `8 s  p& [& N
For j = k + 1 To n + 1  k# p. Q5 ~5 x8 u0 X
a(i, j) = a(i, j) - l(i, k) * a(k, j)
6 T( d1 n# W7 s+ F: Z" s' \1 M. qNext
' e7 I7 D, e: E) FNext
9 ^8 S( c  B5 t) ]9 G; Z' n# M8 xD = D * a(k, k)
3 ?, W5 y& X& @' QEnd If8 L9 o- b! w6 ]4 x& B
Next k '消元结束' [1 f6 \) N6 J+ @& H3 U
If a(n, n) = 0 Then
, E8 }  m9 e4 U) o2 hMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"7 E) \5 C6 t. [0 h+ }( O# _! E; P
Exit Sub  R4 \- g9 v1 t4 ]( q9 m9 }8 A( E: B
Else$ L/ w/ z3 `7 S2 K# c2 U) C# Q
D = D * a(n, n)
. U, w) B* _. A2 x# ?' w! JEnd If
6 q5 m/ A. |: hPrint "--------------------------------"" m/ R/ C7 a7 t
Print "系数行列式的值是:"; D
2 d$ B! `  y- ~4 mx(n) = a(n, n + 1) / a(n, n)
1 T0 D0 E( i# A! JFor k = n - 1 To 1 Step -1 '开始回代% r0 `. y: I2 n( G1 e, r0 _4 W6 R' t
For j = k + 1 To n
9 }0 @9 \% c6 j( H# k' N/ Zm = m + a(k, j) * x(j)/ G" g# k$ P; m- ?
Next j3 C  U5 N. Y+ e
x(k) = (a(k, n + 1) - m) / a(k, k)8 E, R7 `- K8 q9 V, A5 [: q
m = 0
! J6 z- a+ k. g* s2 ANext k '结束回代& ]  r$ M" b( W1 D/ B# v) h
4 f1 m! g9 w( h0 ~7 \" F
Print "--------------------------------"
, g# b% N# p0 h2 ~Print "方程组的解如下:"6 S. ^- u% n6 b- g
: b+ o/ i. S% Z% g
For k = 1 To n  `1 j; P) s3 b2 K" k2 b% \/ I9 }
Print
5 H' j( r% a2 C1 w2 U3 z; rPrint "X(" & k & ") = " & x(k)6 [# W# _  l  Q) {9 d
Next k
6 z* h0 V% u' k" N+ O; q4 GPrint "--------------------------------", t6 X+ p  [5 d* j5 J6 ?7 Z% S& b
Print "其中各行Ax-b="
5 y3 D. \- J* Z  A/ i$ Q+ Q% ePrint* _& s7 T. T( E  b: T& q) b9 y( e" {
For i = 1 To n# F* U' T- ]4 H2 d
t = 0( }5 D, e5 L: Z6 `
For j = 1 To n3 r0 H4 D- }6 k9 k  Z  b
t = t + a2(i, j) * x(j)
5 V$ H# I  E; n6 c" K$ l3 }3 ~) a; XNext j
  O. B" y, M4 s# p' W& m0 J- Gt = t - a2(i, n + 1)/ H- f9 q% p5 H/ r* @/ |% B
Print Spc(5); "第" & i & "行:"; t* y& `* f+ f- k5 I3 @- a
Print
6 v$ d$ R7 L  Q* b" O, tNext i
! X# G9 I) N# u6 F# G3 r5 F7 {7 |' \6 H$ O4 \1 _& o- _
End SubPrivate Sub gauss_Click() '高斯消去法* y( N6 `) V9 W! \8 Z
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
# p7 g2 B+ |5 `- @! ?i = 1: j = 1
, m9 I  {: N1 Sn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))- o, Z! j+ M  I7 Z* o% {
ReDim Preserve a(1 To n, 1 To n + 1)9 `* R; C5 S) V; ?# K# t* n  Q
ReDim Preserve l(1 To n, 1 To n + 1)
+ E7 E# r% |6 I1 H  ]Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
: y. c. i4 E/ d5 b' wReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
% w3 f! ?; C, k" V/ r' ]7 {For i = 1 To n
: U8 |% y. [' F; j1 V: g1 f2 kFor j = 1 To n
" L! h" A9 ]/ o  ~4 h' Ka2(i, j) = a(i, j)
- d- }* c& z3 s. {Next& a) D- y! l( R7 ^: Q$ B5 T4 u
Next '将a()的值全部赋给a2()  T; r5 x7 \% E
m = 0
* H7 \# w+ N: _; tD = 1
3 d" o" W3 ]9 t, M& H4 h3 mReDim x(1 To n)$ ~1 w3 W. e1 J# R' b8 F; x
Print "--------------------------------"! d5 x3 t' x1 D+ b0 C
Print "您输入的增广矩阵如下:"; a/ ~/ l; \( b8 q  ~) F
For i = 1 To n1 t1 C0 @0 q4 S8 C
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
. J! S; E# X) ?% v& v; T( \For j = 1 To n
! V& Q9 x1 ?: l% d$ h+ j  C+ qa(i, j) = Val(Left(s, InStr(s, " ")))
6 u2 p5 R! D- B! Y" ~" \# es = Trim(Right(s, (Len(s) - InStr(s, " "))))
& Z! G6 V0 c; x6 uPrint a(i, j);1 q& T# V6 h4 T) h( P8 e/ Y
Next! }5 \! I4 u8 z+ x
a(i, n + 1) = Val(s)1 o' s* V4 x7 A2 D5 B/ w( R. M& w
Print a(i, n + 1);1 e3 s7 v/ E$ V4 ^) p8 s+ c
Print
# \1 t% i; F& Z' t' V$ GNext
0 o6 P* {' I, G# ~6 R8 ^3 T) q# K4 |- C1 G( \& Q
For k = 1 To n - 1 '开始消元
2 @6 F" S% r3 v; ~& x: lIf a(k, k) = 0 Then
  H; |* [6 B% e; {MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
+ v+ B+ T' H. HExit Sub+ U) j* ^- q  V: m$ z+ @# ^8 m
Else% ^( J# e& M5 a5 Y% g) K! R7 U
For i = k + 1 To n
) G# k$ e- o  Y: B, Yl(i, k) = a(i, k) / a(k, k)
/ U% L: `9 Z3 m, T: OFor j = k + 1 To n + 15 i' C5 [6 Y" f+ w# f' a! b8 f/ `
a(i, j) = a(i, j) - l(i, k) * a(k, j)
3 }+ `0 _. N6 s6 R" z$ P8 K3 h) `: H/ ^Next( i% H7 a0 B1 C- C: n
Next8 g/ v% ]- j, G! \/ P
D = D * a(k, k)# R* J2 j* ~8 z; z9 l" _& g" S. y! K
End If+ Y" D" [6 N) T' [! u8 q
Next k '消元结束1 S9 q' _$ A$ m* ]" M& Q
If a(n, n) = 0 Then) F6 q  e* F' S& f1 l
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"! [" L& y) P0 m3 p& h# Q% T
Exit Sub- i' ]$ B6 Z( P3 _7 A
Else. _  T9 C  r* x- Z3 ^( [0 \5 i" n
D = D * a(n, n)
3 Y# y$ v8 }, M( `3 a, @' }% [End If
) J' O5 v3 m3 ~+ o% ?! gPrint "--------------------------------"
# q$ u( Z  h0 a' ~# _( p% a8 CPrint "系数行列式的值是:"; D
0 \$ b/ w  N, H7 T) vx(n) = a(n, n + 1) / a(n, n)" g: [' l' Y& r/ [8 {' e: @
For k = n - 1 To 1 Step -1 '开始回代$ ~" l7 {9 @7 v3 p0 }9 l
For j = k + 1 To n
% J/ b. g/ a0 um = m + a(k, j) * x(j)# }- `1 F6 [; c9 z4 G, ]
Next j( e: ?) _1 Q$ J0 ?; T. |
x(k) = (a(k, n + 1) - m) / a(k, k)
) r$ i( X: h. G* ?- Ym = 0: z6 a/ v5 A) Z) y$ U2 t3 ~
Next k '结束回代
- a" }/ E% u# X, X+ G, i( G) c; ^8 }0 L0 y/ ]  T
Print "--------------------------------"# Q% V  l( H4 B; K7 F
Print "方程组的解如下:"  E- h, u, H1 R# e) h% l
0 {3 Y0 j8 t: t; d6 s: k7 U4 y
For k = 1 To n* S- W! D$ G7 h
Print7 y, ?6 S# N7 F
Print "X(" & k & ") = " & x(k)
3 ^( [% f9 k1 p+ c$ t# `9 c1 hNext k
3 \1 Q# r. G0 K; u( RPrint "--------------------------------"6 `8 t" T8 s8 m
Print "其中各行Ax-b="
* P# Z! p  W  {' m) C* MPrint
" Y% o3 v2 Z" j+ ]4 @For i = 1 To n' t6 }( q0 I6 ]8 H- u- p7 E! D  U/ @  B
t = 0
9 o4 F4 f( W' h3 g2 S* j' GFor j = 1 To n
) d0 V+ y2 u- D! |* b( C5 |" e! [t = t + a2(i, j) * x(j); g; O! \- z. Y5 A) w  N
Next j- R' j, F6 \- C4 f
t = t - a2(i, n + 1)5 W* M+ |% ^* U
Print Spc(5); "第" & i & "行:"; t0 v% }6 F2 j7 i: k5 k- E( l
Print
' q* B8 K$ e( o- X5 e) g! K1 ?5 Z  YNext i5 h2 \% V( ]- u9 I

  v- b* }4 r) s' x0 f0 Z: j) P: P( a. VEnd 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>
回复

使用道具 举报

4#
无效楼层,该帖已经被删除
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, 2024-4-25 03:47 , Processed in 0.505425 second(s), 73 queries .

    回顶部