QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法3 O: g  J9 e6 `# @
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
1 B& V3 F0 `  U- Bi = 1: j = 1
% B/ w* h  H5 g  o- B2 {4 c4 zn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
: [) J5 O, ~6 XReDim Preserve a(1 To n, 1 To n + 1)
6 H( \% p/ r7 u; y" N* D9 [ReDim Preserve l(1 To n, 1 To n + 1)
% k0 p; _5 A- U9 tDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
% y2 ]$ X- u. x% ~. v- R+ t" hReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
4 I$ d5 l3 C1 `8 k0 \For i = 1 To n
! P$ ~3 C7 |  y6 JFor j = 1 To n
; F2 ~% z' m6 d* D  g( ]0 m! y+ G' ?a2(i, j) = a(i, j)
, r7 z9 M; [) t+ }. L5 e6 yNext
' C; |# O2 O1 k  uNext '将a()的值全部赋给a2()
* t* m9 @4 x+ g& V$ C2 m: Z& i* _m = 0: ?  C$ x5 j+ {* g# C) o
D = 1# r! N4 ?! e3 O$ |, b
ReDim x(1 To n)
! p3 q' X2 ]# H# X7 m) b- u( RPrint "--------------------------------"
" N& \8 |  d1 u- z% Y' y4 a2 lPrint "您输入的增广矩阵如下:"- K2 x. z8 i  X3 ~" M
For i = 1 To n: {* ], h* ~' z, v) n
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))" ^! L  R- ~) o0 t3 o5 ?) r
For j = 1 To n
! k$ q! u( D/ t8 d" Ga(i, j) = Val(Left(s, InStr(s, " ")))
" H. B+ l8 r9 Ps = Trim(Right(s, (Len(s) - InStr(s, " "))))
) |7 j  r* w* YPrint a(i, j);
# l" F+ P1 Q( j( ~3 `# E3 TNext
* Y1 V  `; B  s( I! M  I' z% Za(i, n + 1) = Val(s)
% }# w# Q8 r7 _Print a(i, n + 1);
/ Q* i5 V2 Y" d8 PPrint9 F' E9 g0 f0 [  W* f$ c/ K' e
Next
: e/ k$ H2 I8 Y7 n6 o) N5 p0 P! d8 {
For k = 1 To n - 1 '开始消元
3 k; P7 c$ I. A* b% }' iIf a(k, k) = 0 Then
3 h4 {3 I" K6 a+ u4 Y+ M( |MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
, F+ V; f& I- XExit Sub
& ?5 s7 I( h/ q  ]$ c2 SElse) w4 M9 w4 d3 N! o) j
For i = k + 1 To n
) `- c, Q& C/ R) d$ K& L$ ^l(i, k) = a(i, k) / a(k, k)
2 J5 T+ h7 T9 l+ u: iFor j = k + 1 To n + 1, A& O" {. c7 R
a(i, j) = a(i, j) - l(i, k) * a(k, j)
, B& S6 V7 n. \2 qNext# m3 ~/ y  n4 ?0 b/ }1 A% A: y& D
Next
# g4 {8 N( C7 C" B0 ~D = D * a(k, k)* n2 G, O; d8 K6 N  Q
End If
4 m: N9 L$ ?& g# XNext k '消元结束
& _( u1 N9 }- R* }If a(n, n) = 0 Then
4 h. ]# K# K6 w7 _+ c- w3 U6 C( |MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"" z" w) w: T- B7 l  c# }
Exit Sub
* g" Y& N& j( V: [6 {2 d$ @& dElse
3 z7 r2 v- i5 U7 S! m' u" OD = D * a(n, n)  ]2 T: a$ K# g9 g0 p
End If3 G  S0 U0 Z$ L, M0 |
Print "--------------------------------"2 W- |( B- O2 T  w+ U; i. m
Print "系数行列式的值是:"; D
: z% E$ D( @5 q4 [& l/ s: s; ^x(n) = a(n, n + 1) / a(n, n). s4 i2 z& \! m  s9 p% y
For k = n - 1 To 1 Step -1 '开始回代+ ^  d- Q% ]3 L* v
For j = k + 1 To n
4 V2 M( L- O2 x8 ~4 n  |m = m + a(k, j) * x(j)! y- M- B2 q0 g% U
Next j
) @  v2 f( w: v) Z, Jx(k) = (a(k, n + 1) - m) / a(k, k), Z5 C& l) A( o5 |5 a
m = 0% T' B( o  T0 T
Next k '结束回代2 Y9 k: s0 x9 k; t( F

3 F  D! ~" w* N% rPrint "--------------------------------", M+ R3 G5 T' b' O2 M" N" x% d0 K5 {
Print "方程组的解如下:"
* X5 U- h# N( [; y3 v. z
7 X. e# A0 q5 X7 UFor k = 1 To n4 m8 X4 r3 `$ @0 j& _# `
Print
) i4 T/ F! B' iPrint "X(" & k & ") = " & x(k)
5 t: w7 Q9 C' k( z. C8 U+ P) \Next k# J) F6 A( W: @
Print "--------------------------------"
9 i# N, T- |8 r" \2 n3 B3 pPrint "其中各行Ax-b="
2 i0 T' n: D1 V4 W9 sPrint. u9 k9 k: e! _, m
For i = 1 To n
, b. g7 m. Q9 q) p6 Pt = 0
" d3 i' c! k* z$ ]For j = 1 To n5 k/ G/ g" p4 o
t = t + a2(i, j) * x(j)
9 a4 p/ e0 f4 l7 Y8 }. lNext j
  E7 K. Q+ K7 f! dt = t - a2(i, n + 1)
