QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法' i$ z1 M! |' A
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single8 r7 b, Q0 P$ L) T
i = 1: j = 1
8 A- _1 g; M! T+ w% N+ Sn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
3 _% I0 J7 _( D- n  xReDim Preserve a(1 To n, 1 To n + 1)
% X/ g1 B9 L) N9 \1 T2 U. ~# yReDim Preserve l(1 To n, 1 To n + 1)/ W9 Z- H/ e7 x$ O) D$ W% Q, t
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
; N% b/ |7 j+ b$ v7 q: i$ b8 ~ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()8 ^8 M- r, Y" s+ _# ^* j8 O
For i = 1 To n
9 i  a- E6 e; Z4 `For j = 1 To n! ?3 \, Y( D% @, m- @" o
a2(i, j) = a(i, j)
+ }1 z, s3 [7 u8 x% b! l8 NNext  j0 p' T) w' @# f: [0 d5 c; h: B0 l3 c
Next '将a()的值全部赋给a2()7 M5 O; d4 ^7 b- S$ d
m = 00 H$ r6 a. o3 v. K9 C
D = 1
9 d' F4 m5 i7 W; G- G/ c6 s2 j+ D  MReDim x(1 To n)6 e5 E5 E# V2 R
Print "--------------------------------") i  ^" R0 F+ X* J7 q7 m
Print "您输入的增广矩阵如下:"5 ]# y/ N9 ?  a' M% X2 |
For i = 1 To n
, k: O" u- v# M. M$ ]1 w# p+ ls = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
6 B4 c+ c# J$ N. u* WFor j = 1 To n
! i8 k3 g7 G) G4 U& la(i, j) = Val(Left(s, InStr(s, " ")))+ [) A6 p4 M5 X+ P: v
s = Trim(Right(s, (Len(s) - InStr(s, " "))))5 Y6 k2 _+ f. Y5 G0 m" b' w8 q
Print a(i, j);) D. N" {$ F# E" k2 ?
Next) |5 H+ f5 b8 E" l& R
a(i, n + 1) = Val(s)
, J; S  b5 ]( M; @Print a(i, n + 1);
2 b' ]6 m, e: l# [6 |+ APrint$ z' R! M% x1 ?$ n0 w- `! E
Next4 D% t. o+ m8 U

