QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
5 ~( J1 D# S! r" g; CDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single& o* q6 z' C4 r* H
i = 1: j = 1
5 i2 ~0 y0 |4 s$ @9 G) p2 [n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))! c7 o; |+ W! E" X- V, Q% a
ReDim Preserve a(1 To n, 1 To n + 1)/ z6 _# U( d( m2 c: F% M! H& O
ReDim Preserve l(1 To n, 1 To n + 1)2 a' E! |7 |7 [9 O& Q/ S( E& ~
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single- P$ \  h8 C- b6 s5 Y4 Y: ~
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
. u, i! v: x4 r! [( {. j: bFor i = 1 To n- y; r( Q3 _3 N& }! C4 d
For j = 1 To n: b5 _' X4 ?* q; |% |
a2(i, j) = a(i, j)7 Q( ~+ q/ y0 T5 |5 k
Next0 _+ h( H+ _- t! l$ t8 @- K
Next '将a()的值全部赋给a2()
9 j9 x: T8 u8 S4 o3 Em = 0
5 l2 j  |, v) N( s0 GD = 1
4 ~3 L  O# A( C+ kReDim x(1 To n)
/ p) @9 u6 I& M" W+ G! H7 l+ @Print "--------------------------------"# g. k1 [. ?' c& ^2 z
Print "您输入的增广矩阵如下:"8 P5 u& ^9 [& a5 n
For i = 1 To n
- C  @  p" U4 A4 [$ ]9 `s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))/ `: R$ `3 v  b5 ?
For j = 1 To n
! A  Q. B  u( Y: r# ia(i, j) = Val(Left(s, InStr(s, " ")))) ]" w% m/ @: m% j% N
s = Trim(Right(s, (Len(s) - InStr(s, " "))))% l7 q1 D7 X  s3 t
Print a(i, j);
& k% D' p6 b8 X" uNext
2 L- N: t4 }. Q3 ]+ Ja(i, n + 1) = Val(s)- S, \% N$ o5 Z/ z
Print a(i, n + 1);( F" [7 H: }% J% F6 G0 w- s: M9 v
Print
# R8 U* G. m( U/ B1 A4 MNext! M+ |. S# \& D# Z. {- Y" {1 V

; z9 X; K$ }5 E' W; S. DFor k = 1 To n - 1 '开始消元
  G& z8 Y- k9 c+ j2 R/ o* i# {* XIf a(k, k) = 0 Then
5 Y' O% @/ W, e9 Y+ ?# f. OMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"! X. A& e# D) ]7 Y, c
Exit Sub
1 L9 Q0 |" y8 N* I/ F3 wElse: i+ ~; b5 @( \
For i = k + 1 To n
% s: a- Q; {4 ?) ~  @2 _2 Zl(i, k) = a(i, k) / a(k, k)# T/ Q- w# N$ A3 ^5 D1 M7 Q2 M" S% a
For j = k + 1 To n + 1
, a. @! L8 H9 A- |: M4 X. Ka(i, j) = a(i, j) - l(i, k) * a(k, j)
6 J& v# a. B1 {! L0 `# D, DNext! E: _6 H: O) X" u# q7 N! }0 O
Next
2 o2 Y" X2 J4 M6 D  J+ H' Y0 RD = D * a(k, k)
% J* o( S& w3 [0 J/ E% F" p5 b; ZEnd If
) T7 [& m6 D# UNext k '消元结束
2 e5 b# R) [, k5 Z+ G/ ~7 xIf a(n, n) = 0 Then2 f" }! I! a0 @1 y1 V
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"5 |' m# H* p( [% z$ t
Exit Sub
8 L. H* ?& {* S7 x, ^* X4 {Else
; d+ L* ]( S3 ^% BD = D * a(n, n)0 @4 t1 h7 G7 I, Z9 r' B: P! r  y8 c
End If% d- C8 E$ \5 M7 c$ k
Print "--------------------------------"
# s7 D1 X6 g" a" @) fPrint "系数行列式的值是:"; D
; {7 B( x2 m& N6 c, P0 h/ Y4 ?& [x(n) = a(n, n + 1) / a(n, n)
: D5 T/ y( l. M& LFor k = n - 1 To 1 Step -1 '开始回代
: a& C9 a+ f4 z: \8 H2 l% ~For j = k + 1 To n
5 ]/ |$ i3 c0 Xm = m + a(k, j) * x(j)
2 ~! `1 T& n" qNext j
1 }$ D% J* ?, s  Y7 tx(k) = (a(k, n + 1) - m) / a(k, k)
& u) ?1 F) c% Q. Y$ E* ym = 0# a9 s( m7 A# G- ]
Next k '结束回代" D; R* s! N, X
) ~2 H, V7 ?7 y- O
Print "--------------------------------"
* ^3 s2 |: l! R8 O1 H! \7 yPrint "方程组的解如下:"' m& e& M4 _7 a3 e' e

! k3 R8 F) z! j8 C: IFor k = 1 To n5 c; b  w  C% z2 ]5 j# F/ y
Print% w! z/ ]; {7 G$ {8 G" [
Print "X(" & k & ") = " & x(k)
+ d3 ~7 h+ Z2 @* a  i; @Next k7 {) ]& s  f! G: w# ~1 T
Print "--------------------------------"
; k- @+ ~$ o" UPrint "其中各行Ax-b="
. q: E1 f; [2 Q) {- [7 {4 `3 K. MPrint
) y6 M* x/ Y8 D# D0 QFor i = 1 To n8 w, P8 B3 x, K. F, l& O- W
t = 0
" M7 c* E/ B. |* K, _8 RFor j = 1 To n
4 M! |( y' A/ l1 |- @8 Z& Ht = t + a2(i, j) * x(j)
; m1 _, m! H7 r& c7 P" T0 jNext j
1 F' l, p# e1 z6 jt = t - a2(i, n + 1). x/ P; z* u2 t  Z( ~5 W  z. F* w4 Z9 K9 _
Print Spc(5); "第" & i & "行:"; t
7 \: ^3 i# P# iPrint
4 Z# r( Q3 v9 P0 l, @& Y. aNext i
9 ^2 r- Q+ f2 y3 P0 {- _6 f; n* O# h* i/ K6 H; h" Q. z
End SubPrivate Sub gauss_Click() '高斯消去法
" p: H5 Y6 v: p8 w  V$ z$ k5 bDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
7 K& }0 j# D/ t3 h/ A" Z9 Wi = 1: j = 1/ N2 M, F) A& m9 ?4 v" w$ j
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))7 Y- d$ c1 @5 A7 u
ReDim Preserve a(1 To n, 1 To n + 1)3 N0 _! a. X4 c
ReDim Preserve l(1 To n, 1 To n + 1). I- R* t5 }% h0 v8 `
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
9 |/ G$ O2 \, n) LReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()$ h- g/ D2 `4 w" m( A1 U1 O( Y" h+ e
For i = 1 To n2 @6 @* W4 t0 r5 s; N( s$ m
For j = 1 To n
6 y5 m0 l7 q5 g" pa2(i, j) = a(i, j)
9 l( X" F9 I8 f8 k8 RNext0 z4 x! B8 X1 ]' t* S
Next '将a()的值全部赋给a2()
- Q8 V9 Z; \: T0 D3 n& d. om = 0
! H5 E- J( G  u3 mD = 1
: Q8 x; Z$ }; h4 ]3 LReDim x(1 To n)* d9 g( g% N& j" G) f
Print "--------------------------------"
( d- d5 e8 T" p) C5 \$ b. ZPrint "您输入的增广矩阵如下:"
. p& u+ a3 x+ `. w, |For i = 1 To n
7 _+ s' J$ F; |; ms = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
' H# v. w: |+ }3 |5 C" N3 V6 i0 QFor j = 1 To n" g7 k' {1 _+ x6 W& [; X
a(i, j) = Val(Left(s, InStr(s, " ")))
& K1 i$ m: \( i  n9 `' Rs = Trim(Right(s, (Len(s) - InStr(s, " "))))
4 B9 j  m" |$ ~: _% z$ U; }0 sPrint a(i, j);
! Y& Y8 i) s4 @5 XNext$ M) P7 j- D5 U9 T' C0 f$ O
a(i, n + 1) = Val(s)6 i  h( m4 q+ S
Print a(i, n + 1);
1 Z" X/ b* p( R5 G+ gPrint/ {% e% Q$ B1 ^. s: _2 ~
Next
  h2 U4 h2 j& v. D1 }  g( ]; S
! k2 l4 \' t# w/ r2 }For k = 1 To n - 1 '开始消元) R5 w" _  G3 P0 @
If a(k, k) = 0 Then& i+ A0 B1 K/ l
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"' f6 a9 |9 g6 U4 w0 k' X6 K
Exit Sub
- ^$ ?1 Q- O2 U9 Q! SElse- v2 ^% o  _- O# w. ^
For i = k + 1 To n# o5 q7 r2 d, J! v- r) R
l(i, k) = a(i, k) / a(k, k)
0 W1 `$ X2 `* k& nFor j = k + 1 To n + 1
2 {4 r0 K+ o: [7 ba(i, j) = a(i, j) - l(i, k) * a(k, j)
% p7 d7 g' Q$ f  ?8 _, b9 vNext
/ ?3 Z% P9 Z$ \6 _8 \" I' TNext
/ A8 }4 M6 X  hD = D * a(k, k)7 t( l: f4 K& D' U# l
End If
0 k4 f4 v$ G; ANext k '消元结束, e9 ^8 P* l' I- j0 a# u" ?" ?
If a(n, n) = 0 Then. i- Z0 V! x! ]3 {" O% d
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
. x& v; H# g5 }( ?Exit Sub
7 [  _" v* o4 k, b# m: b1 YElse
2 ^' `9 S/ z+ F8 J; bD = D * a(n, n)
7 h9 _: e% D" z& S! G% r2 ]End If
+ ^# P, Q/ R, \& E* N3 ?( V, X( l  t' \Print "--------------------------------"2 J3 |6 f: g" a, _0 K1 h5 i
Print "系数行列式的值是:"; D
9 l. r: _' Q0 N- W4 Y% Xx(n) = a(n, n + 1) / a(n, n)
  S% q2 M5 I$ C1 xFor k = n - 1 To 1 Step -1 '开始回代
5 q/ F, ^9 o6 L/ YFor j = k + 1 To n4 f; L9 B. M' S7 |) x# w
m = m + a(k, j) * x(j)* R1 @1 P) o7 c' f: M
Next j
. V( B& w: v" ^4 Yx(k) = (a(k, n + 1) - m) / a(k, k)
% X% G/ j4 M0 [0 y  v, Mm = 0
7 M3 q* N. T, U: T- S+ z. t6 V; }* RNext k '结束回代0 C- F9 H, s! a( F

$ w1 F+ Z, T7 D8 S6 vPrint "--------------------------------"# j; |* I7 D, P; {
Print "方程组的解如下:"
% |6 s! E9 `% x% t: k0 p" m- b# ]) K
For k = 1 To n
; S3 G5 }3 s& ^6 o: ZPrint, U( W+ P3 {4 k4 ^( O6 ]
Print "X(" & k & ") = " & x(k)( R2 G" _7 X/ B# Q& E
Next k
% r- Y- L3 A+ z! uPrint "--------------------------------"
& N9 q3 Z  X) d3 o$ w6 vPrint "其中各行Ax-b="2 ~6 u$ O: H( r9 ]* h; u6 t1 _2 D
Print
# A1 B! [+ Y0 o- @' tFor i = 1 To n
# u  f8 p. S7 P  m' ~/ Ut = 0/ |' d) w8 R4 [$ g2 \, |
For j = 1 To n/ }! b6 s+ }) {0 n" Y6 }# \3 ^
t = t + a2(i, j) * x(j)7 C! K  Y# R7 i1 s
Next j
! s0 n: h9 g  @- g# |t = t - a2(i, n + 1)
- z& m4 u7 m& p9 }6 `0 X- q  HPrint Spc(5); "第" & i & "行:"; t6 a6 m" T+ H6 i7 q/ x
Print# W5 ~0 t& E: O7 h' m
Next i
8 G% y, \( E. P  p8 e
1 w. M. ]5 L5 ~: I3 t, `$ }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:40 , Processed in 0.506237 second(s), 67 queries .

    回顶部