" g& F! x# }6 T; x) K( p) lPrint Spc(5); "第" & i & "行:"; t( U8 v) o, \! T
Print
  q) v9 e4 `6 h  s# h, c/ h6 fNext i$ C2 i" }% j' ~  O  ~; u1 K6 L3 c1 X

+ J/ }" m2 n( I+ J( lEnd SubPrivate Sub gauss_Click() '高斯消去法' T. L: l3 T# v  B3 _0 y
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
! w! C7 Y# t6 N7 Ai = 1: j = 1
5 `5 I4 l6 Y0 J: Z) _! ^n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))/ J" T1 g% S! X. {/ q- v
ReDim Preserve a(1 To n, 1 To n + 1)$ F/ p) \/ j, O8 R% i
ReDim Preserve l(1 To n, 1 To n + 1). K# p# u, V% B3 v( u5 \* h' ]
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
7 P# ]& l, Z% YReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()0 [& V3 s, @% x. ^
For i = 1 To n
. L+ w8 Z+ y6 y; f" c2 ^9 RFor j = 1 To n4 F7 B. D% f' ~* c9 U' ~' R' O
a2(i, j) = a(i, j)
& Y* ?/ t' F9 s7 b$ o3 uNext
0 H$ G7 B6 T- a; d3 v& xNext '将a()的值全部赋给a2()
* S8 F) U& \- O2 H! j# |/ w6 ^m = 0
: n0 N1 F- m3 g8 m4 ?, H* e. F. G+ MD = 1/ W3 m9 s  V1 `9 \% P- ]
ReDim x(1 To n)
! K+ t' k+ a; L+ g- U* m/ yPrint "--------------------------------"* k& c: c, F" x
Print "您输入的增广矩阵如下:"' y5 x/ A6 [6 c5 e% J2 m
For i = 1 To n, A* V$ G8 n" `, m
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))6 O4 Z2 w7 q" p2 V; h/ p: ]: t
For j = 1 To n, W% V( |0 X2 v) ]* K
a(i, j) = Val(Left(s, InStr(s, " ")))
; K3 u& F% }  P8 q$ ls = Trim(Right(s, (Len(s) - InStr(s, " "))))
  z0 D, S6 p! }7 R% }Print a(i, j);
