QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
1 i. |  Y9 g+ Y; S4 m6 hDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single$ @6 w# V0 n( O4 C1 @9 o6 {2 ]
i = 1: j = 1! t$ n9 N# a; m7 M; N  h: X
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)), _$ g! C. g) c: S6 }
ReDim Preserve a(1 To n, 1 To n + 1)
* z9 [* C6 s9 E% _ReDim Preserve l(1 To n, 1 To n + 1)
) S% N- z& ]1 L5 H1 c1 m! Q; U- HDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
  ?" `- j& l1 q. ]ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
; W( ]: J. a# V" M! TFor i = 1 To n
. \* j. Z  V9 A  C$ }1 }' |For j = 1 To n
) M9 h5 o( k! r: b( ~3 f+ ua2(i, j) = a(i, j)0 y5 f! ^( ~% k
Next( C( \* T- V7 F& ~: p: E
Next '将a()的值全部赋给a2()
; ^: [0 i( Z3 r  E' J- ^% sm = 06 H( f) y  E% u1 v
D = 1- P9 l$ z5 }0 h' S  R* T, y
ReDim x(1 To n)
: ~' ~9 M0 K/ t  j3 P' ?4 M! jPrint "--------------------------------"
' E$ g/ W) ^' Z' T9 N1 qPrint "您输入的增广矩阵如下:"- w4 Z% h" a3 u
For i = 1 To n. W7 X0 E2 P8 S0 z8 E6 {6 z  h) i
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))# J  Y# d8 W( n, K7 g' k" [
For j = 1 To n1 v; V+ w: Y$ s# j, m) I
a(i, j) = Val(Left(s, InStr(s, " ")))* @; r/ a' c; k: r" Y
s = Trim(Right(s, (Len(s) - InStr(s, " "))))0 U8 a) H" }: P1 E. T
Print a(i, j);- ~5 i6 J+ ]- ]; k9 [# G; m
Next7 l. @6 K8 S& t# x4 W9 }
a(i, n + 1) = Val(s); v: V) w) L; u* l
Print a(i, n + 1);- W6 C3 b' k: l; Z# R/ n
Print, T$ |1 i  Z; k, x  V. l: z0 G
Next+ N# u/ B6 ^& @8 u' P! h$ {6 K

* A2 Y0 j: p7 |$ Y+ `7 _4 \  S' f5 TFor k = 1 To n - 1 '开始消元
' x* `9 |0 J0 q! V: OIf a(k, k) = 0 Then
+ E; ]1 {6 j% J8 s- ?3 `  aMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
" P) t7 M, G2 f# g. u. g" }( t; LExit Sub7 M, W% k* L: x3 G3 O. r) G
Else$ ]# z5 E- D7 j) e1 L1 \( L: x
For i = k + 1 To n
% Y$ l- v" `8 `9 }3 {7 u8 Wl(i, k) = a(i, k) / a(k, k)0 y( b) K5 n* C& z6 P
For j = k + 1 To n + 1
2 ], N' S, @$ L4 w* Ja(i, j) = a(i, j) - l(i, k) * a(k, j)
& C* y' R5 a% P! i6 n4 w) oNext
6 T# M5 y9 T1 GNext
7 `  Z# P) n3 C8 }: i6 zD = D * a(k, k)" s/ _4 z6 ?4 t3 i) J. A& y
End If! t1 {& [" Z9 H6 K  g' O% f: t& Q
Next k '消元结束* P7 H- y) N1 n3 c6 ^5 S7 C( X
If a(n, n) = 0 Then! K. i: I6 P! [, w5 M) O& Q
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
$ x# P" j5 R) ?1 h& J, ~Exit Sub
  y% s- T2 ]1 \, F# j- zElse3 ?! v$ @  D- s7 N
D = D * a(n, n)2 y, o" A1 P# p% `. |( z, X( X& j
End If( F* Z% s0 _: h+ F" ]  ~5 s
Print "--------------------------------"
. P3 S5 f6 J. W! DPrint "系数行列式的值是:"; D" {1 v, l, w2 h( }- i: `) ~$ I
x(n) = a(n, n + 1) / a(n, n)& Z4 V2 i" D( E9 o4 z) p4 V
For k = n - 1 To 1 Step -1 '开始回代8 V  A0 v( b% g6 h. U
For j = k + 1 To n0 u! Y' i4 R7 i0 ^' j
m = m + a(k, j) * x(j)) r/ _1 c1 R# `, b4 A% n
Next j
& D: m" u0 t) _( i5 v" T! s+ C# xx(k) = (a(k, n + 1) - m) / a(k, k)+ z+ h, ^. k& m. V) m5 o
m = 0
: }! }# z: _$ Y1 b$ G9 D$ cNext k '结束回代
3 _. M2 U% P& u9 E! ~- w' q7 x6 N+ i, C+ r  h6 M$ y1 u7 P
Print "--------------------------------": |1 P" @- O. t( |$ T0 z/ N
Print "方程组的解如下:"/ k" l- d9 o& X0 u# \

