QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法  C( U* k5 D1 M, F/ ?
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
9 V2 V: m* m9 l9 r$ d- qi = 1: j = 14 S7 n# \: x  R4 C0 l
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
2 |) g0 K' f7 f  Y5 `6 n7 r9 _ReDim Preserve a(1 To n, 1 To n + 1)
* _4 A5 Q% o( ~9 |ReDim Preserve l(1 To n, 1 To n + 1)) R0 E0 B' A4 V: s+ n  W# [' t/ t
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single: u6 }- j: s9 d7 b0 L0 b6 o
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
* F; p7 L  H5 n/ R1 T6 P2 _For i = 1 To n
3 K1 d2 \) u& r! E# f0 pFor j = 1 To n. \4 K/ d& ~5 O, T7 k* d
a2(i, j) = a(i, j)8 |" g  I- |! w; y2 I& g% P
Next0 a( {) ~9 q, q# Z; ^8 [% q
Next '将a()的值全部赋给a2()$ U% L7 n( t- p" p+ Y5 m
m = 0
9 o1 X' I" D: ?) y; eD = 1
" D% V' B7 p' aReDim x(1 To n)% B- e0 c& \, o- S- n7 ^8 G! e
Print "--------------------------------"
" N/ V+ m3 N1 b1 r* j2 o+ J; @Print "您输入的增广矩阵如下:"
; H1 ^2 d, E" s+ }& \+ FFor i = 1 To n
" G$ b# j/ d# `( p3 c" q2 Os = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))4 v, I" `% ^5 G. J4 x
For j = 1 To n' y5 X; K( e7 l4 o' k3 Q
a(i, j) = Val(Left(s, InStr(s, " ")))# y' l. B  O/ {" B3 C
s = Trim(Right(s, (Len(s) - InStr(s, " "))))* v; }. r) W# L" X& c2 B7 I
Print a(i, j);$ Q8 E( h8 ^3 S0 Q# B/ U4 A
Next
) E8 f, B2 t. N  w# G( h7 ca(i, n + 1) = Val(s)- V1 W* e: q1 p1 j+ b* b
Print a(i, n + 1);3 M6 K6 Q* x5 w- j
Print. U2 R, `- V( {" I
Next8 P& q, g0 Q  x: V

4 P- T- h; r1 j( `/ f% hFor k = 1 To n - 1 '开始消元, C/ s6 m5 q; C/ @7 e' Y
If a(k, k) = 0 Then, a0 o0 l$ Q$ @5 N: W
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
- x0 p/ q3 \# i7 FExit Sub
# u# R0 c7 y; L7 C8 s  tElse) D# a/ V% S- o. q5 n; I
For i = k + 1 To n' _% g- d- V7 q5 y; P4 P) [
l(i, k) = a(i, k) / a(k, k)# S' }; A2 f" b( e+ p. [
For j = k + 1 To n + 1
  U, H5 Q0 }  d- Wa(i, j) = a(i, j) - l(i, k) * a(k, j)