2 E" A( P5 c% g& v/ j( ENext% V1 W/ J/ `" B# ~
a(i, n + 1) = Val(s)2 x; g( ]. {. _* t
Print a(i, n + 1);
# t9 A! m% @8 V5 B# }. W# ePrint
# H7 M% Q. Z  L, d, [2 b2 MNext. w& |' t; d' A

$ N! _- I5 O7 zFor k = 1 To n - 1 '开始消元
, j* V; D7 y4 N! R; y2 ~! gIf a(k, k) = 0 Then" f* Z9 S  R# h2 r
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"& g$ ~& t; g: w& q, S5 {5 J' {6 e! m
Exit Sub
1 \! v: `8 s! @& p' U0 B- BElse' T7 J5 o7 j! a* B
For i = k + 1 To n' o! {; O  f( r
l(i, k) = a(i, k) / a(k, k). R4 L5 V: _/ r% A1 s, t0 V7 t
For j = k + 1 To n + 1
8 T, V- H) n4 W' t2 ]: ya(i, j) = a(i, j) - l(i, k) * a(k, j)
+ F* L7 N3 r  ]. A% t# R" pNext2 S" H0 L% r- G; z  V
Next
2 O2 }8 q% U, b9 Q6 O; xD = D * a(k, k)' E& ]" \( z6 }* v" h5 v8 x
End If
/ [" [9 T# N; hNext k '消元结束0 u' e: j2 f9 P6 M8 X* M- A) a
If a(n, n) = 0 Then; S+ h* A2 X* P) [8 w
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!") q- m7 U5 E  q
Exit Sub2 K- S3 O# O4 S' X; F4 y3 G# d& Q
Else, {: d% \; Y- e! M3 q
D = D * a(n, n); j  J5 E) S5 k3 w
End If: C) g( B) x1 ]0 z$ I' u" E
Print "--------------------------------"
1 M9 H% k. ?3 Z5 |9 sPrint "系数行列式的值是:"; D
+ A$ f4 L7 F' nx(n) = a(n, n + 1) / a(n, n)
5 y8 ~% U7 G# _/ N9 |/ I& CFor k = n - 1 To 1 Step -1 '开始回代
) |2 r8 i: U* a+ J) F, DFor j = k + 1 To n0 b  x, x- j0 o* A3 A* ^5 s
m = m + a(k, j) * x(j)
  v3 n! d1 e( `8 A6 MNext j5 ^* `# R. Q5 x- G2 A; `9 A
x(k) = (a(k, n + 1) - m) / a(k, k)) b7 v9 `# P7 m- }& F5 m. K
m = 02 a5 L8 E/ C) b  D) U
Next k '结束回代
" j; w0 _& B% u4 g' J+ q6 ?8 F
6 T: t# k( `" b# ~6 v  I: ~Print "--------------------------------"
( e$ \  c3 n# |/ [+ D$ ]Print "方程组的解如下:"
  E, v" g' m3 T7 ~) T# o" t$ A7 l& `3 j6 d0 D) Z8 K5 t8 K
For k = 1 To n( H( ?0 {2 Z; [! {* Z) ~* `
Print
. F' x8 A1 a4 z. U* s0 MPrint "X(" & k & ") = " & x(k)6 ?" p. W3 w& g- m
Next k6 k+ _% M) d) r  z2 R
Print "--------------------------------"
: Z$ z# ?9 U( r( r5 \3 o8 n! ~Print "其中各行Ax-b="% J. ^4 x3 p+ w
Print. D& k1 r) b) X
For i = 1 To n
- C% D2 w8 Z+ o; |7 _( i! J, e- |9 Qt = 0
1 E- M3 R. R1 L* }% X8 ?+ V( U8 o( ?For j = 1 To n
3 D  T  Q: }. C7 X) o( Y$ r4 t3 ?t = t + a2(i, j) * x(j)
/ p) D) m; @4 \7 q! g/ CNext j1 ~4 o0 a2 d& C0 _& p, U
t = t - a2(i, n + 1)5 x6 B7 Z' x/ M4 }9 F
Print Spc(5); "第" & i & "行:"; t
! I  Q, {% s. s/ p4 IPrint5 X3 R7 a) g1 I* ^" l
Next i- A5 e1 S% u, v6 n: L! B3 ^
/ _$ e( ]( ^, K  @
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, 2025-7-15 12:36 , Processed in 0.413741 second(s), 68 queries .

    回顶部