QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
' g' ^$ a5 r/ l5 MDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
; i+ ]# ^. m1 w# p* w! c( H$ p$ X* ui = 1: j = 1
+ q9 r$ T: `2 D4 B; _* f) x1 Bn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
9 q1 h# o6 m8 G* }  WReDim Preserve a(1 To n, 1 To n + 1)
6 J6 Z+ k' q2 B# V9 l& n9 D! ~ReDim Preserve l(1 To n, 1 To n + 1), `3 h1 @; O5 X, H) I4 i2 F
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single7 g3 Q* Y( m+ r9 H6 g1 B, H- u9 f
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()' A: R4 L9 Q& Z
For i = 1 To n( y+ q6 D# O4 H9 ^1 R! A' Y
For j = 1 To n' d" A3 i! M" }! S
a2(i, j) = a(i, j)& {: z' F: |& _1 P
Next
8 I! \4 |: }) Z  t; k6 SNext '将a()的值全部赋给a2()# C9 F7 A% @9 {# b7 ?! J0 F: U
m = 0
$ b- ?6 n# r" K6 F% F/ E) sD = 1* p7 i4 b0 H- _& p0 i" e
ReDim x(1 To n)8 U+ X4 ^3 n$ c% m0 Z% m7 z1 n
Print "--------------------------------"
# `. v4 M0 H  zPrint "您输入的增广矩阵如下:"' D$ [* R# X$ ^- Y, u7 V
For i = 1 To n
4 H( z( h; |$ G" c" Vs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))8 u  p% i3 S* z% h
For j = 1 To n
. ]/ ~9 N6 G& B- b8 U/ L$ ha(i, j) = Val(Left(s, InStr(s, " ")))
$ q- L3 ?+ b) s) I! Us = Trim(Right(s, (Len(s) - InStr(s, " "))))8 r; C8 U( E, c1 H
Print a(i, j);) M/ W3 l8 c$ G4 {0 s9 C
Next, E( d0 o! |* J7 ~1 w8 r/ H
a(i, n + 1) = Val(s)
* d" D7 i; W: K7 U' @8 N: d' K0 zPrint a(i, n + 1);. F$ i0 m1 u7 _. r" M8 d7 k4 k
Print  K2 c! F1 p! ?- ^) A9 l
Next' g- ?$ p2 ?. |8 s0 M1 h- z

1 }2 e8 g7 Q7 m# q2 L8 F- h7 }For k = 1 To n - 1 '开始消元
. i/ R0 I/ f0 k4 |& eIf a(k, k) = 0 Then3 Z! O' C7 X  @4 W8 E* C) _# }
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!": o& Q5 l& |7 W  O# s) A; B; t
Exit Sub  o- c$ G8 k) u' v9 u& {
Else
+ A- |1 _) a$ `3 x( N. _, x4 EFor i = k + 1 To n
/ q6 P$ h. ^, t: X  Vl(i, k) = a(i, k) / a(k, k)% G/ M" Z7 G; U# j/ n
For j = k + 1 To n + 1# ]! I- E( K6 r% M: j% S- ^$ l, O# |
a(i, j) = a(i, j) - l(i, k) * a(k, j)
- D* `2 I+ q0 t+ KNext' c9 k7 a. v8 @" j
Next
1 S  s6 H4 }! [. F$ lD = D * a(k, k)
  I4 X8 Z- ?! g( |$ O9 ^+ }End If, a- `) @% K5 A+ w
Next k '消元结束
- j9 x# F8 m# W3 AIf a(n, n) = 0 Then8 n% M* n( E% b* w
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"+ |  q7 k6 U" b& U- r3 J9 \0 q5 T
Exit Sub
7 N, U1 l, n% {& ~1 M# L$ v; B. sElse* Q6 o& L$ V5 }# L: B  C$ Y
D = D * a(n, n)( b8 E/ n" U3 N# P
End If
+ ?1 g  a1 l3 L. Q" j  @6 I' zPrint "--------------------------------"
" b! o# L" R7 y$ W- q% c6 vPrint "系数行列式的值是:"; D
9 K% |6 D: M6 F7 I; px(n) = a(n, n + 1) / a(n, n)
1 t: c4 `8 d  b0 h; {# bFor k = n - 1 To 1 Step -1 '开始回代. S) d+ g- ]% p2 R9 w+ q
For j = k + 1 To n8 Z8 i" T) q' T+ H8 X3 a  d/ E5 K
m = m + a(k, j) * x(j)8 F4 c2 ]$ R5 }0 _! y2 C9 c
Next j
! \0 n  I' b# e' p6 x( Dx(k) = (a(k, n + 1) - m) / a(k, k)
( X7 G( ^* y) J( v4 sm = 0# |7 V$ t! J; w; U1 f" @
Next k '结束回代4 ?$ C: z# |# u# E3 r
. w$ E+ V  s! J
Print "--------------------------------"
7 l: U2 [6 U+ mPrint "方程组的解如下:"4 S" n, j1 D1 [# U4 g# p* q3 l
  S9 O( D  ^! \9 N8 V: U% v- m' T
For k = 1 To n- T6 z6 f0 T, i: U
Print
$ U7 C: a9 l  H: rPrint "X(" & k & ") = " & x(k)
1 O; L- y+ u/ F. L$ Q" ^' O: }Next k
: J. T; j+ L5 u( QPrint "--------------------------------"$ E0 d: x$ q, Y
Print "其中各行Ax-b="( }- H$ w+ r3 n
Print) H& ^5 ?1 l% Z7 x
For i = 1 To n- R  _% }# l+ s$ i1 {; e
t = 0
2 l$ d9 ], [0 m7 Q. k* k% JFor j = 1 To n
/ y& i) T! d( O1 d8 C. mt = t + a2(i, j) * x(j)
/ H7 `  Z' y' |; HNext j
/ |6 U$ t5 [- m& A3 g5 l6 ]! At = t - a2(i, n + 1)1 C5 p: ^( j+ ^
Print Spc(5); "第" & i & "行:"; t$ I' c% h6 y2 t' G. N9 @7 v
Print
3 D0 s" w# h) N9 INext i* P1 X' b8 A4 Y0 c7 K
; z/ V' r! V' r8 X
End SubPrivate Sub gauss_Click() '高斯消去法/ S$ v# ^" F; O2 M! f0 P; x" W
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single$ ^- ~# y' F$ a6 M
i = 1: j = 1
1 h, }  l4 j, U5 _" mn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))" F) X9 ^* b7 t6 z" E2 L7 W3 }
ReDim Preserve a(1 To n, 1 To n + 1)
/ ~8 ?" j" r& s9 N0 MReDim Preserve l(1 To n, 1 To n + 1)8 U9 [* E% R7 }7 c4 o# s; Q8 [% O2 @
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
$ F. o* h" @( q4 j  aReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
7 ]* t8 f; L% u& ^& \3 WFor i = 1 To n
" O& u4 y, `( PFor j = 1 To n! L; Z$ ^4 b- ~
a2(i, j) = a(i, j)
9 J* a9 c3 z* u& L3 y  q( QNext; {/ h: y6 G6 I+ Y
Next '将a()的值全部赋给a2()
* V; A& c. r9 o1 @6 Um = 0) w2 J. ^! X7 O7 l: D+ w
D = 1
6 b* z6 a" a! k2 _ReDim x(1 To n)
; v2 m" ?: J2 p0 B3 }, Z* {Print "--------------------------------"7 P4 r4 n( q( p9 i
Print "您输入的增广矩阵如下:"
5 F: w4 Q% k" r' Y0 y6 A& ^" x9 oFor i = 1 To n+ U% Y* ]* {6 S9 o# e( Z
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
, y& z/ `3 k3 m3 l7 \2 M; P/ kFor j = 1 To n1 L% E0 ~' T! V+ S
a(i, j) = Val(Left(s, InStr(s, " ")))3 ^- S5 Q+ o  S' g; f+ T' i9 B2 G7 d
s = Trim(Right(s, (Len(s) - InStr(s, " "))))( U" {% u& R* ]' Q" }
Print a(i, j);
5 t* ]4 c: ^/ l; j( L' t- I" xNext; }; G5 J7 v. Y
a(i, n + 1) = Val(s)
8 K* \  ]2 y: `3 N6 v3 s4 nPrint a(i, n + 1);
$ M% K) U) F$ R% n/ d# lPrint. w- Z. l  Z! O) F, r) l- b
Next4 Y3 N  H. t. ~, y

+ l/ L2 f6 r* NFor k = 1 To n - 1 '开始消元
/ O1 R% v  K6 n* F& H) EIf a(k, k) = 0 Then* q3 c2 F2 n# v* C: Y; a; u
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"! K9 Y0 v: ~& n
Exit Sub
1 @: x! W# N: E. v, `* OElse
0 g/ ?, b$ Y; k: q7 l* `  @For i = k + 1 To n, B- v. I+ ]- e( \( X( I5 v
l(i, k) = a(i, k) / a(k, k)
2 ~# d6 I$ W* M+ OFor j = k + 1 To n + 1% h( A1 I- B2 V* Q
a(i, j) = a(i, j) - l(i, k) * a(k, j), j& r( w3 n3 [) Z( X  G
Next
: A) u8 f- Q# X' q, T# x" N* ~# \Next
& l! z8 H- s) ]. k  T3 |D = D * a(k, k)0 L9 j* L9 o  w. w  k
End If
1 u* z! ]; C* |: N) S) m$ ZNext k '消元结束
7 I" t. I4 n" B9 KIf a(n, n) = 0 Then
6 V( c) s) U6 r, N! S1 @" `MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!". G( p2 X6 m  D( A; s
Exit Sub  w+ S6 L2 M4 @& N. N
Else) {) @. w6 q  B( S
D = D * a(n, n)
  d* M1 H9 x4 i1 m, yEnd If
: p4 p3 B, ^5 r. w% @& Z$ z( e5 sPrint "--------------------------------"; L/ w( }! H7 o/ a% u
Print "系数行列式的值是:"; D
/ n& r) u4 F+ wx(n) = a(n, n + 1) / a(n, n)) ~' K. w+ m1 P' w% u
For k = n - 1 To 1 Step -1 '开始回代
! M* q% [* S4 S* v% |For j = k + 1 To n7 J5 k2 }2 I( Z2 X' X1 m6 V
m = m + a(k, j) * x(j)7 q! |  S' T# X, L- [: \- o. ]. G
Next j4 ~7 q1 k7 o( i1 b8 s
x(k) = (a(k, n + 1) - m) / a(k, k)
( D8 o- i; C; s7 Mm = 0
8 W% H( w: F, lNext k '结束回代
0 s0 \$ k: u" V% |8 t" g  n: T  |' \9 u6 o6 h
Print "--------------------------------"
! v% Z8 b6 v8 D* N, dPrint "方程组的解如下:"& z- h) j* j! S. Q

# p4 k2 \, g8 e/ E' NFor k = 1 To n
  n* _  x5 z( x7 ^Print4 V0 W* X6 l$ L2 N
Print "X(" & k & ") = " & x(k)
; _# I' D: ~, U7 ENext k$ S- t, c# Z3 j  z6 l
Print "--------------------------------"0 ?& T9 t2 @0 D  T: J
Print "其中各行Ax-b="! k2 C# b1 t; k) Q5 w
Print
2 \5 x/ J& t6 z. c( _. _For i = 1 To n; [* C2 h+ a" T( z5 G5 b' |( y
t = 07 M0 ^  c) B8 e0 P3 L
For j = 1 To n/ c( u5 d5 x( o' ~$ O
t = t + a2(i, j) * x(j); D4 f& @# g  p- [
Next j' M3 L  E' d$ v, d
t = t - a2(i, n + 1)
$ M! t: Y8 ~( Y- u. j  k5 f+ |Print Spc(5); "第" & i & "行:"; t
+ E' a- q4 ]# f4 }+ t" m( PPrint
# H$ k; h# }2 K( q' u, _1 r& j$ p6 wNext i
3 T4 W: S, l7 b3 I( O' B. c, `1 T! }+ K8 A1 Y
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-9-19 20:55 , Processed in 0.402577 second(s), 68 queries .

    回顶部