QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
5 u% O% g$ F5 f  N0 w! ^! Y# dDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
: `6 c+ M  {1 W& j4 }i = 1: j = 1# n4 x5 U' F4 q- ]! U
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)); s- f! p, P8 s+ |1 E
ReDim Preserve a(1 To n, 1 To n + 1). y' G  @8 p( S5 D: U
ReDim Preserve l(1 To n, 1 To n + 1)
6 m6 B4 t6 O* H$ T: SDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
3 {5 {) N  M( @) IReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()7 M/ ]6 B7 P3 ]6 H) B8 D4 d0 X+ P2 k! k
For i = 1 To n! {+ R2 t* ^, W; Y& P+ S
For j = 1 To n
  _' k7 ?5 P5 _/ va2(i, j) = a(i, j)
' L& t$ [6 w  x# V% s0 p; [! mNext
+ Q. A1 [) Y6 |8 d5 gNext '将a()的值全部赋给a2(): Q- D4 z+ c0 \9 c, B+ j
m = 0
( m4 L) c* P8 _! A1 pD = 1. e& K0 n/ O8 I; V$ ]
ReDim x(1 To n)
" v' c1 U' N9 q! e% NPrint "--------------------------------": N1 O7 u' M2 i1 ]
Print "您输入的增广矩阵如下:"
4 ]1 J0 E% M1 K, y8 m" EFor i = 1 To n2 d- j% [( Z! z# e, M
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))2 j+ I8 G0 n7 P4 G1 j9 {
For j = 1 To n
! k5 U) p. A9 n( {- R2 i& oa(i, j) = Val(Left(s, InStr(s, " ")))2 ^0 ~6 `" E+ s* H5 A
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
$ P& h" d8 H) ?Print a(i, j);
4 u2 j& L. I% G6 ZNext
  V3 ^1 ]: m, ]' v9 X# o1 |a(i, n + 1) = Val(s)