& A+ `) m7 V6 Q6 A9 [1 nFor k = 1 To n
1 h* ?: _: ~9 L: ?2 l* QPrint: g7 x  d$ s# r( O
Print "X(" & k & ") = " & x(k)5 E, Z- k+ c$ G4 h
Next k
& J9 P1 j( u5 y" v$ r0 u& QPrint "--------------------------------"
' f4 g* v% l+ n& t% c) IPrint "其中各行Ax-b="
! P1 O& \* V) X3 W2 q+ p" V: jPrint
0 {2 n; b! F" t. H/ h* X% ]For i = 1 To n
4 ?$ ^6 M  D. a' N% f. y, K4 [7 Ft = 0: f; e# ?' r7 V0 ~
For j = 1 To n
  D# |* X: c1 ^1 V2 yt = t + a2(i, j) * x(j)
6 Z" _$ J+ E! B, ~6 |" ?Next j
' Q4 D0 a; b0 m4 j% u! N* Ft = t - a2(i, n + 1)% C+ j. \. `( m1 _% i( _% U5 n
Print Spc(5); "第" & i & "行:"; t/ ~) A7 X: H5 D6 |
Print2 M  L& L% I; y! t! n/ o* q3 T
Next i
& A" \- y& y7 c& R' h+ T$ Z+ N6 M/ k5 z
End SubPrivate Sub gauss_Click() '高斯消去法" n+ t/ J4 f$ L; g, r; R" A
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
& M7 t  d0 h7 W; \, ]. q' Di = 1: j = 1- n) R1 Z% |1 o9 l  `) q+ ~
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))3 E1 B1 v) W4 R- `( E3 v% v# d8 ^5 I
ReDim Preserve a(1 To n, 1 To n + 1)' M, Q+ W6 V5 G( Y
ReDim Preserve l(1 To n, 1 To n + 1)( B% n  `2 q3 |& Q8 }1 E: A) k5 W  v' H
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single: t5 _  n" D6 S
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()4 k, g7 r* |5 `- L+ T
For i = 1 To n
1 t* V) }0 M* G) }+ P7 y! mFor j = 1 To n
* \6 p7 _3 O2 M& |* A( Ea2(i, j) = a(i, j): k- @% z* d( l8 H' K: A
Next
! Y; z  ^* f5 B3 hNext '将a()的值全部赋给a2()$ p( ?* ~7 J9 B  s2 r6 W' q' a
m = 0
4 a& Z9 w, J" y% V6 k+ ]( z" h" i) tD = 1: T5 c- S7 @# p8 `5 y4 d& m
ReDim x(1 To n)
/ Z# L1 Q% L) ?* SPrint "--------------------------------"
0 P3 y$ V/ |4 s" e& j  ZPrint "您输入的增广矩阵如下:"
- d0 x9 y; E9 MFor i = 1 To n
( _' A8 I& v3 \) D) x- M, z( Ts = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
9 N" S. t) ^$ f2 M( c0 JFor j = 1 To n
4 ~/ a4 G" z7 G1 T" [9 Ya(i, j) = Val(Left(s, InStr(s, " ")))
/ a* Z# ]6 m6 [* Ss = Trim(Right(s, (Len(s) - InStr(s, " "))))- h9 r8 f+ M7 e) t9 L+ P
Print a(i, j);3 H! ?5 @1 E8 B( v/ K8 L
Next/ r" t# o# [" N: e8 r9 y& L- s
a(i, n + 1) = Val(s)
0 P+ @; `2 ]8 Y0 z0 o7 `* e. oPrint a(i, n + 1);
8 V3 `2 i; N* L8 V3 `6 Q, p/ T; z" LPrint5 U! f2 _! j$ Y) f+ N
Next8 H4 {  x4 q1 E. f# ~5 I

7 Z$ s3 G, \$ ?- c! c- X9 u' pFor k = 1 To n - 1 '开始消元
+ [1 j* s1 [' F+ q4 A" a2 _If a(k, k) = 0 Then4 d0 p+ D8 W& i% e; Z
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"( n$ ~9 w7 E* B8 _" a/ f
Exit Sub, Q3 h6 ?; L$ _
Else, ^: }8 I4 F/ f8 h
For i = k + 1 To n
# T3 f7 T) g/ {- j3 m# \4 El(i, k) = a(i, k) / a(k, k)' ?% x% w% F: D( m+ M
For j = k + 1 To n + 1
2 }: Y0 U* U5 }$ ~; _a(i, j) = a(i, j) - l(i, k) * a(k, j)
; o/ Z6 J7 s5 O3 v" y) O2 Q% p/ \) wNext
0 O, o4 \. m! E  [- x/ DNext
' [; U) w  h) n& s# A. u( ED = D * a(k, k)1 l2 I9 w+ X$ I* ?- q$ |
End If, {; O3 p( p" E- @
Next k '消元结束
0 m. f" t  a$ i7 e8 a; XIf a(n, n) = 0 Then2 j5 a- O7 Q7 P6 V  b! ^1 z/ H' @
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
6 M6 p8 l( j5 F' M6 @0 q% BExit Sub
6 u! W- i& j; v5 y. l0 DElse0 ?0 J0 \- G# v! T, t: K
D = D * a(n, n)3 x# r2 E0 @. K
End If
+ Q- [& |0 V) x  L. }7 FPrint "--------------------------------". b. U  l( U+ ?* }6 `
Print "系数行列式的值是:"; D
. ?5 K) U9 I( l/ f4 X: Ux(n) = a(n, n + 1) / a(n, n)% I3 n8 G5 B7 p4 {+ ]" K, \; x
For k = n - 1 To 1 Step -1 '开始回代4 Q( j9 L3 U# f9 g8 D6 |; W. @
For j = k + 1 To n, W) R" b7 }5 D" S  T
m = m + a(k, j) * x(j)2 s9 W: E8 t2 F$ v0 ^) B9 [
Next j
. ^3 a0 ^8 F; B1 D! \x(k) = (a(k, n + 1) - m) / a(k, k)/ O, n- I& N: c: n* _
m = 0
# |! b4 y; n! d, Q' @- Q0 }3 oNext k '结束回代( m# Q' R- K2 C5 k2 ]% e/ g
4 A$ d- y: `* Y' J3 @4 k/ c  Y6 W7 s
Print "--------------------------------"
1 q  [. r! o1 A  O4 N9 wPrint "方程组的解如下:"2 H7 Q' O/ t: T2 A( f
  m' m4 L6 \; h
For k = 1 To n7 F8 b2 E$ c4 |6 G# Y3 k3 U
Print
$ o6 f2 n" Z/ {: SPrint "X(" & k & ") = " & x(k)
# }! s+ \0 k: ?' T6 R- YNext k
" N/ R/ o  l9 n. H; VPrint "--------------------------------"
. l$ D5 U* s2 i6 l* }* a/ A$ `" _Print "其中各行Ax-b=": V1 c$ S( ^- _" k5 Q
Print
" V3 X2 w) K% M' T  d8 M1 A! \) ZFor i = 1 To n. H) n; l6 N! ~4 y7 H$ G6 ^
t = 0) I1 t3 A/ p& Y
For j = 1 To n% s' }1 U) Z) m8 C) c4 |
t = t + a2(i, j) * x(j), t9 `- {/ v1 q) E3 T
Next j
& z. U6 M! u* ^1 ct = t - a2(i, n + 1)$ |5 Q2 c1 v% Z5 _, G/ n& w
Print Spc(5); "第" & i & "行:"; t6 Z- W; z2 D+ N+ `! |
Print2 ]3 D' J& j  k0 I3 B' R
Next i( f# j0 a" k4 Y! f0 l
8 x4 q9 Y1 _- ?' X
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-1-3 23:10 , Processed in 0.972428 second(s), 67 queries .

    回顶部