QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
# T6 W9 V, p) T  Y& s. W0 aDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
- i2 S+ L) @# O8 m0 P. hi = 1: j = 11 _( m# n- l8 w( g
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
% c! s& K0 p/ j& ?ReDim Preserve a(1 To n, 1 To n + 1)
6 }1 q7 v  v; h) {. ~& H$ I+ oReDim Preserve l(1 To n, 1 To n + 1); Q! r) W) `4 n7 w* R  q
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single/ ?7 Y2 w+ X! V1 Q4 \- [; C# P
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
/ o6 g! P( W0 e, E* v, w7 JFor i = 1 To n
7 d+ T) ]' H7 ?) R7 ?" RFor j = 1 To n1 b2 n9 F; `! W: M0 _! J
a2(i, j) = a(i, j)
$ k) {) Q( l( o# J0 E/ B7 vNext
. _3 g, Q* N6 M5 F# xNext '将a()的值全部赋给a2()
! w9 [. Z( r* g" |7 `4 Gm = 0; u9 F* @2 j, ]( x- c* b. B4 Y
D = 1' M# s! L7 j% w/ N, r2 h3 j
ReDim x(1 To n)9 b0 o$ T! n) U
Print "--------------------------------"
5 `2 z0 R/ ^, a3 J. |6 PPrint "您输入的增广矩阵如下:"
. \; A4 H) L# Q& ]0 eFor i = 1 To n
  d, e, U- O- w5 I  F6 \# I& _s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))% e6 u; I' u4 P+ Y) ], w8 Y
For j = 1 To n7 l! J# ~$ q  L, X
a(i, j) = Val(Left(s, InStr(s, " ")))
  ^& A' A5 n: O( os = Trim(Right(s, (Len(s) - InStr(s, " "))))
8 I( p# v5 N$ [& yPrint a(i, j);
# r/ ]5 |0 Q0 M2 eNext6 w3 s$ a3 ?- @1 i, h" V! z
a(i, n + 1) = Val(s)
9 j4 D% m' ~0 ZPrint a(i, n + 1);
1 s. s( K3 m& y9 O; |3 A6 y! APrint3 [1 R3 J/ [5 U$ w! T
Next
4 w/ p( {/ G. s  T; Z+ L7 N8 [: w: ?0 \7 S; _
For k = 1 To n - 1 '开始消元9 _3 ]& I2 j* o$ K4 D# E; }* w: a% V
If a(k, k) = 0 Then7 K* _3 ^) c3 {
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"; s3 P: T/ V4 H) r* h8 d
Exit Sub
3 I  q3 T2 p; U! Z$ E1 A& {- c; sElse" x. }1 e% Z2 \; A  \
For i = k + 1 To n+ A5 {" \. D  q# X( E1 h0 s& \
l(i, k) = a(i, k) / a(k, k), I/ M& E2 l+ {
For j = k + 1 To n + 11 R5 u. @$ O! u2 S, e, j
a(i, j) = a(i, j) - l(i, k) * a(k, j)
% p+ Z1 v: \  \/ d! UNext
1 T; x8 U( z' w2 y: w( JNext
1 f2 j$ t" q2 v4 f1 z- b& y& [D = D * a(k, k)
1 E, V4 Q8 ]9 I# J& H$ Y2 N: bEnd If
+ W" E% E7 Z+ tNext k '消元结束
8 C; x- N" H& ^If a(n, n) = 0 Then
7 u  c0 W6 C7 c- v* MMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
6 J& S( g  _& x/ C/ j1 dExit Sub. N) Q3 e2 y7 y0 K, t: S, K
Else
% {5 m! k) `0 y1 L9 b; X, ^D = D * a(n, n)
# D. T2 T# t- c( \% jEnd If
9 s! x* a; t  m2 w% I& D* uPrint "--------------------------------"; [  ?" `" g! g1 I9 _
Print "系数行列式的值是:"; D
) l1 B) X% h! g, E" _: f. fx(n) = a(n, n + 1) / a(n, n)* D, C% y  C; J( R, o6 {9 j) E( R
For k = n - 1 To 1 Step -1 '开始回代9 a+ ]+ z# N; J8 m& M& z2 Z6 F
For j = k + 1 To n
" c+ g& X1 `$ J# d2 om = m + a(k, j) * x(j)
% L$ I. X) _$ E. o$ MNext j
1 x+ p% I  ^% d- u& k3 ^% y1 Mx(k) = (a(k, n + 1) - m) / a(k, k)
4 A. _# N5 G' H/ U# {1 P( ~. n6 L+ Sm = 0& F: S5 a' m" |& B+ t8 g% ~0 F
Next k '结束回代7 m2 P" @8 E$ M+ }. B0 h

8 Z5 s: C$ \9 G8 ~  _Print "--------------------------------"
! ~5 a! S% x+ YPrint "方程组的解如下:"0 l& ], _0 r4 \$ d% a& b) q# }
- z. M7 J4 [/ a& {
For k = 1 To n
+ |& t- G0 h; M* r/ x* w* _" O! ?0 fPrint
* X2 Y9 J4 t  l9 ^, d" kPrint "X(" & k & ") = " & x(k)1 B# ^& I  n8 e1 D# ~% F% b8 o
Next k' c1 M* p( l6 M7 c7 p( V
Print "--------------------------------"; l  J2 m% I/ J9 n% @9 u1 `
Print "其中各行Ax-b="" J/ ~/ j: M% g# `+ i5 ], U
Print
6 G5 O4 T, p0 f6 }3 V, ^! yFor i = 1 To n
) o0 l% R: J' c) [/ e; H4 u* T3 a/ o# _t = 0
( k6 B! n) `. _# AFor j = 1 To n
4 h6 s8 G+ U+ `$ [, w* y0 P7 w1 Vt = t + a2(i, j) * x(j)8 k9 F, P( f+ Q! [/ U
Next j
) M, ^4 \  d$ i4 |7 [4 U- It = t - a2(i, n + 1)
# ?3 n6 ]9 q6 PPrint Spc(5); "第" & i & "行:"; t
+ Y3 M' f, N8 X# |) K, nPrint& C: C0 O) T0 y$ y& ]: h
Next i) ~# N$ ~3 f! D) b) }8 K$ ]! s- i

' M- ~3 v5 m4 F6 m8 G. }End SubPrivate Sub gauss_Click() '高斯消去法
$ t  j& @5 @+ rDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
) k! ]( g# r+ e3 vi = 1: j = 1: q" P$ V9 }* s6 f1 Y2 p7 `0 W
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
# Z% m% W% b) [: R1 XReDim Preserve a(1 To n, 1 To n + 1)7 ^" k( b! T# R) E2 O
ReDim Preserve l(1 To n, 1 To n + 1)
. p1 j5 L/ W# F9 v1 @Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
* `, {# J9 J, Y9 W' r' k9 xReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
9 ?6 `: x+ d3 ZFor i = 1 To n* r# w/ [3 ^- ]6 P) L, g9 i
For j = 1 To n# L# J1 ?, N* a) D3 h
a2(i, j) = a(i, j); s! I, B$ j# C( [- l& V0 ]
Next" O+ j& M/ [: ^; D: f
Next '将a()的值全部赋给a2()# C  j4 [: ]/ ?( ?" t
m = 0/ E7 m0 ~; v9 {
D = 1
5 l; S7 R, Q/ P, LReDim x(1 To n)
  C9 `0 S) x8 u# d+ qPrint "--------------------------------"
- F: q! m. h, c/ r- hPrint "您输入的增广矩阵如下:"
! d4 D+ j, h' E$ LFor i = 1 To n6 w9 t6 {# C; I) {, @- z  N7 r* i
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))( F' L4 p) J8 s  C5 L3 X
For j = 1 To n1 u8 L7 ?% ?, Q* R. m+ f  P
a(i, j) = Val(Left(s, InStr(s, " ")))1 `; ~7 V) {2 O: g
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
' s4 j* p, z) D+ B# ~Print a(i, j);
% F; ?* T( t- D: ]3 Z9 L9 F/ w# r2 zNext* c% Z: K: d) H# r1 Q  l
a(i, n + 1) = Val(s): V' `$ V$ `! `5 A
Print a(i, n + 1);
: d: |) h% H9 r' W: B2 g7 e2 V% ePrint+ ?. f: ?* e6 k, p9 y2 e7 J9 l; W, b
Next$ W% y* o  J. G9 D0 Z4 X! z

) z0 f' D* F& j, d: IFor k = 1 To n - 1 '开始消元
6 {8 R1 X1 [2 lIf a(k, k) = 0 Then$ K! i9 r6 D; L0 a  p( h- X/ ^* a+ b
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"* E9 q' r7 j  }+ I7 K
Exit Sub5 s2 `+ j  Q/ P0 ^
Else
# H; w# Z" r# j2 A6 R6 W' o9 nFor i = k + 1 To n
3 G' H% V# ^/ o; N6 i+ a2 {- L  Q& ml(i, k) = a(i, k) / a(k, k)
) Y( l8 A. e# p9 P, y* EFor j = k + 1 To n + 16 n. H5 [2 e4 l! ]" @7 [* e
a(i, j) = a(i, j) - l(i, k) * a(k, j)) x/ R$ K9 v- f( E8 E
Next
  W/ C. n0 @' ?1 s8 C" qNext
+ e% Q* O2 A- K$ `; U: cD = D * a(k, k)
( z6 y/ J/ R7 {End If
) n9 `+ l- d- f0 ^Next k '消元结束+ }! n- K! k! e5 q
If a(n, n) = 0 Then! G5 W" F$ ~6 q, i
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
# \- q9 f) S' |Exit Sub) A  R7 W1 }$ ^9 s: r9 A/ X4 S
Else% M9 D% ]# E6 J) B
D = D * a(n, n)
- Y; v* M+ u6 J/ REnd If: z7 I! e4 D7 h; W. G
Print "--------------------------------"
3 q# G* M1 h) Z( i: RPrint "系数行列式的值是:"; D
' S5 j: g! _+ {: t5 L: dx(n) = a(n, n + 1) / a(n, n)
6 [, m: @: O. y1 a$ z. p7 u& BFor k = n - 1 To 1 Step -1 '开始回代$ K1 A; l* D8 o1 {0 l
For j = k + 1 To n  F, o) n% V1 @& w2 y+ F4 {
m = m + a(k, j) * x(j)' _5 f, G# X! M/ x9 z4 a3 y6 l7 W/ |
Next j2 h! C3 c- N# ^+ ^" j& @' E0 w, B
x(k) = (a(k, n + 1) - m) / a(k, k)
2 H  W. d# C! q3 C: ?) _m = 0
$ H* O% A* ]  E! }Next k '结束回代
" j) }+ k$ }2 l+ J5 I
8 T# b. Q  {, Z5 l& w* z3 B" RPrint "--------------------------------"
! b2 V: w6 G. c  RPrint "方程组的解如下:"
2 x( q3 x& i6 o6 n& B; O) O
9 o; P8 X# j. ~1 p- CFor k = 1 To n
7 @& m7 o. U  a# W: pPrint. g' ~' \7 i: U, D* r* t
Print "X(" & k & ") = " & x(k)
! Z  c+ Z- G0 ?  s" b+ ]$ S/ F+ ^1 {Next k
- T4 U. i9 L3 p+ iPrint "--------------------------------"
* c6 @* u9 C* y3 W$ ~3 s/ T- aPrint "其中各行Ax-b="
0 S" V' l6 d5 W: oPrint
, F& |' o. h: J  z( h$ E  }For i = 1 To n8 n& B0 v" W: }( m
t = 0; M9 d; K' c" _  w! F3 K
For j = 1 To n
/ @0 p3 T  T" M. a- E# Ct = t + a2(i, j) * x(j)
$ P. j" [% @1 c/ NNext j: J. Z. V! C% z" o# V* U
t = t - a2(i, n + 1)
5 h$ w5 L2 C' \' p; S' |Print Spc(5); "第" & i & "行:"; t
( l, p3 b) f* n+ ^' x0 t& XPrint
4 ]6 }! q$ X; B1 f  ^( V$ C  CNext i- ?! _. d& D, }  d
4 c5 X2 q; M5 Q& l* b
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-4-14 13:20 , Processed in 0.471880 second(s), 67 queries .

    回顶部