QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
/ \( m7 D0 w: N: }4 d: I( i6 XDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single9 Z3 ^' ?+ j. b; c- P" v& S0 s
i = 1: j = 1
( J7 e  S% s9 Z; v  ^n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
  p$ C3 r) _7 `( t! dReDim Preserve a(1 To n, 1 To n + 1)2 _8 p$ w9 F) D! T4 \+ w
ReDim Preserve l(1 To n, 1 To n + 1)
% }# ]  ~& c- }% @7 }1 GDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
( C- {  x& d# m+ KReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()  a- C: b! H2 N: E# ?" C( K1 |
For i = 1 To n
8 `( }! U5 M9 n2 }6 ~' EFor j = 1 To n
- j* y, i1 l6 p3 ?! ba2(i, j) = a(i, j)
+ i0 _! r6 M/ G8 N  f" z1 eNext
1 k; j. Q0 K0 Q3 l, {% ~) tNext '将a()的值全部赋给a2()
0 }. Y5 \- s9 W. }9 B8 c4 h) Im = 0% w; i- [$ N9 `: L6 B
D = 1" s* v, o* P6 a6 i2 S6 B
ReDim x(1 To n)# r7 n1 f! [  X  F: `. w
Print "--------------------------------"1 t# k, v0 I+ c& Y4 g
Print "您输入的增广矩阵如下:"
5 x- b) {7 T3 S/ E/ V9 JFor i = 1 To n, Z$ |: F- [/ ^: U% `
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
% L( _8 v6 J# Y; I* d% {( aFor j = 1 To n
9 ~( V- e  P0 k! z! Z0 i0 ?" ma(i, j) = Val(Left(s, InStr(s, " ")))
% Y) U. t( @( L* y, [0 Ws = Trim(Right(s, (Len(s) - InStr(s, " "))))
* [3 v& E0 w+ x" ~1 u1 x: y+ Y' aPrint a(i, j);6 ~8 ^1 Y, A/ ]6 [. z
Next7 x$ |; |" I; L: X6 O+ Z' t
a(i, n + 1) = Val(s)
2 t% d3 `) [( W7 ^" nPrint a(i, n + 1);
: Z# Y2 ?6 [* u6 }! t2 APrint
. ~& x+ s; K" j( TNext/ z" k" J% K% `  u3 a' m5 l1 {
& c; t( n/ |3 H9 H/ |9 V
For k = 1 To n - 1 '开始消元
. a0 e/ S: S) k% H# `7 YIf a(k, k) = 0 Then
, ~0 B" }# `8 J, gMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
6 P* b# b, z& H+ k) S; a7 iExit Sub0 F" Q4 o# ^7 G) @" u1 v9 c
Else! M6 m; P- k( l4 W) Z
For i = k + 1 To n
/ C( s- k5 y1 ?. ~1 w5 i( Ml(i, k) = a(i, k) / a(k, k)
: `0 ^6 s4 q  K9 f( oFor j = k + 1 To n + 1/ w9 X7 G5 W5 Z: {  {3 R6 z, J
a(i, j) = a(i, j) - l(i, k) * a(k, j)
9 a) x3 b+ T7 o) mNext  D, k3 A; t- X8 U1 x' \
Next
; F" A- y) T, \& Q  [/ }. ED = D * a(k, k)
" ~! ^4 K+ ]& p9 bEnd If
/ q# ^1 z% Q) l' r& a0 T0 d2 RNext k '消元结束  I5 S. Y- g4 p7 E2 |/ e
If a(n, n) = 0 Then
) M0 I: i% i' S" ^1 a; r' eMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"( H; L6 w5 n; N$ Q8 P$ [
Exit Sub
& O& J6 w* d  P# oElse
0 f$ B8 C* N- |3 w+ d# C* P2 S, G/ vD = D * a(n, n)7 [1 z, q# j6 E
End If! q- w- _) n7 ?
Print "--------------------------------"
1 L$ N; v. C9 e% r8 vPrint "系数行列式的值是:"; D. N6 G% z$ U  \* ?3 A' C
x(n) = a(n, n + 1) / a(n, n)
, h# H0 s8 G4 M0 T4 u  hFor k = n - 1 To 1 Step -1 '开始回代/ q6 {  s; i* \5 F! K% ~
For j = k + 1 To n$ X6 e6 b( k1 C) W1 }2 T' _& ]
m = m + a(k, j) * x(j)
: o6 i$ a8 p5 ?. f. f" Y+ g. z* {Next j. n% Q6 H# f& ^, G$ P
x(k) = (a(k, n + 1) - m) / a(k, k)2 u+ d0 G$ k3 W1 I; i# a6 i
m = 0
* d( ^$ F; ~( o) ~Next k '结束回代/ A- L4 k$ o, w; O4 x

7 E; ]  ~, q2 N; R2 tPrint "--------------------------------"6 o$ n' A1 f2 p! r5 o" `
Print "方程组的解如下:"5 J% U, m3 {* x, _8 T
! i. Q" x: z* s" N5 i
For k = 1 To n
, Q% y! R; t8 v, Y2 sPrint
8 L7 i/ u/ ~9 U; A4 IPrint "X(" & k & ") = " & x(k)! o" b# \# R9 s8 ]( Z2 o  z
Next k* \/ J( z* k5 x) k
Print "--------------------------------"
5 d) m1 T8 ?3 `5 G! HPrint "其中各行Ax-b="1 S4 f5 h3 T+ b' U+ @" R* d. P& t
Print
0 Y" s+ L" h" s0 C& U! UFor i = 1 To n
4 N0 Y' h' ~  ^/ @t = 0
* n# k% q" w( b( L* ]$ ZFor j = 1 To n
2 e; L" M8 r! @2 h, i% bt = t + a2(i, j) * x(j)
. N. k+ u' i, a$ MNext j6 l8 e; a* M( x; v: x; W
t = t - a2(i, n + 1)
, _7 h; F4 Y6 o. Q, CPrint Spc(5); "第" & i & "行:"; t
8 d! }! [0 d  \' L- g* G6 ^' p% NPrint+ u, y5 l& {5 C, Z
Next i" q/ k1 `" [8 \1 [8 ~: b" @7 @
  l8 ^2 Y, i9 l
End SubPrivate Sub gauss_Click() '高斯消去法9 W4 T# w6 {, }- |7 T& V
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single) O7 w- ?( b  u/ G1 @
i = 1: j = 15 W. x2 y$ j) m9 T; p& }4 B* W
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
" J7 L" U% B9 H0 }/ u: OReDim Preserve a(1 To n, 1 To n + 1)
9 Z2 T& k) C. Y- QReDim Preserve l(1 To n, 1 To n + 1)5 U) ^: X9 ?8 W: x0 V6 P! C
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
9 y6 s0 h* w% {% F' Y0 vReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
7 V% x( c% u6 x/ HFor i = 1 To n
. y+ W7 B& q1 q# T6 aFor j = 1 To n
) K0 q6 _  T* p8 P& V& `# \* sa2(i, j) = a(i, j)
) W' v1 _! k2 JNext6 G$ w1 B! G: N. B+ \: |7 P- D6 F
Next '将a()的值全部赋给a2()+ g$ g) L7 Z. O5 k: F8 O: c0 |9 C9 [
m = 0
( W+ V) T4 J* V/ }/ b' CD = 1# K) `5 r/ @2 Z+ x( \. v/ W
ReDim x(1 To n)3 r; U( }& S$ g
Print "--------------------------------"( K  W& f, r: d6 j4 p" r& P
Print "您输入的增广矩阵如下:"
3 K3 y7 j1 R) eFor i = 1 To n7 K3 o3 K7 w$ F6 K( i( \/ [3 h
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
. l( n! a3 F% ]6 cFor j = 1 To n
9 z1 \* v! g" X; |7 K8 {9 m8 Sa(i, j) = Val(Left(s, InStr(s, " ")))) w8 t# M4 c. A+ R+ k
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
# ^/ A" X& `+ \* I  C/ @Print a(i, j);
- A0 \- x7 Q# w6 c: \! eNext  F9 c, F$ p- y1 c5 q" z$ Y3 r
a(i, n + 1) = Val(s)
: I+ y, n% p; h& GPrint a(i, n + 1);2 a6 i( V' H% c. _
Print
. e9 z, g; J$ b7 mNext+ W7 ]- c5 ^, O( I6 d% Y3 t

6 q1 N3 v8 c1 w6 ~( Y1 KFor k = 1 To n - 1 '开始消元4 F5 P! N! r$ [# A. t% G9 w- _7 S
If a(k, k) = 0 Then. p$ P+ h; W6 ~' R/ E) o8 u
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
$ b( |3 w& D, h( N! L( E. fExit Sub
- V7 Q; @! G- I) hElse
1 F2 h2 o* d2 E5 w$ IFor i = k + 1 To n
# Z% \4 f' D, f+ o3 [' P9 Bl(i, k) = a(i, k) / a(k, k)
! T9 C' o) C4 @0 c  w0 B/ a; kFor j = k + 1 To n + 1& E. J0 G% f/ J& |+ \  E- o* ~
a(i, j) = a(i, j) - l(i, k) * a(k, j)$ g, @, d8 H$ Y: I% U/ d
Next' D6 h6 z$ M  S! c; M: ?
Next
  ]# x+ t$ F0 X  ^5 |- J# s. `0 R: j9 CD = D * a(k, k)! Q2 U% [4 e8 x6 ^% ?
End If" b$ T. b. X+ [& W! g# {7 ^
Next k '消元结束) A4 n  f7 P3 g* B- y  L: J
If a(n, n) = 0 Then
& g8 h9 R! I% DMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"- m! t$ b2 Z% Z) z  Z+ ^; u
Exit Sub2 B  `6 U) Z* R: U
Else) r9 R$ V9 K6 v1 \& H$ }; @( P
D = D * a(n, n)* e& C7 D* ^5 i( p9 Z
End If' N3 T! h  {+ U6 W, s0 ?+ O3 X
Print "--------------------------------"
4 H) }! n4 r$ X7 _# a3 R" @Print "系数行列式的值是:"; D$ ~( {+ i9 A0 O4 p- d* e  J
x(n) = a(n, n + 1) / a(n, n)# T- x$ M7 e  }, i1 J
For k = n - 1 To 1 Step -1 '开始回代
; n+ N) ~0 Z% k8 I0 OFor j = k + 1 To n
+ P5 X  O! r. v! l* Nm = m + a(k, j) * x(j)
% ^. k0 |) E6 UNext j
' j) m/ a; k: `- u2 L* ]3 W( Q# B3 j9 kx(k) = (a(k, n + 1) - m) / a(k, k); z( s8 T0 K$ k# Z/ n% k0 Q4 }8 Z" @# u
m = 0
, ^6 f+ D% b4 [; y4 P3 D  G) d( \+ m  oNext k '结束回代
, Q+ a3 K, _' Y$ ~+ ~- i* _4 m, T
Print "--------------------------------"3 ]. Q' a4 B! J( X5 o1 _$ Z( X  A% D
Print "方程组的解如下:"3 @  n3 D) o, k
$ Y3 y# _. c- F! F
For k = 1 To n
  @8 @6 }5 a; d1 K7 [Print
3 y7 x/ f) F. m/ ]/ GPrint "X(" & k & ") = " & x(k)$ u' [4 C# Y# N2 D
Next k
8 @" r7 R! W! `, N2 ]Print "--------------------------------": k) U1 @3 z4 K2 b. q# }0 M  z
Print "其中各行Ax-b="
5 ?, |- u) T6 }) a2 `Print
! l* U1 w; ?+ U- t' Y/ xFor i = 1 To n
- V* C  h6 k- F! u- c" g, et = 07 ]% _) M' W$ U5 r" {( B
For j = 1 To n" @4 O9 X, N4 k: w
t = t + a2(i, j) * x(j)9 ]# p: i9 e# b5 A- D; l
Next j
  p8 P# N9 t  G9 J; w. Nt = t - a2(i, n + 1)& D) f- k9 k& f+ |
Print Spc(5); "第" & i & "行:"; t
3 [, K2 q& I$ ?# s! s2 \Print
6 O: e" D$ X, ]  @. P% U+ uNext i9 ?( t) \; ~( x
9 t7 r8 l$ i9 [' N
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-12-21 02:28 , Processed in 0.968781 second(s), 67 queries .

    回顶部