3 M" ?/ Y( q2 A8 kNext7 p$ v' M2 o5 k/ y
Next3 ~" _5 v+ o* f0 e; a# F
D = D * a(k, k)9 \/ C, h& Z( n8 c
End If6 N4 c" T/ ^2 z) k5 k
Next k '消元结束
, B2 C- D& H8 `( A1 a; t( q6 m8 G# bIf a(n, n) = 0 Then9 m+ L" ~% _! a6 F* c
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"5 E3 F( l+ T8 q. _! b2 ~
Exit Sub, v% O+ R4 G2 v0 c& ^( C
Else
+ A$ Z+ t* T- i1 u/ F7 v# [8 MD = D * a(n, n)6 `% u' r6 _; i4 \
End If
, M2 Y1 T( K7 }+ m/ dPrint "--------------------------------"8 q0 q& X/ u/ O; P# _# H5 N
Print "系数行列式的值是:"; D% O6 G$ ?) A0 l( K
x(n) = a(n, n + 1) / a(n, n)  I7 z0 x2 N8 w- z# G) `( t( F/ F/ v
For k = n - 1 To 1 Step -1 '开始回代
" n# G# |, s& B2 `# \9 R4 qFor j = k + 1 To n) r3 }6 Y# y# J' }
m = m + a(k, j) * x(j)
  |4 g8 w3 R. [; Y+ h$ X  CNext j7 z) B1 \: ^1 M4 E& V
x(k) = (a(k, n + 1) - m) / a(k, k)
0 |( z- Q' L# C+ em = 0& s5 D: V4 O2 H: T5 p( R
Next k '结束回代) _& q! z( ?" t0 R3 K

6 o( c* u1 _- V* [Print "--------------------------------"
/ v; i. a. J! k- h: IPrint "方程组的解如下:"
0 D1 j4 g- b' s- M4 _0 A. f3 B" k8 {" i: z* J" t% Z/ ~
For k = 1 To n
# H8 t/ k1 G3 l2 Z. n$ APrint
+ P& I$ O8 J: M- Z1 r: y+ pPrint "X(" & k & ") = " & x(k)
: ^# }5 X9 \- k/ y: m( e4 i7 INext k
, ]; ~& H4 P3 N; b4 IPrint "--------------------------------"
8 J/ z/ _! G2 \6 }/ |- H6 H% \Print "其中各行Ax-b="* e! b) @( E# ]4 v
Print+ Z6 f& B& P6 e0 Z- w0 R9 N
For i = 1 To n/ N* C& `8 E5 `1 o
t = 01 n  U( l4 Y; Y1 \0 x; ^' L. _
For j = 1 To n+ w" z# ~3 F. `- @
t = t + a2(i, j) * x(j)
1 k0 D! _1 D) X% \Next j
9 w2 F8 L/ S  j0 f+ t, `t = t - a2(i, n + 1)
2 }3 |3 [, v5 A0 \Print Spc(5); "第" & i & "行:"; t
' B$ `% p- a, e2 d2 M: hPrint0 U6 Z4 I) q4 D7 o4 P
Next i
9 M/ v# B; u; v6 s* f' x' A; n; |# h8 q( {
End SubPrivate Sub gauss_Click() '高斯消去法) J6 b) j4 Q3 l4 ~5 q
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
$ |) k' ~4 x0 v6 D( E% N) j- Ti = 1: j = 1
9 M6 E/ C* d( [, \0 I; Gn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
5 C1 P* B" I4 ~5 x0 {  YReDim Preserve a(1 To n, 1 To n + 1)
1 T) d0 C5 U) ]( Y; zReDim Preserve l(1 To n, 1 To n + 1)
+ Y- R& A- `. K9 JDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
# M9 K+ J  A- c. g. ZReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()2 X! A: V- Y# a" [7 I& E
For i = 1 To n, e  w) a% e# x: g$ X
For j = 1 To n
) v) C" Y( J/ ]2 O" ]2 qa2(i, j) = a(i, j)- m" b! P) i0 d5 E
Next
" B) {- X. _9 a0 J3 DNext '将a()的值全部赋给a2()
# J$ i. c2 r% z! s: `/ z/ C! Z4 Mm = 0
) x  c0 z! m9 XD = 15 [) b/ ^  K/ d: Z. {
ReDim x(1 To n)
7 ^2 A* L4 h  B+ x+ _Print "--------------------------------"
7 Q; b, L3 b: S# y' i8 e8 ~1 j3 C8 sPrint "您输入的增广矩阵如下:"
, p4 v! B: K* _" O6 ~For i = 1 To n
: c. }! R; f1 Y, ^$ Bs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))- T: |% S/ G# q+ A0 D! O& l0 J$ M
For j = 1 To n
6 W* F- n2 K3 Y! P! j0 h: Ia(i, j) = Val(Left(s, InStr(s, " ")))% x- o- A) w) S" @3 H0 e9 T
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
# u$ c: r: G: }' hPrint a(i, j);
+ Q1 ~6 O% i9 [! F) GNext
: B% C. y6 G& M$ N7 b0 A& j6 |( qa(i, n + 1) = Val(s)
: k& _. |& @+ O: N& t5 QPrint a(i, n + 1);
/ D. X8 W% }# d6 e- a/ |1 sPrint8 j3 o5 E7 `1 V; E7 A0 F
Next' g  H/ \& D  `+ ~3 J
. J# c; O7 j# l( z% `
For k = 1 To n - 1 '开始消元, f) u% Z, L  O
If a(k, k) = 0 Then( j% g! ?2 P3 |6 ]/ G
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"+ x9 v) f% o2 g
Exit Sub2 o7 C2 k0 _2 `- v% E# U
Else
; W7 h4 {9 A; w* T& M: C& X. ?  BFor i = k + 1 To n1 f, ^. [7 p' T' i1 K% o" `9 c
l(i, k) = a(i, k) / a(k, k)+ J$ Z9 l  Q1 l( {" L$ j* Y" I
For j = k + 1 To n + 1/ V1 K* T5 a0 z/ e: e7 M
a(i, j) = a(i, j) - l(i, k) * a(k, j)4 F" r) X( q8 p/ b- M% J% P
Next
; n( Y6 N  V& z, N& K  u: yNext
* R' u0 W7 j9 J( BD = D * a(k, k)& ^* e0 r6 d$ r9 ?' P, @
End If% J- a: t* B+ a8 I8 Q+ M
Next k '消元结束5 T4 h6 s' x! I7 t$ V+ |' Z; a+ g
If a(n, n) = 0 Then
( d6 q" f* W' c) k+ o$ AMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
6 H+ q. Z% x1 g  K; {0 T* e3 W) rExit Sub  c2 [% U5 H! b$ |; s
Else0 a9 w3 F5 I! x* P. o
D = D * a(n, n)0 @) |8 Q# Z; w" A  ~+ `9 O
End If) T" D: `- F! M
Print "--------------------------------"+ C  w$ a$ Z" o/ B- M; p
Print "系数行列式的值是:"; D
. R& J" Z" C- `9 b$ qx(n) = a(n, n + 1) / a(n, n)
1 X; p( ~% N, h. YFor k = n - 1 To 1 Step -1 '开始回代
9 Y5 v* p1 c+ I  M2 S8 q3 [For j = k + 1 To n* X4 D- ]% g  s
m = m + a(k, j) * x(j)1 m3 z& d" i  ]0 o* n' {! e" m
Next j
2 j; W  b3 K& I# d6 Wx(k) = (a(k, n + 1) - m) / a(k, k)# {1 Y5 z0 ]3 L0 x, C6 N
m = 0
+ C; Z$ x- y7 }1 tNext k '结束回代
% ?; c' L5 f( Y$ j! |( v5 e
3 T0 }2 L3 G" ^+ Y; N( JPrint "--------------------------------"9 ~( K% N; J7 k: w
Print "方程组的解如下:"
9 v4 |5 U8 R* f' d% t* _
, R9 n* k! U& M' E8 fFor k = 1 To n
9 ?6 y$ e: i+ ~* O5 j5 yPrint! x; p- I) ~  u( f7 o' [7 Z& I9 w$ V
Print "X(" & k & ") = " & x(k)* V( V9 O! n; Y) o8 h2 x9 F7 p1 H
Next k, x% l+ \* Q- t$ ~$ ~+ s2 H2 b1 p% l) {
Print "--------------------------------"1 {% R9 E* c; q& t: l- p* k) g
Print "其中各行Ax-b="5 i: x% t6 P& ]- p* c
Print% G* m7 ], c2 c- g+ m- f" U
For i = 1 To n( U3 w! r  L: W, y6 u4 T
t = 00 j9 d+ T! r8 |/ t( z1 Z
For j = 1 To n
4 `, R+ D# X0 p4 @+ }- ?t = t + a2(i, j) * x(j)& D0 y& B- E, ?  p) O
Next j
" J5 |2 S" H2 n5 O, X. X( Et = t - a2(i, n + 1)+ `4 C& ^( A( c- {
Print Spc(5); "第" & i & "行:"; t
4 M- Z$ R; x6 Z( v% APrint
; k, e4 [- \$ t* X! ?: h4 Y4 hNext i  q9 \9 _. @/ c8 ]
2 ^: R# g% g' {4 k$ j2 p$ [
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-7-18 00:00 , Processed in 0.456565 second(s), 72 queries .

    回顶部