QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法' ?$ |5 q" z6 Z
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single+ Z) L; W; a, |1 L* M; G7 h7 v. t
i = 1: j = 1, Q! j9 P$ j6 e8 B( ~- o1 k
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))' q* ]+ j& n% U$ L5 c# Q2 u; o5 ]% h
ReDim Preserve a(1 To n, 1 To n + 1)
8 i: h7 @/ G9 L0 Q8 PReDim Preserve l(1 To n, 1 To n + 1)$ n# f8 g# h( e& J7 h, a. P0 Z
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single& l5 _" r, O4 F1 L% s9 |
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
4 }# a& ]4 @( @- ^. IFor i = 1 To n$ [! Y! ]8 l% e  a3 _6 @+ v0 j
For j = 1 To n# |: Y8 y) Z$ r, h' V+ f+ A
a2(i, j) = a(i, j)6 N8 Z: x1 T; h7 ?, N7 {7 }
Next" r$ @2 W% Q$ m1 `  ~& N, L
Next '将a()的值全部赋给a2()1 T0 Z0 m7 l8 x3 }" G6 Q
m = 0
; U- T: |6 h2 M$ \: z1 I) R! {D = 1
/ ^( _7 \9 Y! j' AReDim x(1 To n)# k; ?# L8 D9 ^6 a0 ^& y
Print "--------------------------------"' [! w9 [& n& z+ N( Y- Q3 ^( g
Print "您输入的增广矩阵如下:"6 _- ^* b$ n, G# |2 p1 n  I; W
For i = 1 To n
- B4 u0 t7 {' n' z  n' ^8 p7 u- Ps = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))4 t* Q! O8 b! L+ Y: L+ p
For j = 1 To n, \, I8 P  d+ ]( L
a(i, j) = Val(Left(s, InStr(s, " ")))
; ]9 |& ^) R+ n8 \) Ns = Trim(Right(s, (Len(s) - InStr(s, " "))))9 d! l* [4 j9 ?% T9 ^' t; h9 W
Print a(i, j);
! _3 Y/ S' J' G, X+ U  M0 I& rNext
" }6 b) Z% _5 W  o& B8 F) R8 Qa(i, n + 1) = Val(s)
4 L4 d" Q9 [* d1 b. M+ UPrint a(i, n + 1);" i' ^% P. S5 k# r7 ]5 `6 M
Print
4 o  }* P$ ]0 H  WNext, c$ C7 n8 M( G, p/ V# V

. q  U: G) }( X% ]# k5 Z9 `3 T) R. AFor k = 1 To n - 1 '开始消元. Z1 q5 d6 ^" W/ d+ s% @& ]; R
If a(k, k) = 0 Then
2 H1 [2 W9 K# T2 I, q; R! _MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"0 u- z( w$ U' F
Exit Sub
9 q* V; f! \6 BElse
3 z( X  p2 h6 t3 wFor i = k + 1 To n0 Q( a& h2 T/ F# X; b
l(i, k) = a(i, k) / a(k, k)% D) ~5 A' g2 m+ U; o9 M0 ?2 i
For j = k + 1 To n + 1  m/ |7 V* ~3 ]+ y
a(i, j) = a(i, j) - l(i, k) * a(k, j), X5 q, v" H  P" t4 Q  ~1 K6 g) ]
Next
) Q% o7 `+ u/ R1 x. M! WNext
- X: p/ o- Q- Q5 yD = D * a(k, k)  ]3 R* |3 \) R* @
End If
% n. G7 n) ~+ V+ b- g2 B! YNext k '消元结束
+ E5 `( a6 B5 Z! R. L. U6 nIf a(n, n) = 0 Then
0 P- y# Y9 r% k6 I9 J0 |: }MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!", F2 W/ c0 T9 i2 K
Exit Sub
" f  n( r6 x$ C; [# d' oElse
: x  w: o0 ^# ^/ B1 G1 |3 h4 F- VD = D * a(n, n)
. T0 z: `( o/ v; K/ D. B9 g. \% bEnd If! u/ N) j' ~8 F# N3 H
Print "--------------------------------"
, G, y9 w+ T/ b' i5 ]Print "系数行列式的值是:"; D
3 S1 k8 D& v1 s$ L& F: ~' Yx(n) = a(n, n + 1) / a(n, n)
: T$ T0 U6 c6 N- o# i% U( u6 r$ c; K% vFor k = n - 1 To 1 Step -1 '开始回代
& L0 t7 i# q0 B) YFor j = k + 1 To n5 V% f# n, S8 B
m = m + a(k, j) * x(j); F) a) a! k0 y, |
Next j
3 I6 Y7 R* F8 tx(k) = (a(k, n + 1) - m) / a(k, k)
( v, ]' i* i4 O2 o- f' I$ Am = 0
* {, z$ G7 n0 u* jNext k '结束回代
2 B5 [: d4 h& |# o$ T$ q- X2 ~$ _4 l. M- x  G- g+ j/ i7 _7 Y
Print "--------------------------------"+ S, w3 P2 V) C# q- I
Print "方程组的解如下:"
) Z" c! ^$ _8 [; u- X) G8 }
/ a% H5 r( n: z5 qFor k = 1 To n
7 E/ A# |. @( oPrint9 e4 Z; m; g# C$ t. B; F2 b/ q
Print "X(" & k & ") = " & x(k)" y. T& i: w+ }5 F4 K
Next k; @! F: s! `$ {0 F) P" g4 d1 V
Print "--------------------------------"; V. ~3 e0 R* p+ a0 m
Print "其中各行Ax-b="* t8 K% P+ O" v+ d
Print
8 [+ ~* O% u0 Q, ]* WFor i = 1 To n5 V- z0 Z5 ?- A: I9 T1 S5 R9 K+ i
t = 0+ t- l. Y9 {% E) ^. I
For j = 1 To n
7 A9 O) F( `* a, e5 c8 It = t + a2(i, j) * x(j)
$ ~! T2 E+ }& BNext j
1 l8 b& d1 K6 Gt = t - a2(i, n + 1)! k6 F3 i, z4 e' I7 f9 E8 P
Print Spc(5); "第" & i & "行:"; t
! m2 B+ k0 M. g  k2 gPrint
0 i6 G, E. a1 W# _Next i: ^" m$ k0 c0 c. V$ |
6 A) ?2 ?2 D* v
End SubPrivate Sub gauss_Click() '高斯消去法
# Q! ]  X- x. z, I! KDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
  \; Z. H$ x" M' ]0 X5 H/ Q0 m" Hi = 1: j = 11 g' J! [3 g  ]4 q. w7 S5 k  ]
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))6 I  H) b- I* O1 Y( |3 |% b: T3 x
ReDim Preserve a(1 To n, 1 To n + 1)9 G! M; x1 ~  P  b
ReDim Preserve l(1 To n, 1 To n + 1)
; I' g. r- V9 EDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
' w. o$ D) z' M+ s0 HReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
+ P& {3 W! ]) [$ z. y( f7 YFor i = 1 To n
& g1 U$ x5 c' t8 i( e: L6 FFor j = 1 To n! i% P6 N5 L4 w' P! q7 V# ^' ?2 E
a2(i, j) = a(i, j)- J3 ?* x8 e4 n% O6 X' y4 M
Next
9 T& U9 @* N) o3 Q) Q6 fNext '将a()的值全部赋给a2(). H% k* c6 Q0 ~
m = 0
, X6 H; o0 Z+ BD = 17 P- N" M; A) n) {/ p8 p. d/ `
ReDim x(1 To n)2 ]& S4 p* ]) T/ [/ L
Print "--------------------------------"0 H+ v: z+ R1 T# c5 p8 p% [' [1 r
Print "您输入的增广矩阵如下:"
+ c2 j8 v2 i- r0 P, s: yFor i = 1 To n+ T; m: A0 s9 V6 \4 l& w
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
; C4 X* w& D. }- h% wFor j = 1 To n
: K& [. M3 W, ?. d( _a(i, j) = Val(Left(s, InStr(s, " ")))
0 r8 ^, d$ R! _! ns = Trim(Right(s, (Len(s) - InStr(s, " "))))3 }5 O0 S6 Y( t
Print a(i, j);
. a( T( {1 F5 S% I) z9 jNext
* w  a! B7 H7 K. }. D  y& ]a(i, n + 1) = Val(s)/ k% q! _: j# j! `6 y; ]
Print a(i, n + 1);' S$ V! H: l% R# \' d7 Q
Print9 I- Q5 y* f2 h4 ^/ e
Next& |7 s" u2 ]* y9 l/ {) Y) E. d

- ?" L# m, V4 [0 IFor k = 1 To n - 1 '开始消元  G) ~. `! ]; x  A! Q
If a(k, k) = 0 Then
0 ^+ k" `+ K  _$ aMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"& h; z5 N, J" b" P, p$ M7 o3 u
Exit Sub
* ]4 Z4 l: r* ?& p* B# _& QElse
) W# m* ^" V4 j; g! v6 VFor i = k + 1 To n
3 t& U7 b. O# M1 U* ?/ M) J$ [l(i, k) = a(i, k) / a(k, k)
/ _6 o. a2 Y2 K5 F: SFor j = k + 1 To n + 1
: r7 Q  ^' m6 I7 z! pa(i, j) = a(i, j) - l(i, k) * a(k, j)
9 ]; l( U9 g1 {: N' nNext
  N! ^( b  ]7 V; i' P9 jNext
: Y1 ~1 N3 Y0 o7 ^: k: i; p/ vD = D * a(k, k)
0 M' I. [. _& H- LEnd If/ U/ B2 Y( p9 P* U! X
Next k '消元结束) N1 G+ i' s. t* p: s
If a(n, n) = 0 Then8 R, b, l2 ]7 j$ x
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!": F" ]% ?( V0 {: X+ B
Exit Sub' G+ v9 U. r7 v1 Q
Else
- X% O8 ]4 B4 I9 r8 C- I0 _D = D * a(n, n)
) J; T. {0 ], M9 z) `  y; KEnd If3 e1 ?1 H: C) \8 y. Q( h
Print "--------------------------------"7 B  b6 p, g2 {7 y
Print "系数行列式的值是:"; D
7 p6 h. h$ @" W: lx(n) = a(n, n + 1) / a(n, n)3 e$ ~& V. z* m% E1 r% ^
For k = n - 1 To 1 Step -1 '开始回代
  C. j: Q) G+ ^. ~For j = k + 1 To n
. s) w5 A3 O3 U0 v  gm = m + a(k, j) * x(j)
, s- n, q" p/ o6 o# q6 E: G4 xNext j4 ^) U& o1 F: s2 J; }
x(k) = (a(k, n + 1) - m) / a(k, k)( {& F  y: |& U$ g  M6 }9 c
m = 0
/ {* ^6 J3 U* `1 T' `( mNext k '结束回代+ I5 B  v& J) ^4 p% |
, x! e! L3 s! n9 b' ]: z
Print "--------------------------------". W9 Q0 F& w+ C; l5 L5 w. V
Print "方程组的解如下:"
: e0 E% t  r6 s' W; o0 Z9 h& Z$ l: X/ ^; G5 i! T
For k = 1 To n6 J+ a8 t0 o7 U
Print8 Q& A/ W  {, L* K' N. `
Print "X(" & k & ") = " & x(k)
# `. b' a' u1 x3 A# O2 n3 h6 T3 iNext k
- E1 o% z( t. n  w; F1 ?Print "--------------------------------"
- m6 S5 V# p$ N) SPrint "其中各行Ax-b="
$ b1 t' ~9 @4 n( q( @1 y4 iPrint
; a% Z7 N/ j3 P+ ^For i = 1 To n
3 v. U, X! a8 zt = 0
+ A5 [2 C8 h- L6 @8 Y8 z7 TFor j = 1 To n
/ r! I, Z; f/ i4 }$ t  ^t = t + a2(i, j) * x(j)
% S! Q  w; N7 lNext j3 v% x. u& V/ G& {
t = t - a2(i, n + 1)" Z; e9 |9 r5 J0 z; G* f8 @
Print Spc(5); "第" & i & "行:"; t
0 S: d7 G% F6 w4 ^" RPrint! ?3 H4 q) Z" |% {* |
Next i
! S# q: U0 F9 v3 v
$ a# K0 C" @5 W: z8 jEnd 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 18:18 , Processed in 0.367725 second(s), 68 queries .

    回顶部