QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
* Z8 [. D7 r7 Y; ]+ a: ]& KDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single+ f  N- h  U- N  @
i = 1: j = 18 E( s& r% p5 p, h: a- X. W  n
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
0 n% H8 d  S1 s4 ?) G# bReDim Preserve a(1 To n, 1 To n + 1)
  F$ N  b( d  F& ~+ @. X& `+ g2 CReDim Preserve l(1 To n, 1 To n + 1)
5 _; _$ U% W9 X6 u+ ~2 y9 k9 @& U2 Y% qDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
6 S7 x7 L4 q* O) w7 ^ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()9 r2 W2 E0 v8 Q/ j1 g, Z
For i = 1 To n4 C: X& o0 f* P' w
For j = 1 To n6 n% _7 C7 P5 |0 B/ A" U
a2(i, j) = a(i, j)
7 U9 L' M. [' |$ MNext* m+ b2 c1 X& L. X. ?8 l3 }! t
Next '将a()的值全部赋给a2()" f% d  @' g: [/ L
m = 0
+ B9 `( P/ d  F  d2 ~* M) N1 uD = 1
* `) f7 ~  F2 K) MReDim x(1 To n)9 z/ n5 l1 u6 P( ^) D0 ?) q
Print "--------------------------------"( f/ M3 N: k7 |7 Y0 I4 p& n
Print "您输入的增广矩阵如下:"
) F7 l0 [0 h# E+ \For i = 1 To n9 A( W# B8 B6 i% ]* S' [& M
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
, _, b  Y* ~0 aFor j = 1 To n
9 s& r4 O+ c9 }0 T  v% S1 i* q# V7 Ba(i, j) = Val(Left(s, InStr(s, " ")))
) C% a- Y( c4 Q  {: Q2 gs = Trim(Right(s, (Len(s) - InStr(s, " "))))
' z' T+ [1 U8 N6 ~/ J4 {Print a(i, j);/ p( F1 }+ n, h: H, W2 _
Next3 Y% f. w& T/ J$ Z3 q$ M
a(i, n + 1) = Val(s)1 [3 M2 p7 L& \& Y: w
Print a(i, n + 1);& v! b& l( `6 n0 `
Print1 `0 T- z# E, N. }+ n
Next
2 Z# H8 U4 m. N- J9 T. R& ^- P0 y) V. F- A+ Q, a! Z3 _
For k = 1 To n - 1 '开始消元
' b" v, h( y+ v0 {" g% d/ QIf a(k, k) = 0 Then  t4 v1 }! ]. C  x, L8 a
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
# l# M% I3 t4 i1 B# c5 U4 f5 kExit Sub
0 v3 J5 z" q$ a' N$ P$ m% tElse1 ?/ @. M  U$ `. K6 b
For i = k + 1 To n
. ~. _) \3 ~% d' e) N  cl(i, k) = a(i, k) / a(k, k)! b. F4 h' _# w8 |  N5 g
For j = k + 1 To n + 1
. W* j$ E  m# {" w9 n) La(i, j) = a(i, j) - l(i, k) * a(k, j)
, S6 Y6 F4 k5 KNext
6 Y0 B* J5 W' ?0 ^Next
5 @* E0 ^' y! s9 W( z+ v+ VD = D * a(k, k)
8 n( V' d  i" m4 w% H: KEnd If! u# E1 m' t$ X5 y1 \* C  _( h& E$ B
Next k '消元结束2 Z  d) W: y( c( f+ |& E7 A  L$ ]2 r
If a(n, n) = 0 Then+ K- P1 k( M) p: ~* L0 A
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
. C2 S+ W# f! z0 M7 hExit Sub
; I' ]6 `4 o' ~$ `) f) eElse$ G& Z0 L' W; P: X3 S. g
D = D * a(n, n)
/ U. B+ g- c. M$ ]" w8 D. GEnd If3 i# D1 N) ]' G
Print "--------------------------------"
; g5 ?6 f. G3 jPrint "系数行列式的值是:"; D% E1 S7 [+ y# C) r1 I  ?
x(n) = a(n, n + 1) / a(n, n)8 ]0 R5 ^% A  v( |3 `
For k = n - 1 To 1 Step -1 '开始回代3 Q4 W3 R/ c: _- M* h
For j = k + 1 To n4 Z: `9 P( ]( D
m = m + a(k, j) * x(j)# f4 o! A0 P( M3 `6 ?% o- p
Next j
  k' G3 c1 W" k5 G1 |x(k) = (a(k, n + 1) - m) / a(k, k)) Z  z- g, @) y9 Q7 O
m = 0+ D) _) ~9 g2 \4 ?/ ?6 T
Next k '结束回代
9 v) g- u% P4 }; z$ p$ `+ W
# E2 G5 N! B! x( `& U" g  |$ MPrint "--------------------------------"
. f2 g/ b4 Y( g6 _& HPrint "方程组的解如下:"
# p- Z6 d) @: n/ f$ o9 T* p7 q
$ E$ g. Z4 @$ O$ M! h4 Z& Y* ZFor k = 1 To n
$ m% D: \( z1 s; bPrint
) e; R0 ?3 S7 x4 r6 l/ w, b1 M6 K' GPrint "X(" & k & ") = " & x(k)
0 Z7 }2 A  m8 Z& jNext k
/ Y* m5 k. o4 L2 u/ E9 ~Print "--------------------------------"
. b- O' p0 H* n& U: oPrint "其中各行Ax-b="
) |* ^% f1 b; k) L: iPrint
3 z$ m5 b9 j# k2 z* Q' P. W3 S1 AFor i = 1 To n. B% l% h; F8 B# @+ k. R6 b% U: D
t = 0/ l4 P3 r1 _8 n  g
For j = 1 To n
8 V' r, r# J7 W9 G. Zt = t + a2(i, j) * x(j)4 I3 F# b: F2 m3 w, q6 V" I, f
Next j: r- `6 X  W) h$ z  @, S6 K
t = t - a2(i, n + 1)* ?; F3 i  Y7 ^1 D
Print Spc(5); "第" & i & "行:"; t  f! b1 b0 M7 m  [& m2 W3 r
Print# B9 o5 j0 \; {* x% S
Next i
6 u0 O7 B! q1 O8 [9 F2 n' j- ?  W
End SubPrivate Sub gauss_Click() '高斯消去法
: d' L4 T. J) i- ~( dDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single/ X7 j7 N8 }$ [  r" R6 }
i = 1: j = 1
/ _# h( b6 R! z7 _" v/ An = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
6 k3 t, J2 c9 V* IReDim Preserve a(1 To n, 1 To n + 1)
# ?7 q/ {, W% H! l9 [4 PReDim Preserve l(1 To n, 1 To n + 1)
3 l" x. t# d5 g* b( M8 MDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single  E' \6 w- N9 a" H
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(). W5 N8 t- g$ B1 j) Q5 D
For i = 1 To n" E* |& s0 Q! i4 T+ y
For j = 1 To n
; ^# A8 ~) ~$ O9 h8 qa2(i, j) = a(i, j)( u4 t4 k4 W7 f) s! `2 N
Next
. G/ ~; k6 }/ E+ W! Y! Z: z3 ]% \Next '将a()的值全部赋给a2()0 p6 s; @9 S! l4 u, z# Y
m = 03 r& b% f4 N4 v9 m7 q5 I
D = 1/ s# E8 V" V" ?9 _
ReDim x(1 To n)
) \: d) O. r3 {, w, aPrint "--------------------------------"# h0 @+ h" H7 V; E4 H5 F0 _" }" Y
Print "您输入的增广矩阵如下:"
0 W, ?& M$ d, {' j$ [1 u" HFor i = 1 To n
% ^& q) B0 D8 ns = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))1 u: ]5 T! R" C5 U8 I' }
For j = 1 To n$ O. h; P. C5 [0 [+ x& T
a(i, j) = Val(Left(s, InStr(s, " ")))1 @+ V" F4 N, k/ a
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
8 x; n) w0 }* w( j6 m8 WPrint a(i, j);
% ?3 Y6 h/ [2 o: y3 KNext9 m# F( y0 R' d" r$ x* x) W
a(i, n + 1) = Val(s)% V1 V% V) }; r; [% v0 _# e
Print a(i, n + 1);2 n1 m( S8 M# |, u, q
Print: g* ?) P0 B0 `
Next9 p) L+ [6 e7 w$ B) I) R* a

% O9 D% J# _1 pFor k = 1 To n - 1 '开始消元* Z' R# Z4 }+ A, n" v- W: H4 H
If a(k, k) = 0 Then/ ?2 d- E- s& }: U2 e% o# E4 [% Z8 R
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
, Q4 _& }4 _  {* t' dExit Sub* U8 R: J( _8 p* W/ |, H
Else! R, _. I) a, P4 X2 B8 e
For i = k + 1 To n
# h# R+ P$ p( J* L8 z: C- b" @9 T$ ]3 zl(i, k) = a(i, k) / a(k, k)
  i) f4 `" L; u' z0 gFor j = k + 1 To n + 1' e& t( L6 u3 F/ f; e
a(i, j) = a(i, j) - l(i, k) * a(k, j)8 w' c& Z1 _0 U' V0 w5 I
Next
4 \/ }; O$ ^  t7 ~Next! R% J, g  W. I5 f* H
D = D * a(k, k)
: \" P: V* c% f4 T4 _End If7 I( D* O9 l/ a% i' c
Next k '消元结束
, R. Q' z* ?, m5 CIf a(n, n) = 0 Then
4 w0 ?) {$ i  H" T/ M) S+ q4 CMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"* y3 }4 N. a4 B- q# ?
Exit Sub
( P5 @$ C$ s) w/ G# U) UElse4 A1 C+ I5 f& v8 [
D = D * a(n, n); W: K) d' W" e5 D
End If
2 S' a5 t9 `0 G  y  p$ TPrint "--------------------------------"
; t+ f' O9 S$ [Print "系数行列式的值是:"; D
5 h8 N# j" q. w% _5 Y$ f# C$ cx(n) = a(n, n + 1) / a(n, n)* u1 ?% C. W+ ~: E( ^* Y
For k = n - 1 To 1 Step -1 '开始回代
) L+ v4 E6 n. R& MFor j = k + 1 To n
& q4 e' T% W. L1 _6 p1 Q% a& Em = m + a(k, j) * x(j)
) h& N2 w4 s& H9 d) X- LNext j
& Q7 {3 a- e" @1 bx(k) = (a(k, n + 1) - m) / a(k, k)
, `: j; U& e- k  ?m = 05 \0 ^! s, w* m# _) c" X$ u
Next k '结束回代9 }0 K5 M+ y8 o  w
5 Z" F: {5 P/ D6 C& X, z2 C
Print "--------------------------------"
. v. ]& m" n0 _$ ^* ZPrint "方程组的解如下:"1 ^& p9 m5 G! J' t, s& w

8 k( Y. C. C. @) l* zFor k = 1 To n9 s0 w7 @1 A5 j9 W
Print. h+ n2 K) O2 Q2 v- w
Print "X(" & k & ") = " & x(k)
) _$ f% s# ~' Z( }! `. bNext k
& G% n7 t3 G( u/ x3 V7 R  b! WPrint "--------------------------------"
# i" {8 W" \6 b: U+ n0 L) tPrint "其中各行Ax-b="# _$ Y6 s2 ]$ w* ?
Print
0 W6 J4 V- K9 E( CFor i = 1 To n2 I0 s5 \7 ^: a1 u& E
t = 0  l9 {2 j' F  i5 r
For j = 1 To n7 A, t4 S5 K, t$ P/ w
t = t + a2(i, j) * x(j)
1 ^1 ]7 f: I5 S0 Z" cNext j
( m! j) u  Z$ b5 V- H. h2 Yt = t - a2(i, n + 1)
) C1 k6 |0 V2 @/ L9 P$ x9 C7 JPrint Spc(5); "第" & i & "行:"; t
" h( E/ e" U  }# LPrint
) f- W0 n4 n6 y, [. l8 \4 \1 ENext i3 M3 I( o$ l) y, z7 |0 h$ |% ?

6 m( W7 P" B1 ]" KEnd 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-4-11 13:21 , Processed in 0.459011 second(s), 74 queries .

    回顶部