QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法0 R/ f8 g7 h$ y3 n7 t* y
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single# W+ @) [; i% V" b& y: i% M
i = 1: j = 1
3 R( a5 G$ B. X# U& Z  p5 Sn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))7 i  c' q* _* v( G0 X9 Y! r
ReDim Preserve a(1 To n, 1 To n + 1)% n' n4 l) }& @$ D* }7 X3 f
ReDim Preserve l(1 To n, 1 To n + 1)
- k% t0 l- w1 C- h% y& ]Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
9 w7 |# m( f1 y* _0 |0 jReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
4 D% H9 K7 X7 V- [- p/ |. c; `For i = 1 To n
( [: L+ `: e) o* E8 b5 q1 BFor j = 1 To n, |; A2 F; D% G* F0 J9 e4 i) _8 o
a2(i, j) = a(i, j)
( T- Q; P: R9 F( |Next/ V# q6 N2 V3 }9 M2 q9 P
Next '将a()的值全部赋给a2()
! r" [* r, E6 t# K$ k( \( Y3 Mm = 09 F. J" [8 G! p7 e8 N9 D
D = 1
! s7 X: S1 y6 T% uReDim x(1 To n): H5 j! s* ^$ Z  h9 k9 [% A0 W
Print "--------------------------------"- Y/ E7 s0 Q) n1 r# ]# L" u
Print "您输入的增广矩阵如下:"( R! r7 O2 I6 r( |) D- [, w! H
For i = 1 To n" R; h) o3 G7 x5 P" j& |
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
# d) f" J" Z! P. \For j = 1 To n
% J6 e% w) O; T5 @7 ?a(i, j) = Val(Left(s, InStr(s, " ")))8 Q* G3 ?+ I8 V: ?
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
% ]% c. T6 e( UPrint a(i, j);* H' |  p, z0 F, e
Next
0 y2 U+ [7 T6 E, d! z1 u1 k7 ]a(i, n + 1) = Val(s)
1 |2 n- r' V5 F* dPrint a(i, n + 1);
5 j. U' G4 l+ r, UPrint
" a, ~1 E$ p2 q/ lNext+ b: F  L% B: b

$ @) T6 `& g3 \( b! l1 zFor k = 1 To n - 1 '开始消元6 |1 A4 q( p$ C& ]4 R# g
If a(k, k) = 0 Then) f8 e8 w( h& P
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"0 M0 k% r" z8 I+ ^
Exit Sub
) ]  ]1 u& t% O0 e) OElse
8 M; k; c% P/ @9 f. b9 U( EFor i = k + 1 To n
7 J% y- @8 t+ A1 vl(i, k) = a(i, k) / a(k, k)
- D2 P4 {$ J6 p0 ?9 k; X& ]3 zFor j = k + 1 To n + 1
, h. B2 s8 O4 S; ^% g; }$ U* za(i, j) = a(i, j) - l(i, k) * a(k, j)* v3 A5 i. \: G+ k4 @$ b8 _( D
Next' ]0 z" x9 z1 n$ ]
Next. j' G0 {% l+ `+ F7 L5 H+ Q) d
D = D * a(k, k)- ^$ D" v; r( K9 v) F6 d5 e! b
End If8 w% F2 j: W0 i4 Q
Next k '消元结束2 e# l( A0 D. O# Y& r
If a(n, n) = 0 Then
' d* a( I! f5 ]* _MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
2 I  U4 }, i3 ]1 MExit Sub
( b+ i- i1 r$ u$ O/ @/ G8 {Else$ i: W5 Y6 l) L0 Y6 k8 H* p. l
D = D * a(n, n)
+ k" f, b4 ~) y, WEnd If$ c" W$ A' @5 C8 l% [; d
Print "--------------------------------"
) _. ]- ~6 e, ?  vPrint "系数行列式的值是:"; D
. E4 v& N, r: n+ y, @0 e  _! Dx(n) = a(n, n + 1) / a(n, n)
0 y8 r- \3 ~1 k) ~0 E/ O/ EFor k = n - 1 To 1 Step -1 '开始回代2 Y$ ]$ n3 {0 C
For j = k + 1 To n
2 ~2 P' y* p9 O  J  }m = m + a(k, j) * x(j)
) \( u0 d0 ?5 q6 J0 a3 Y9 N9 iNext j- p+ s/ I: W" w3 I3 |
x(k) = (a(k, n + 1) - m) / a(k, k)
0 C: [2 n3 l' ?% v& N1 }# ^- Pm = 00 }; C' @+ S0 [7 \* b6 f5 Q% m
Next k '结束回代
- G: M. H5 C! ]7 ?+ n( [" ]
8 Y6 \2 F; W8 D  dPrint "--------------------------------"
9 P% w' K7 x9 M( G5 ~( F/ {Print "方程组的解如下:"
- Z- m9 o0 E, r! H3 t5 [) ]
) l, d; Y6 o, D" L" `0 AFor k = 1 To n! z5 {; O: `, Z" o* N7 @9 O
Print
  z: W! z5 D6 [& K! v% T+ gPrint "X(" & k & ") = " & x(k)' v0 p( c, [+ |5 o
Next k
; f, T4 ~; s5 R: lPrint "--------------------------------"$ _1 R, H  ^2 y% |* V6 Z! Y: X
Print "其中各行Ax-b="
* s. o7 K2 e' S% O! w$ ?Print9 B& `6 m* N5 h# w( |/ a& e
For i = 1 To n
  O3 @; ]4 [3 }" o. Q$ tt = 0
2 J1 v$ M; X3 e  }8 X/ K3 JFor j = 1 To n( O7 [8 W4 @3 Y5 c! F
t = t + a2(i, j) * x(j)( ^- F& y) [0 Z! c- x/ k. [% k
Next j6 q7 ~2 a4 m( p# U
t = t - a2(i, n + 1)- T3 R! v) T! d+ b$ }
Print Spc(5); "第" & i & "行:"; t
* N, W/ ]- e4 R: _4 p% YPrint" k. C/ P& \8 b8 V0 Q5 T
Next i
* i  r& ^) |& w* k8 @9 Z
+ ^5 M9 R6 a7 n8 ~End SubPrivate Sub gauss_Click() '高斯消去法9 M; C5 X9 \( F8 j+ @" a# P: f9 A
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
2 }, H% ~) n/ ]8 G1 m, v# bi = 1: j = 1
  l# ^3 c: {/ H! E- n1 V8 s* w5 i: Hn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