# u3 _: I! ^- V) a; [. C5 N4 NPrint a(i, n + 1);
3 g2 Y+ {2 Z( r+ ^* [# KPrint
6 e& z; N: d% MNext7 ~' s! h, a* e& S6 T
; j2 g4 h5 \& T
For k = 1 To n - 1 '开始消元
6 Q, ?  p/ j) N5 ^, s7 j+ @) q" sIf a(k, k) = 0 Then
/ Q( F: @6 o0 J" wMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
1 k$ e* y9 t3 |6 ]1 i) CExit Sub; N( B# O7 b4 t1 ]& j
Else  q- n; Q* L/ @- i1 \4 e1 W9 ]
For i = k + 1 To n  H. l- @2 J7 O! G& X4 }
l(i, k) = a(i, k) / a(k, k)& T3 ^* p& O% C( W
For j = k + 1 To n + 1
1 t+ f0 z7 S, u- {0 \: ea(i, j) = a(i, j) - l(i, k) * a(k, j)& D& `" V8 M/ d
Next! z" T! j5 O6 t
Next7 e9 O. q: ^( L0 t" p
D = D * a(k, k)
1 J5 E4 z" [* F, y5 V% d- \( ]End If
& S  L$ U, R. Y* R$ D( aNext k '消元结束+ @9 c) z3 q' o: c- f7 S
If a(n, n) = 0 Then8 I+ R0 d7 \/ R% }6 r
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"2 }* c4 S. U3 O
Exit Sub- ?$ p$ x; Y2 b2 \
Else' h! |9 H( ?. t2 g% ~. w5 E
D = D * a(n, n)- G0 I3 N7 N8 ~
End If
, D7 @# X! @0 f  p3 J& i( yPrint "--------------------------------"
7 L4 `! g3 O8 [. V8 S4 bPrint "系数行列式的值是:"; D
2 {/ c3 a# W- h8 Ux(n) = a(n, n + 1) / a(n, n)$ W/ \! o+ w  h/ v, a3 ?
For k = n - 1 To 1 Step -1 '开始回代6 a( s3 \+ r0 _+ ]* P+ B- l# @
For j = k + 1 To n/ d0 C- m0 }/ `  U, P) S
m = m + a(k, j) * x(j)/ c3 N, a( {, L5 T$ n
Next j, r2 v* N7 ?- E$ }4 R
x(k) = (a(k, n + 1) - m) / a(k, k)
! Z6 n1 R+ H# b4 F- km = 0
; y4 X: x" P  {; W7 b8 g3 }6 qNext k '结束回代% f+ [& j* V/ d' u% ]5 p9 K
6 I# e3 }( m8 a% [
Print "--------------------------------"1 _7 `0 H# T$ y' m
Print "方程组的解如下:". @; X' |- v% M2 F
6 H& J& K9 A8 U! B% h
For k = 1 To n
% Q; ~% Z* F. G! |* e6 MPrint
* x9 n3 B$ z  D& C& ^0 I% N: oPrint "X(" & k & ") = " & x(k)! T& H* k- R. y3 ?  y* \( K6 y
Next k+ g$ T# M& B& R
Print "--------------------------------"$ x0 W# @/ W( F- e0 a8 Q2 s/ L
Print "其中各行Ax-b="
+ w- I8 w$ G" |% f6 n# q7 lPrint
' t# ]4 V( N! T$ L: c! m* i: ^For i = 1 To n
. i7 B5 R/ [' u6 a: i: }& P( Ft = 0
. l: A; c" h. J% o8 |. r2 r5 U0 VFor j = 1 To n
$ |" U; v- {' E  `t = t + a2(i, j) * x(j)# ~. s: ^% u/ H% x6 B! D
Next j
5 K* C* T; H) C+ h$ `& h5 }* U) ut = t - a2(i, n + 1)
0 C3 ~5 t3 N% z, v( s1 r$ @Print Spc(5); "第" & i & "行:"; t9 P! d1 |, j0 h
Print1 [, k- `. @8 l* V& k
Next i- s6 B3 R  e, ]% {; P6 C

' h0 ^& W! t0 SEnd SubPrivate Sub gauss_Click() '高斯消去法5 |! z# q1 z: |# U! U  N
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
* L0 |6 {3 c2 u; s  Ci = 1: j = 1. y5 c2 |# z& W
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# i) l8 y0 Y+ l
ReDim Preserve a(1 To n, 1 To n + 1)
6 G( {( H# a7 `  Q7 {ReDim Preserve l(1 To n, 1 To n + 1)
7 g2 w6 M1 t% p* e, S- F( k7 cDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
, |: P; h, d3 K8 m$ AReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
* c7 N0 d  P1 s( C( u: I0 S6 }For i = 1 To n
- b5 g$ p, E/ _8 LFor j = 1 To n0 z/ F/ |* N' h2 v2 {# O  z
a2(i, j) = a(i, j)' g& l& H! ^" M2 ~
Next7 ]  Z. d" h: `- y9 T, G0 E
Next '将a()的值全部赋给a2()
, R: o4 l! }  c; r. }! mm = 0
1 @+ I0 ]) V, q7 gD = 1
3 x* M: f4 ^7 W/ IReDim x(1 To n)
( ^# p. c( e! jPrint "--------------------------------"# A* d) N4 Z# _" ]0 u
Print "您输入的增广矩阵如下:"
( D3 u" Z/ q& A% d3 f) H: WFor i = 1 To n
; W, ^% X" K9 U4 z  ?s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))% z, \. w2 a7 k% p; P
For j = 1 To n
" h* K0 U+ l  U7 P, {1 z0 v. Ta(i, j) = Val(Left(s, InStr(s, " ")))4 x+ ~6 G' T: q, y+ _1 z
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
- [" s! W6 B& j4 `' S+ @6 SPrint a(i, j);
+ j' ?/ C* d/ F  uNext) J! G1 p! u3 Y
a(i, n + 1) = Val(s)0 l. f4 [$ V5 k0 i6 G" i
Print a(i, n + 1);% ]4 V4 b$ E+ n& v/ ]7 B! {! P
Print/ D& F/ g4 i7 a
Next
, ]% P# c# M; X# G6 x# P
4 X% ^  v6 x: _. aFor k = 1 To n - 1 '开始消元
# b7 y7 s- [  i  _4 XIf a(k, k) = 0 Then
% J! S) h. D+ v, bMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
5 {! X0 P, t# U: v' `Exit Sub0 Z" m+ `' W+ I3 I
Else  Z$ X* V6 c$ n$ ?
For i = k + 1 To n: Y4 I3 h7 o# A# x) Y0 T
l(i, k) = a(i, k) / a(k, k)+ F7 I3 G* h5 |- b
For j = k + 1 To n + 1
8 k8 D$ t$ F/ v' o! y* U3 F: N  t! Na(i, j) = a(i, j) - l(i, k) * a(k, j)
/ w8 o9 F/ S8 Z2 A1 K# MNext2 W2 i: k" P: C( N' g7 m: ?: c; C4 s
Next  c4 k" D! I; x3 R% H+ N
D = D * a(k, k)$ H8 `7 t, K  j! m) f( S) c
End If
( y: U; i. Z) [: }. H, [2 yNext k '消元结束4 k3 N6 W$ \" b5 ~" N9 X( f
If a(n, n) = 0 Then
* v9 ?% R# h6 T; ]( Z) i  B& u! sMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
! o  t! }9 ~3 y& X' m# x5 F/ JExit Sub
2 z! t) \  j7 h& ]2 S' q% hElse3 g# Q* `. R$ E+ G6 H
D = D * a(n, n)
: B4 u6 V0 z! A, |End If
9 q) v  q# j  s: U- y$ vPrint "--------------------------------"
, ]1 D9 \1 {+ xPrint "系数行列式的值是:"; D
% \/ V. U: e8 i  v4 V- u9 vx(n) = a(n, n + 1) / a(n, n)
4 c* m$ E, o* ^' g7 i6 J3 hFor k = n - 1 To 1 Step -1 '开始回代6 O- S- z6 X) S6 M& _' B+ a
For j = k + 1 To n
+ |$ X1 W' z/ ~2 A: Dm = m + a(k, j) * x(j)
  g8 V/ H& R, `  J* }Next j
0 J) K5 C) ^3 t. {3 G$ p9 U5 ix(k) = (a(k, n + 1) - m) / a(k, k)' Q  e' T4 r1 A9 f$ _
m = 0
: O5 Y" x% l/ r- {Next k '结束回代
9 {& i  U, Z1 Z( K* ]/ t
+ L% W( M: W: a7 j; s+ J3 |Print "--------------------------------"+ @/ ]5 R: h& X( I. h
Print "方程组的解如下:"
8 }! ]: B. K: U, C, I8 [! C- Z/ o. G- k( X! L
For k = 1 To n9 e* {& N" O  M5 p, V
Print% ~5 L% l  Y, F9 P) k) g
Print "X(" & k & ") = " & x(k)
6 @% P' E- r- H2 b0 HNext k  u9 [# G7 V! J$ U$ u
Print "--------------------------------"
$ H5 B; Z2 J" r% Y! |Print "其中各行Ax-b="
2 B; Q/ s2 U7 G3 M% s5 FPrint
  @2 g3 [- T2 W2 d, a5 ?% |For i = 1 To n
8 `3 m' |1 L0 f$ Z& A/ ~& _t = 0
3 m2 h7 u, O% W0 P, b! R7 pFor j = 1 To n
8 S0 l$ ]1 v8 c0 H2 ^t = t + a2(i, j) * x(j)$ i. Q! ~+ K' x( @, r* d
Next j
0 j6 F+ o+ t' _+ e1 z, Ut = t - a2(i, n + 1)$ a+ P. g2 d0 F% L. m
Print Spc(5); "第" & i & "行:"; t( Y8 b6 F! `# ]/ {+ V* h
Print4 r' X2 Y  y7 f7 |1 u% \) g8 o# O
Next i/ m9 {! Y8 @; D9 f7 r

0 c: x# V; E* V, f  yEnd 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, 2025-7-12 11:47 , Processed in 0.575459 second(s), 73 queries .

    回顶部