QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法7 M$ f1 |% R2 L0 s3 s( y
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single" B! B! S5 `# C1 I+ W) x
i = 1: j = 1# Z4 U) F8 I2 G- y% [
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))6 U5 v' X! p' N& e# \, ^
ReDim Preserve a(1 To n, 1 To n + 1)
0 b) O" ?+ I( G. e) vReDim Preserve l(1 To n, 1 To n + 1)
, M. _5 l1 a( P- _8 s9 z) EDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single6 @$ x. ]/ @) P1 e, o
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
9 |2 x+ R4 _- l. b( b4 sFor i = 1 To n
2 s  D" c7 [! a6 K1 E. \3 kFor j = 1 To n
' R+ a- M2 n5 F6 B9 pa2(i, j) = a(i, j)4 ~: L' x1 N1 _$ P% c& W/ a
Next1 t, A* c2 {/ R! p" N+ W0 l
Next '将a()的值全部赋给a2(): k3 [- J, }2 a+ d! B( g8 C
m = 0( `+ r  A# q8 [3 P) V/ C
D = 1
+ A' s! B2 @/ g. q) M% @' x- FReDim x(1 To n)
3 o; E$ S5 z; IPrint "--------------------------------"0 u" r. }9 I! |. G
Print "您输入的增广矩阵如下:". H9 \6 M$ d& k! ?
For i = 1 To n
% {  \% r7 Q% Gs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
9 X* x; z4 ^& J" x$ X$ n$ jFor j = 1 To n
, T/ l4 J  P- V! \a(i, j) = Val(Left(s, InStr(s, " ")))
- c  c% u9 [1 r& ]2 Ns = Trim(Right(s, (Len(s) - InStr(s, " "))))
- m  Q% R$ r, y4 RPrint a(i, j);0 H0 B& e8 C9 J/ C  r9 v
Next
% B4 I9 E  Q& C5 O4 l) b+ Y2 }9 @a(i, n + 1) = Val(s)
+ Y, r0 N9 D7 x, w% k/ C4 K" c% FPrint a(i, n + 1);+ _1 x. \& L+ y( V- z
Print
* C+ B+ Q6 {8 }" I. B+ j) I0 h0 iNext8 ~* \# l3 J% o8 w

" A) W$ ]7 c2 w- RFor k = 1 To n - 1 '开始消元; e. `1 m0 F0 R- a6 k. U1 c
If a(k, k) = 0 Then
) m+ |) V) x, D& uMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
- [7 G4 [3 k( ^: V; E% wExit Sub( |9 n7 X7 j, F3 D: k( O) m# q
Else
- C* }+ C3 d2 D( gFor i = k + 1 To n. z1 `8 Y9 }; I$ @3 M3 `
l(i, k) = a(i, k) / a(k, k)
0 @& E' M3 c1 y7 t* k. w; nFor j = k + 1 To n + 13 p. S% w8 P" F% q0 D8 {
a(i, j) = a(i, j) - l(i, k) * a(k, j)
  \* f. Z1 e/ p9 V& t. fNext0 n; ^) k  U9 i# B" x5 w
Next5 s$ J  @1 Y4 e7 }2 ]
D = D * a(k, k)7 s7 Z- ~+ w  a$ m
End If
( t9 f. U+ E: r0 ?, k- SNext k '消元结束# Q4 k# _  x2 |4 @7 N
If a(n, n) = 0 Then) U, z* Z6 h+ S0 T" j) Z0 S9 b! T, q, v
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
# o! \% _3 I# h( S0 z0 X- L9 P4 tExit Sub) l1 E  g5 X/ p& E$ M6 ^8 b1 ?
Else- ]4 h$ k8 \( `% S; s' u
D = D * a(n, n)/ i2 f; T5 I4 r. w
End If+ L  g3 P. m6 d& O
Print "--------------------------------"
+ b% ?! `  `0 H, J3 R& SPrint "系数行列式的值是:"; D
% l$ U0 b( Q; t0 V* |x(n) = a(n, n + 1) / a(n, n)
& L( X( g6 r7 U% @2 h& R9 }& R8 ^" C: CFor k = n - 1 To 1 Step -1 '开始回代
& h( r+ s) E' N) j+ MFor j = k + 1 To n/ q8 G/ q9 t0 v$ V
m = m + a(k, j) * x(j)5 p; @6 w/ Y+ l; i+ D% v$ ~4 |
Next j! Z. Z) }3 M+ z: q0 I7 z* p: z
x(k) = (a(k, n + 1) - m) / a(k, k)
& y5 d! f/ j* s/ E5 O4 w/ `m = 06 ~: a/ m. `4 i2 q' `2 u
Next k '结束回代+ K8 N6 k8 n7 G
( g9 e  J8 K  f
Print "--------------------------------"
$ R# Y/ d  `8 ^* {1 E3 UPrint "方程组的解如下:"
0 ], Z% X, k; n" B
+ M& d% c* D" d, f8 h. G! M) N) UFor k = 1 To n
5 y4 @1 J; r6 x  v6 k4 b# _2 k$ H9 PPrint; O0 X) A& ^8 F
Print "X(" & k & ") = " & x(k)8 r% m# @& ?6 ^9 K/ S1 C  R4 C, a3 ?! l9 h
Next k
" r* t* l7 D& j- K- \( p- ?+ yPrint "--------------------------------"# Z; B( a, ?5 J
Print "其中各行Ax-b="4 F! @5 K& O$ S. l+ M& ~! C
Print
& m* [) _# g: m' sFor i = 1 To n( q. g' h8 o( [
t = 0# H& g' u, Q  _' D" {, ~& G
For j = 1 To n5 k: b  v" ^( a* g; w. d/ P" w9 t  p6 u
t = t + a2(i, j) * x(j)
6 N: o8 ^" U4 A) h- _; f  {Next j
9 {* ?/ o( e- s( Et = t - a2(i, n + 1)
5 @% G; H/ q3 f: ?Print Spc(5); "第" & i & "行:"; t; N5 Z6 r7 [$ j* t' p- w9 N; O
Print
% I" M( |$ R6 \: WNext i3 }  }1 f. K5 e/ s6 f
7 {& P, M* y7 I9 i- E# m. l
End SubPrivate Sub gauss_Click() '高斯消去法
/ @5 [" l" a6 y, ^6 {$ X- dDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
. k. d& \' N: \$ Fi = 1: j = 1
. I7 d+ C- Z* mn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))0 P/ `! V( f/ Y2 U8 l, ~. ?
ReDim Preserve a(1 To n, 1 To n + 1)$ K( W3 z/ L: y# _8 f! L
ReDim Preserve l(1 To n, 1 To n + 1)( X6 B% x, Y5 A, k: \/ h3 o
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
2 w. E3 X3 A! w. q; q/ gReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
$ U$ |- U: v( v% x7 OFor i = 1 To n& _, T1 A; O2 }9 y" i: ~3 n& t7 d% i
For j = 1 To n
5 |7 K! o3 ]- m0 |8 g4 H8 E; da2(i, j) = a(i, j)
* w0 T4 T+ N6 c4 z  sNext( T; ~+ Z  o) Y2 D
Next '将a()的值全部赋给a2()
3 O" b+ x# q* e8 @; A. Wm = 06 |1 K1 \( u" @; V
D = 1. ^. A$ A7 f2 H/ {2 y) R4 V1 ?- H
ReDim x(1 To n)3 K( z! i9 O% x; w7 ~7 C
Print "--------------------------------"
; w+ M6 h; a; G5 Y/ h9 |; R' XPrint "您输入的增广矩阵如下:"
: s: b4 B; D2 U8 K5 ^% oFor i = 1 To n5 h8 T) E, `4 H7 y- U
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
. h5 a* E/ t3 @9 QFor j = 1 To n+ U8 O' y) v4 B* p
a(i, j) = Val(Left(s, InStr(s, " ")))
3 s% U+ l" h% o1 v7 X* Vs = Trim(Right(s, (Len(s) - InStr(s, " "))))- e+ A* N7 C8 o% S6 A
Print a(i, j);
" s4 _6 A: S& E% o/ s# m9 G9 g% INext) c5 \' j/ s4 Y% M& n3 {
a(i, n + 1) = Val(s)9 v9 y8 S- @* J8 V- x) |" }. h
Print a(i, n + 1);
6 I; E1 s3 [/ a# V6 pPrint
. g; K0 G6 j- xNext
( \; w# |9 F$ w% K
! b. t" _/ J4 |& ?7 u5 GFor k = 1 To n - 1 '开始消元
$ s" n3 u4 ]" d6 B: V4 W2 e( EIf a(k, k) = 0 Then
( Y9 Z' f. l4 O# z1 UMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
7 v0 N2 d3 w5 k' ^* B2 G5 V  xExit Sub6 M+ P* P/ I" P, O% b$ v# b
Else5 z0 O2 V0 \& W/ t
For i = k + 1 To n. J6 k$ ]. z9 Y9 R
l(i, k) = a(i, k) / a(k, k)
  k/ M' |) ~. A- R8 XFor j = k + 1 To n + 1" _8 J! i/ g. s! y! a0 Z1 m5 ^
a(i, j) = a(i, j) - l(i, k) * a(k, j)( N0 y% [8 }* d9 k- o) @4 t
Next4 d5 q! d4 j4 L$ _8 A' E
Next
' B* V, ]% D2 X+ }. nD = D * a(k, k), S0 Z& _+ n9 q& ^
End If
' M' F! O) @7 S5 B) l% s, DNext k '消元结束
" T0 O1 F$ _) Z% Y' N5 S! PIf a(n, n) = 0 Then
6 ~4 ?. e) \' U& O* e# U5 Q5 V. E" tMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"0 G1 I, t% F8 s
Exit Sub
, [: g' ^! m$ h" \Else
/ z6 A+ O& {" _0 j3 U* XD = D * a(n, n)/ D3 Y2 a3 Q; L- z/ l
End If
( _- a5 \7 n6 kPrint "--------------------------------"
; u$ H8 M! ?/ L! [1 oPrint "系数行列式的值是:"; D
- o+ I( ]4 j8 _/ _4 Bx(n) = a(n, n + 1) / a(n, n)
; C; H4 M( H% U' q; RFor k = n - 1 To 1 Step -1 '开始回代
* v  z- v2 g! H9 H- ~" jFor j = k + 1 To n' K+ z/ ]6 I- c/ x! {6 Z! F
m = m + a(k, j) * x(j)8 ~& t* }1 N1 w9 {4 v5 l' h
Next j
% `6 Y# A* C; m9 P1 Dx(k) = (a(k, n + 1) - m) / a(k, k)
/ |8 Q6 r# L  r" d; M1 c  Xm = 0
) ^* k4 M- F  h0 Z3 O. nNext k '结束回代$ V3 B+ m& Y7 I- P3 h6 e

8 f. i0 p1 z* y: l/ a# M/ S& gPrint "--------------------------------"
2 b) u6 d3 H; o! n$ sPrint "方程组的解如下:". A' }' h. o; ^- N( J6 N9 X% L

6 B) ~- j5 @( x' T2 B, N# x% B' z% rFor k = 1 To n( i9 N6 w) F& A9 ^( ~7 v& X6 l$ e
Print
, T- f# C* K' O% JPrint "X(" & k & ") = " & x(k), D( T( i* V- V1 S# ^2 h* `2 C" A$ n
Next k4 L* F" n* g8 p2 F
Print "--------------------------------"
- C0 L0 n7 X1 k( x/ w! @Print "其中各行Ax-b="
- t  |/ y$ E$ f+ t4 w/ |Print
( d8 `, C9 e" bFor i = 1 To n
# w5 m' g( p8 p" l6 pt = 0
! C& b! ?5 D  \& f. @, vFor j = 1 To n
' D- p4 O2 v' u; L) ?0 @% O( nt = t + a2(i, j) * x(j)2 ?: M5 ^$ c  x/ P: z
Next j
; _2 ]* Z4 l0 Z5 Ft = t - a2(i, n + 1); W0 B+ P0 s. A# s! ~" L' h0 H
Print Spc(5); "第" & i & "行:"; t9 K  C4 G$ K8 z8 u% P8 S
Print! `: g5 ]6 l# u) P
Next i" a  j* T; K5 Q4 Z

( F0 b; N) C9 C4 BEnd 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 11:22 , Processed in 0.462116 second(s), 68 queries .

    回顶部