7 x& L# D( ]9 |( _( lFor k = 1 To n - 1 '开始消元9 x; ?" K! @1 O5 R
If a(k, k) = 0 Then. d8 Z/ t, S$ N1 P
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!": D( m, U$ Z0 O: U0 n$ u
Exit Sub
2 d$ h! e1 K1 x$ H; o2 tElse' P5 @1 a5 x% L; r3 U
For i = k + 1 To n
) Q4 |( X$ E1 g% ~7 q9 fl(i, k) = a(i, k) / a(k, k)7 G5 O$ u' k, W* b2 h& V" S
For j = k + 1 To n + 1: ]/ v( E, U  Q3 l2 I* B6 S
a(i, j) = a(i, j) - l(i, k) * a(k, j)
$ \0 I2 h/ g9 G# `) f: Q7 hNext
" f6 B, Y4 D/ tNext- E6 z/ z" A( S% L! d0 k% G
D = D * a(k, k)% E' D* a0 c8 h* Q9 M
End If
9 d" H/ [5 l0 A' y$ z. iNext k '消元结束
% O, a7 ^# E; K, N/ _' h4 _If a(n, n) = 0 Then3 }* k2 n5 k/ l: x- A: ^; L
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"; U& T9 {! S; Z2 s4 r/ J
Exit Sub
* w: \2 |9 f3 Y' DElse# v9 q5 y) O  ~1 g1 O
D = D * a(n, n)
. B8 I, a9 R7 L/ {2 X7 NEnd If
0 e2 m: y9 e& Y1 j( Z2 Y2 {4 R! P! b/ CPrint "--------------------------------"
7 h7 a- g) ]# q1 Q/ CPrint "系数行列式的值是:"; D( K% \! A/ P3 x3 m- g- A; k) h" \
x(n) = a(n, n + 1) / a(n, n)
* v# O# ~* w5 MFor k = n - 1 To 1 Step -1 '开始回代
) b' F& ~% X: P4 b2 M! u- M+ E# cFor j = k + 1 To n
  R3 U3 _# t# f3 ^2 z; wm = m + a(k, j) * x(j)
3 I4 d" ^/ W! v- }$ {8 B: c% q- ?Next j
, m$ h0 l$ L  L+ v& F: a6 ax(k) = (a(k, n + 1) - m) / a(k, k)# G6 h. ?* w* R# P# N( G) z
m = 0) ]+ Q( _9 W0 a; ~: U* u7 ^, G
Next k '结束回代
! I; z! D5 i" i/ a! u2 q9 M" U. d2 N$ U: v
Print "--------------------------------"0 t4 h) g& w/ c
Print "方程组的解如下:"
2 |4 o4 ~, K* f' b! m" Y/ Z; W, ?/ O
For k = 1 To n
7 p( q$ E) R5 a/ M8 T8 f' E( TPrint
- u- W+ x1 w1 ^2 k1 |; uPrint "X(" & k & ") = " & x(k)* O' m8 S+ k4 D2 ?% a/ I
Next k
1 H, P8 Z2 h) H( ]1 B- B+ c; |4 \, KPrint "--------------------------------"
2 w/ g# b. s2 J; m+ t) r/ P/ vPrint "其中各行Ax-b="
: h: T* @! L5 G. Y9 L. TPrint+ U1 A5 ~" [# t* J/ \$ _
For i = 1 To n
& Y* ?1 l. ^: ?% l- ?/ y8 rt = 0
' R$ c7 m" e9 x# b6 J& r3 MFor j = 1 To n! ?8 G2 h2 E) _$ X. y/ p$ C% G
t = t + a2(i, j) * x(j)0 n1 k3 ~# ]' X2 I0 o. Z
Next j, x" H0 m# g# i& L. s# |% Z
t = t - a2(i, n + 1)  E; y) C/ a, U& `+ t1 t/ g
Print Spc(5); "第" & i & "行:"; t, A. D+ o' p. X9 z# h$ ~
Print
  @" p- t& e* A7 r/ Z$ aNext i
* n+ P  P+ J. I, _2 L" _  c! _, l" T" W
End SubPrivate Sub gauss_Click() '高斯消去法# y* y1 i4 ~( K% Y" B
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single) z% }% A/ G, j* d4 a* _
i = 1: j = 1
! T7 R4 l7 a1 y2 h$ x, {% Dn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
5 {) l. `0 z- O- ^, }# X; }ReDim Preserve a(1 To n, 1 To n + 1)1 m! K3 Q+ K8 a# s1 _
ReDim Preserve l(1 To n, 1 To n + 1)
( Z1 N3 b1 {# ]) z# }- J- n3 pDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
+ X: h; K8 _" w' X1 k. |ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()3 x# P7 }0 o5 \
For i = 1 To n. Q& V" \7 @4 h  \- k5 {/ \
For j = 1 To n
7 d0 R0 q0 ]  o3 O" Ra2(i, j) = a(i, j)6 b- J3 q# Q' X8 g5 y3 e" ~
Next
( o5 @/ i* B" m/ ~$ F7 S9 hNext '将a()的值全部赋给a2(). y& F& M* T5 U: x. i6 k, x$ j
m = 0$ B0 [$ ~  A  O
D = 1
3 a% }0 h3 L' CReDim x(1 To n)
/ f1 j) t3 w2 [6 t5 ^' XPrint "--------------------------------"8 `7 \' _: E7 \/ O$ M6 ]( O% A
Print "您输入的增广矩阵如下:"
. X" h" X+ s' NFor i = 1 To n
4 F) V( x! m- K/ F+ l2 js = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))' A% r! _6 x  ?  M
For j = 1 To n. ]3 Q  v, A; G% P8 @
a(i, j) = Val(Left(s, InStr(s, " ")))* E+ \+ [2 w  |0 ?  P
s = Trim(Right(s, (Len(s) - InStr(s, " "))))* x. [* L; {! `. p
Print a(i, j);
: r! @' T  G7 eNext
6 |9 X, G' }. I9 u6 Ta(i, n + 1) = Val(s)
; M7 I0 B" v: B% v& g- m0 w6 h* rPrint a(i, n + 1);
9 S5 ~& Q! s& N0 NPrint2 F: z  O: f/ i1 V2 Y) ~/ ~
Next7 _- T4 J  Z2 N' c- J5 `
' t, l' F, n) F! u; f' h( ]
For k = 1 To n - 1 '开始消元
2 J% z. k% u& x) \& L* cIf a(k, k) = 0 Then
3 x+ W) [1 k7 D8 @8 j& z- f9 VMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
9 Q! ]$ G& u; R% ~6 pExit Sub
% r1 y! {. i- ~$ ?/ wElse
5 |( w4 ^. s+ X( KFor i = k + 1 To n
5 B+ z7 _3 j1 V" c0 b  N: N% ql(i, k) = a(i, k) / a(k, k)
3 F2 B3 Z' d, F- eFor j = k + 1 To n + 1, ^. b4 K7 m( ]: n. l/ ]1 I
a(i, j) = a(i, j) - l(i, k) * a(k, j)8 W: v( Q9 j2 |( C
Next
# g! A" v+ H' o/ h9 M: P: A/ aNext
3 Q" k! o* }) }- p  R2 \$ h5 r# BD = D * a(k, k)
2 _4 H+ X+ R5 t5 wEnd If
9 T  j! k/ q# R, q. Z$ O3 `Next k '消元结束
* V2 {+ e- R$ `+ i& q0 _  t* RIf a(n, n) = 0 Then& R& \' N( f5 Q: q' g
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
! S" q* I. t/ h: kExit Sub2 z9 X- V4 A# |* ?* c+ _
Else1 _+ ]5 ?$ [, C0 C6 s
D = D * a(n, n)
  e3 I5 S# q3 iEnd If# O! `. S7 J2 C9 D
Print "--------------------------------"
/ m; q+ @# X  Z0 Q6 ]Print "系数行列式的值是:"; D7 v6 h6 ]" }8 R: A/ q' y1 _# B
x(n) = a(n, n + 1) / a(n, n)
6 E% E% k  i$ \" N2 r/ DFor k = n - 1 To 1 Step -1 '开始回代& \) k/ C* ^/ E' M1 D( k+ i
For j = k + 1 To n
  w: p, \3 x$ a& e- l! Am = m + a(k, j) * x(j)- s" l, \/ A% \
Next j) {+ c! _2 E( t* Z# |$ C3 z7 }$ ~
x(k) = (a(k, n + 1) - m) / a(k, k)1 V5 @1 O; n& \0 X' v
m = 06 k3 i8 m) l1 p& A* N1 e% U; S
Next k '结束回代
2 c; x# ^) W5 j& N- z* G2 _' y% M  K+ [4 q; q
Print "--------------------------------"
9 I  d4 `' x, ]6 n# HPrint "方程组的解如下:". S; u  o0 D/ ~' l

6 A1 Z" V5 E' oFor k = 1 To n1 ^4 ?( f: N$ I
Print
3 q0 `2 E* i! MPrint "X(" & k & ") = " & x(k)! _! ?% u% n0 k. j. x& h' `+ T, V
Next k
9 Z* }/ ]* w6 J+ K! TPrint "--------------------------------"
4 c- B2 H5 x' [6 p. jPrint "其中各行Ax-b="
3 \8 j+ J; K; A1 F4 T& \Print
7 |# e  I$ W* Z  B% x8 mFor i = 1 To n
8 x) G/ f4 x3 Vt = 0. D8 v( a4 _# L. x4 g! x
For j = 1 To n, {/ O# h: Y" G
t = t + a2(i, j) * x(j)
. h. u1 g5 s4 F5 _6 b* d3 _$ pNext j
# f# p& @$ i  r# |# Y/ |: E; p" Wt = t - a2(i, n + 1)+ A& J) T' a7 y
Print Spc(5); "第" & i & "行:"; t
) ^& t) o2 g5 u& U  IPrint
$ N4 _$ _6 k5 e6 M4 cNext i
$ M3 s) Y; f4 R' ^
2 \6 P* q1 G  O+ o/ Z: EEnd 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-1-3 15:16 , Processed in 0.426417 second(s), 68 queries .

    回顶部