QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法7 y7 K0 k  r- u0 K  H
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
6 V- o/ C( }+ j( X. R2 bi = 1: j = 1) f2 O7 H6 @# E* W: K( b
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
% r6 s5 t9 V3 |9 n5 |* n" e/ F/ v; DReDim Preserve a(1 To n, 1 To n + 1); c. d% j: Q8 g/ ^
ReDim Preserve l(1 To n, 1 To n + 1)8 G8 c$ j0 I0 t7 O8 I: g* ?
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single7 U8 G# E  }& r, d+ v
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()& O. `, `* q) o3 J. R( N& v
For i = 1 To n
; Z2 V( b* Q8 r! ~  A" a& Z+ ]For j = 1 To n: J3 T8 b) {) h$ J
a2(i, j) = a(i, j)- T; r8 X: i, s9 i9 u7 g' k# x$ l1 i
Next' y) p& j  Q! y- {
Next '将a()的值全部赋给a2()! X8 s% j2 D& ^4 h
m = 0" z+ s: f) @: X5 V5 W( o
D = 1
2 X6 x8 G! I. j5 ?% e' mReDim x(1 To n)
3 x; n; C' X7 h- ~: nPrint "--------------------------------"
: B9 N9 E5 Z  Y3 I8 d9 gPrint "您输入的增广矩阵如下:"  ?/ r; R! l- w7 X. ~
For i = 1 To n
& z; M5 m, h0 G4 ^6 g& os = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
* b. x3 ?& U3 f% b4 l7 BFor j = 1 To n% W' i# L: q' f! |
a(i, j) = Val(Left(s, InStr(s, " ")))
! H1 h/ @& A& i0 a& ?  Bs = Trim(Right(s, (Len(s) - InStr(s, " "))))  E+ _& t+ v9 r& @3 }
Print a(i, j);$ q- ~( N/ g$ R3 R/ D  V. B- ~) L
Next
) _0 Z: x# m& X4 Sa(i, n + 1) = Val(s)
' d+ k( W- W( a- \9 W, [# pPrint a(i, n + 1);
4 o/ @( b/ a3 }Print
, R7 G6 Y9 i2 g+ ?0 a  j/ B+ GNext5 c! ?& a! x6 i6 [: X

! M9 ]  A: S( A2 o0 UFor k = 1 To n - 1 '开始消元
/ [6 z9 e, H7 [6 _  BIf a(k, k) = 0 Then
& E5 j, g$ X8 A/ _. ~6 Y7 c0 ~' xMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"+ D8 W( E5 F# p
Exit Sub
; L: O# `  r( p4 EElse
" U2 [( Z3 c. P: f& eFor i = k + 1 To n
3 Q; ]6 {2 h0 m1 }l(i, k) = a(i, k) / a(k, k)8 X3 n+ u, [( d  {' U
For j = k + 1 To n + 1
; X2 f) o) A: a$ \# O1 ta(i, j) = a(i, j) - l(i, k) * a(k, j)* ]( `% ~& E- L9 G3 y) d  i' O
Next
  \8 E, s. T) k- e6 D) eNext
9 e4 b: [, N2 E1 ^' FD = D * a(k, k)
5 ^8 R! S+ g  H% X2 d. Q4 e: R/ hEnd If
0 K6 T. h, [; m6 ZNext k '消元结束% y: p7 Q4 }7 f1 _0 N0 h0 l4 y+ x
If a(n, n) = 0 Then3 h$ P1 d8 F( O5 x. T* V
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"+ t/ l9 L* a0 F) D
Exit Sub+ e# C* m( a( `' O
Else
; {9 p3 c/ W) @D = D * a(n, n)
' ~" G2 @+ C1 Y4 b+ y0 WEnd If
* n( d) `3 M4 M& y4 s0 H( hPrint "--------------------------------"
3 ^) j, e. y' L! _" RPrint "系数行列式的值是:"; D5 N9 C4 _/ H$ V; V
x(n) = a(n, n + 1) / a(n, n)9 ~) K0 H) k0 A$ V- i  o- t
For k = n - 1 To 1 Step -1 '开始回代
6 C: V% w8 U, V) _8 dFor j = k + 1 To n4 E$ F3 a5 m$ u6 ?- R4 p# L3 V  k% s% g' ~
m = m + a(k, j) * x(j)
, `$ P; R% C; L- h% e1 VNext j/ H- s4 i; S# t0 @. s" L3 n
x(k) = (a(k, n + 1) - m) / a(k, k)# `; ^7 X( u( v8 E/ u) n
m = 0/ A. ^# t/ \7 F4 M: a
Next k '结束回代, x% B) G2 z+ w8 R! S
( j8 Y, p; ?) h4 C
Print "--------------------------------"
. m/ L. l4 C/ b3 s$ APrint "方程组的解如下:"; {: {( k1 T% m( @( H
1 _) }9 v% h* C% {+ y
For k = 1 To n  D3 r% }+ i9 Q: Z+ R& {+ W4 A
Print
, z' R) v0 e1 J- HPrint "X(" & k & ") = " & x(k)
" ~6 R' q2 z9 [# I& BNext k5 O3 ?7 m8 Q* |
Print "--------------------------------"2 P" a, T- @" _, p
Print "其中各行Ax-b="$ E0 b1 |" f* Y3 q- u& N
Print
6 A" Y+ b; ?4 b3 F1 T1 q* W" T$ [+ QFor i = 1 To n  h0 \5 ]& ^6 }! Q) |
t = 0  f/ Q' C& S# J/ q
For j = 1 To n
( ]3 K) r) c5 nt = t + a2(i, j) * x(j)
' L5 z; Y9 a7 o! v; }# ^Next j  v2 @, x6 V+ s
t = t - a2(i, n + 1)  M  ]% `" S2 k3 q5 R3 C
Print Spc(5); "第" & i & "行:"; t
3 A- c1 \* |# JPrint; P& C! o7 L4 C; N+ q: u2 c8 ]
Next i. D; Z) o' Q: o7 N! ]8 D! `
; j4 {. x% d4 J( V" j9 g
End SubPrivate Sub gauss_Click() '高斯消去法& c! S) M0 x7 L8 f
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single2 r9 D  w, ^# T' ]- {
i = 1: j = 1
% \+ M( T8 s2 ~8 V! X% ^7 I5 zn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
) [+ x9 F1 ~8 [9 Q$ @8 Z' k* lReDim Preserve a(1 To n, 1 To n + 1)& x! k5 G: f( K% O; ~/ _6 T: P5 s
ReDim Preserve l(1 To n, 1 To n + 1)
, R+ p1 E$ z4 d1 `8 C+ z6 e0 J& LDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single: D, j& g/ p" Q- I3 G  {0 [
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
2 r, A+ `1 }) N' c' o- `/ X: HFor i = 1 To n
4 {0 X2 \- M4 U+ _For j = 1 To n4 a$ ^  D2 ~. Y3 Q9 D, s
a2(i, j) = a(i, j)
' y0 K9 k2 M6 R* r  n/ ZNext
! s. {: E; J/ s9 \Next '将a()的值全部赋给a2()
7 o2 o1 Y& S; H& a( T4 Dm = 0
8 A" {$ e' Z; RD = 1
0 c) F# |6 w' o( m) ~7 f2 Y; wReDim x(1 To n), [# |% H4 d. ~9 x# F' i- Y! F
Print "--------------------------------"* {8 @" U# p5 f! H7 h  T
Print "您输入的增广矩阵如下:"
* j: g. K/ a) l# H; t4 r. ~For i = 1 To n. B" Z+ ^. B" r# V
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
$ E% l2 X2 U- I- H6 YFor j = 1 To n
- t1 m# I& `8 K) c" Sa(i, j) = Val(Left(s, InStr(s, " ")))% M& G2 |. ?* g& b1 q
s = Trim(Right(s, (Len(s) - InStr(s, " "))))" e1 W# j6 ^; B
Print a(i, j);# x* t& w/ c5 {+ g
Next8 @1 Z  I' V7 _7 C3 Y
a(i, n + 1) = Val(s)# E: C) e5 Z+ w3 v% j. ^
Print a(i, n + 1);! D  o! g6 @8 s' t* Q
Print% Q4 }& b5 g6 A1 [$ W8 b; x
Next* x2 i, M6 V/ s- b

* U& i- i. x% A8 V/ T9 z- wFor k = 1 To n - 1 '开始消元4 ^: a$ E! |4 p2 M& x2 ^. K& P' z
If a(k, k) = 0 Then4 K# B0 F3 x/ W, T
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
7 N' X$ P# z3 `# C2 D- C3 wExit Sub
" P# |  i; ~+ OElse
* w! _; [+ H' ?0 |9 t* M- rFor i = k + 1 To n
; z/ |2 F( p4 w7 \  m# ?' R8 d- zl(i, k) = a(i, k) / a(k, k)
+ K" y1 a" M( BFor j = k + 1 To n + 1+ ?6 ?+ A" _2 _4 Y
a(i, j) = a(i, j) - l(i, k) * a(k, j); p" p/ e9 I& |% b' ]6 _' @
Next7 e! s5 B4 l4 O$ I1 d# F, |
Next3 ~9 ?! f. m2 f1 T5 `+ v# y2 }7 ~
D = D * a(k, k)2 i' `4 U6 E4 s/ \+ v" k8 S
End If
, r1 x- ]. T- \* K+ FNext k '消元结束
/ t! T) O: z1 k+ Z. t$ YIf a(n, n) = 0 Then- B. g( g% [* Z: Y! p; D
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
- Z* r  U6 `8 U% ?% L( rExit Sub
/ p" `0 _" P/ D! \$ k# |Else
1 e& ?, e4 t- p: _9 x' V5 [D = D * a(n, n)
$ D* C+ p3 z. f- |- DEnd If& J$ e) t# g' d9 x* e8 J) f
Print "--------------------------------"
* }0 B; U' S% WPrint "系数行列式的值是:"; D
0 a4 x5 J6 U4 |2 `% u9 bx(n) = a(n, n + 1) / a(n, n)
8 e' l6 U) H4 k8 o3 ]) Z* MFor k = n - 1 To 1 Step -1 '开始回代
* F, y3 s' t" OFor j = k + 1 To n
. E3 ]3 U8 I% B5 [m = m + a(k, j) * x(j)! a# R& K  b# J! e" S" B  m! F
Next j
3 i. z, h4 T/ r# e1 |& G7 |x(k) = (a(k, n + 1) - m) / a(k, k)
# r  c; q# H; ]$ ]" J/ F6 Wm = 0# ~, M4 K+ R1 I5 X! u
Next k '结束回代1 I; Q% Q5 f, _! S# q

' `4 e0 g9 v) N7 @: k+ }) k3 |( _Print "--------------------------------"
1 Z- B; L& }1 {3 g9 S. Z9 RPrint "方程组的解如下:"
) D% d2 D, u& v' a! I' G; O$ u
% Y0 E' D, @+ H9 H% s. L; M8 UFor k = 1 To n
' C% t% n9 Q: ~, ]4 aPrint
2 E5 u4 X* A9 O0 b$ ^% C: APrint "X(" & k & ") = " & x(k)
( `1 \  q2 v1 V5 o2 d- ~Next k3 @1 X' h' F) Y3 V
Print "--------------------------------"3 C. [, ^2 D* s& q! D# @
Print "其中各行Ax-b="
! L3 e. {& e! D; }3 L/ @. QPrint
8 s9 z/ A% |& [8 R! Z' MFor i = 1 To n' m0 C! B- ]/ G7 Y! B8 J
t = 0
4 Q" C2 S" q3 iFor j = 1 To n$ s: R( R$ |# r4 P
t = t + a2(i, j) * x(j)4 U! B4 m' C+ ?8 _8 i
Next j/ {8 G" h1 \% q
t = t - a2(i, n + 1)( V- \  u7 V' N* Q  `8 m( d  p
Print Spc(5); "第" & i & "行:"; t+ `: s" R0 @1 T: k
Print& H3 m4 X9 e; S* ~
Next i! j( o/ E- d% {  [! [. L: M

3 i) f* R% F4 wEnd 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, 2025-11-1 16:07 , Processed in 0.545760 second(s), 68 queries .

    回顶部