" I  k  `" P% \1 ~. \" \ReDim Preserve a(1 To n, 1 To n + 1)
) B9 Q+ O9 ]9 P3 r, a4 S3 \" [ReDim Preserve l(1 To n, 1 To n + 1)7 z: F4 r  b3 [! B0 m" f& B  g
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
, F1 c3 w1 Z9 W8 R# }& v2 {- G* sReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
6 L; k7 ^: l3 vFor i = 1 To n
" [6 `* r& {4 Z3 Z# pFor j = 1 To n4 \. T, Y  [6 k" E, \
a2(i, j) = a(i, j)$ u0 n" J4 o* v* [
Next
7 s, G3 }$ P7 E- X+ H% v- }Next '将a()的值全部赋给a2()
3 U) v/ h1 `5 ~) gm = 0% M  Y8 I9 o5 K+ E' a
D = 1
8 K9 q0 K' {# d7 z1 EReDim x(1 To n). B6 `9 c% O* u/ V" G/ S# Q
Print "--------------------------------"
( F9 o6 Y( ?$ d* J) S+ APrint "您输入的增广矩阵如下:"
) ?: n/ C( b2 t( RFor i = 1 To n, j9 q  K6 Y8 e( q
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
" V  Z  \: t2 ~% CFor j = 1 To n
" ], q, @/ t; |, T3 ja(i, j) = Val(Left(s, InStr(s, " ")))0 M% {; Y0 F( G- j. `3 B5 M
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
8 _; ]4 v3 g4 G4 m$ b+ M: KPrint a(i, j);
8 ~+ N6 t. G! {9 G! ~Next
1 Y8 B$ J8 r; k& Ha(i, n + 1) = Val(s)
; K* z" k; ?; x' a- qPrint a(i, n + 1);- o- s, l: z$ @6 j
Print. ^- A/ A" P' A" k& }1 Z# A5 L
Next
, y8 j8 J" R# F/ S( Y3 X9 ?0 j
7 S) y: Z3 b" h3 ?$ JFor k = 1 To n - 1 '开始消元
& _7 a: u. u3 u  i+ }: dIf a(k, k) = 0 Then% s( G# p0 p% M. ~8 k6 W1 ~
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
2 y. z# x  z2 O* @' gExit Sub
! Q. ^: \: k+ ^/ gElse
  T+ D- N# p4 G2 jFor i = k + 1 To n/ i0 S2 ~' q: z
l(i, k) = a(i, k) / a(k, k)6 `; p! S, m4 ^
For j = k + 1 To n + 1
3 u5 u, w1 K* w0 X( x) J( za(i, j) = a(i, j) - l(i, k) * a(k, j)
6 m8 |0 {9 H3 r- zNext
8 U! e# Z6 ?0 C1 @Next
: R4 [+ K$ j5 d/ E" g" w% R! \% cD = D * a(k, k)& m2 \- G- R7 r9 J# O
End If% h' W5 i7 h5 A5 f8 B8 m
Next k '消元结束: N* D* Z) m! Y* [/ R1 x( W( Y, k; {
If a(n, n) = 0 Then- m0 N7 T3 R  m9 J' J9 u
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
# l1 l: }. G7 v' JExit Sub
! ]: n' f6 r" \! a/ y2 T0 I$ p4 p( @Else
) x+ d# W2 G/ _" j6 x; A% jD = D * a(n, n)
! g& Y8 o( j! `) tEnd If
) O0 O( r# c/ k: V, t* IPrint "--------------------------------"
( q* L6 S; }( t7 I# m3 KPrint "系数行列式的值是:"; D
/ N3 B) R7 n2 B& F' ^x(n) = a(n, n + 1) / a(n, n)
, @4 w' q- }9 D6 H8 dFor k = n - 1 To 1 Step -1 '开始回代
% ^: x) k* A: \, b3 uFor j = k + 1 To n" s. I; h7 A" Q
m = m + a(k, j) * x(j); [7 k+ q6 I( d  K0 y
Next j& G6 q) N4 ~0 b
x(k) = (a(k, n + 1) - m) / a(k, k)
2 b1 I7 I' p( m. Am = 0( M5 h& H( t" K! s  i; r* V
Next k '结束回代
6 f! Z) l# }7 i0 w4 A! b8 [3 A6 F2 S8 P& w! w
Print "--------------------------------"; J  W: f) L( G4 l: d# V
Print "方程组的解如下:"
  W3 |- ^1 o6 X
# p4 k0 O: @/ q7 \4 R7 S9 h4 mFor k = 1 To n- A% Z  Z( t2 c
Print" Q, ~. Z( k6 [; A8 ~) B" n6 S
Print "X(" & k & ") = " & x(k)
( x6 ~4 k+ H4 W' O3 c+ [Next k
' z0 C( N1 l  \* RPrint "--------------------------------"
. u! f/ j' }, m) K8 ?8 OPrint "其中各行Ax-b="4 R4 |& C& ~& p
Print* }1 B- D" ]: k( P- ^) x
For i = 1 To n3 i7 c7 z- y* I( \
t = 06 |; Z0 `8 t* Q8 j0 l
For j = 1 To n" L( @5 N+ d6 }, u# h" r
t = t + a2(i, j) * x(j)
+ B' P( L5 s! g7 g0 xNext j
; \0 M% k9 t: G( `* G' k  S# Jt = t - a2(i, n + 1)
2 U) Y3 `' [  K3 ePrint Spc(5); "第" & i & "行:"; t
- {& H. e6 l, s# B  M8 u% B% a% uPrint
& ]- G/ @0 d. q& \- uNext i4 j# W' J7 W% L, L0 a& m

& L# e/ m1 W9 a6 ^; ]) tEnd 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, 2026-1-8 10:15 , Processed in 0.584184 second(s), 73 queries .

    回顶部