QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
2 t: |( E. F4 Y0 tDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
, w0 b/ O* C' ki = 1: j = 1
6 w$ d' M! X, _: G: yn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
! R' ?" {. C' WReDim Preserve a(1 To n, 1 To n + 1)$ w6 p- E" i# L. k
ReDim Preserve l(1 To n, 1 To n + 1)3 X6 m, y9 }) z/ e4 Y( i
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single2 T% r3 w* p* A1 r
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(), S4 [2 y& f4 ]% T! O$ f" _0 K7 L
For i = 1 To n
1 s0 K8 H0 f4 j/ t/ GFor j = 1 To n
; o& t7 z+ @0 h5 v* u7 ^+ w: ra2(i, j) = a(i, j)
* g) j% G! ^% B2 V" F( ?Next
( Y: Z* G5 Y! y* c' _Next '将a()的值全部赋给a2(). B( ]+ G3 P+ n/ @! n
m = 0
! G9 e! Z. i9 i' p& s: H  CD = 1
! t9 X- w1 I. S( M# ?. h9 [ReDim x(1 To n)+ d" e0 ?! C. c4 n9 a: t
Print "--------------------------------"6 }5 |: K% k/ w* ~9 x% Q
Print "您输入的增广矩阵如下:"( r1 K; W( Q4 r2 k) D
For i = 1 To n, K: F/ [3 R& D! S4 @* L+ [
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")). J0 d3 C0 p7 t3 U
For j = 1 To n$ w7 H* K0 W1 |8 o8 U9 ]
a(i, j) = Val(Left(s, InStr(s, " ")))
# f  }$ r% a; t6 J6 fs = Trim(Right(s, (Len(s) - InStr(s, " "))))
5 V5 @) [; a6 }9 Y" L: F8 pPrint a(i, j);1 c+ C% [' u2 K5 B1 Q) Z0 h
Next% H4 g3 Q( G9 q$ [2 ?6 R1 o$ _
a(i, n + 1) = Val(s)
+ x) R, T$ G+ K2 f7 lPrint a(i, n + 1);9 Y6 j0 H7 B/ i. G
Print5 j6 p; l+ ]* Q- a' L
Next* A# K' Z7 u1 w+ \5 J, w

3 I* `1 U- O) y) C8 n# oFor k = 1 To n - 1 '开始消元
* d4 y, n* u$ G" R- i( T7 V4 WIf a(k, k) = 0 Then
( l9 W; Z* [. c3 s: Z% R; CMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
" Q/ c& p0 |" d4 h: iExit Sub
' W" A  C% @( l, xElse
: K9 f! v: G2 v' R% vFor i = k + 1 To n7 c- y$ X  N/ ]* t( t2 v, h
l(i, k) = a(i, k) / a(k, k)
- u, A# L! O/ GFor j = k + 1 To n + 12 h& X" x/ `9 M% A) r
a(i, j) = a(i, j) - l(i, k) * a(k, j)
+ S1 Y9 R. x6 y# _9 P% F2 ENext, h2 p9 J" C  P- o6 i! x1 o
Next
0 b; ]8 I/ e4 ?* E7 Y4 yD = D * a(k, k); N" P/ R  W/ z) J
End If: k) K$ i. A  A) T
Next k '消元结束6 {8 `7 e0 o( U. x( c, l; P
If a(n, n) = 0 Then
& a2 z. f' J4 D9 P2 ^; X; @MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"$ ?1 }0 s" X/ {1 {' s
Exit Sub
7 a# D9 s$ k4 u5 R4 g; x8 f( FElse
- Y9 [# q$ f# nD = D * a(n, n)
; P2 R+ F1 G! F0 I" A, c2 i& IEnd If% I8 D* }7 X3 b# j) }+ t0 a
Print "--------------------------------". C2 Q1 W2 p( i
Print "系数行列式的值是:"; D
& R3 M" x# j: e& `$ S3 U( o; `x(n) = a(n, n + 1) / a(n, n)- s4 w, R7 E1 W; A8 ~# C! ?. i9 m
For k = n - 1 To 1 Step -1 '开始回代1 }% ]& B9 v9 j; F! U
For j = k + 1 To n; D% J! u* t7 V& F4 p  c
m = m + a(k, j) * x(j)
# q& _) k) z# Y: W, r( LNext j& U6 t' B5 Y$ P8 Q+ M
x(k) = (a(k, n + 1) - m) / a(k, k)
( m5 C1 C  L8 e& J" I" |1 vm = 0
; z' A3 Q' H4 m1 O3 s! ]Next k '结束回代, D( x8 |5 h. c! o8 l
4 g1 `/ ]" m: f0 _# U- D' B
Print "--------------------------------"% i& w6 \: n+ d2 d$ Z0 Z" d- o
Print "方程组的解如下:"1 [* r6 S9 b6 I3 X- U& |8 w

( b# J5 k4 d5 M+ t# ]2 rFor k = 1 To n* |) J9 l$ R, S5 V/ h
Print
: c( ~. ]7 N/ L+ Y& c; h: @Print "X(" & k & ") = " & x(k)" g: E: a3 u) G! P& f( s9 j
Next k
/ Y. H# S; k( X5 m& MPrint "--------------------------------"* o" N5 S) E0 {# v% c' D$ T$ i
Print "其中各行Ax-b="5 W0 K; o/ z) n9 b# @6 a3 E
Print
3 S3 e6 H8 U1 {0 d" SFor i = 1 To n: {8 ]* b( `! v4 r+ Z) r* E/ F
t = 0) v- s" ^5 }! A
For j = 1 To n
5 X6 p1 V; D1 g/ r: V2 @t = t + a2(i, j) * x(j)+ I* j$ N- I" K$ [5 p& g7 s6 Z
Next j
# m6 |) g4 W8 U7 rt = t - a2(i, n + 1)* b, @: M* I- |1 |' u
Print Spc(5); "第" & i & "行:"; t
! H8 {! C: C2 Y$ h7 cPrint
& |0 V0 I5 _/ VNext i
3 D6 G4 d. c5 I: g
9 ~* Z- k# \% ^. [End SubPrivate Sub gauss_Click() '高斯消去法
5 c* E* ], o1 t; m  ^8 mDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single9 o0 d' L% B7 l" ^
i = 1: j = 16 \; `: v% r+ e8 w7 L
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))) z. x, o1 N0 a, [0 Q5 s! `
ReDim Preserve a(1 To n, 1 To n + 1)
5 ^& C9 [+ c2 E4 S5 w1 BReDim Preserve l(1 To n, 1 To n + 1)! t' h( {- X8 O
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
. f" L! q9 `- @+ k) H3 S; DReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()" y& y) z. T* u. [' V
For i = 1 To n/ g6 P5 ^3 K5 S
For j = 1 To n
- w7 B9 T1 [9 x" Ma2(i, j) = a(i, j)
& ^  v- z# r, s. }Next' w7 C: `  g/ U5 t# _0 C* P6 k3 C
Next '将a()的值全部赋给a2()1 O- c' H- t& Y8 Y$ m
m = 0
) m+ o! }5 B' f8 M* z9 [D = 1
3 c5 o% m3 t" G- A: `ReDim x(1 To n)
' C# R/ |9 _% O& Y0 @) e8 NPrint "--------------------------------"( Q0 G$ b+ e2 ^9 v! B& }, e
Print "您输入的增广矩阵如下:"0 c" P2 T# `  R! Q6 V
For i = 1 To n
, {3 j& C& R& Y. R+ y$ ^8 @s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
" r$ [& O" B) x; i; O5 hFor j = 1 To n% h, o6 X5 ?9 S. P7 V  O' H
a(i, j) = Val(Left(s, InStr(s, " ")))
3 l8 L* t8 S; \7 ?* a7 X# e9 w/ os = Trim(Right(s, (Len(s) - InStr(s, " "))))
* A( f; w7 B  ]Print a(i, j);
: u& ~/ Y. g% u! X0 a" XNext, P$ E2 {- {2 X- m- [# i+ O
a(i, n + 1) = Val(s)
4 [! \% I7 y6 J+ z- sPrint a(i, n + 1);
. N) J2 E' ?) @, `, a" C; ]- uPrint
* n# u$ d+ G1 Z: g& LNext/ @- B/ ?) Q7 N% [% t) q$ m  I+ R% P" K

/ s3 n  T+ e4 x' UFor k = 1 To n - 1 '开始消元
/ U& I3 R" m9 N1 a( _! ]2 W$ s5 QIf a(k, k) = 0 Then1 y0 S6 C( S) j' `
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
; p/ `# M0 [9 F0 I" ^) IExit Sub
- M- r% N% |& C! W3 M7 J) WElse
8 H8 r9 s6 f1 H$ DFor i = k + 1 To n
5 w* Z! \  v4 k% z8 T4 o; @$ A% {l(i, k) = a(i, k) / a(k, k)3 h$ Y; H( E5 l8 A' i; ^: F! o/ Z% h" F
For j = k + 1 To n + 1
( Q" M5 m" g% M. s; ga(i, j) = a(i, j) - l(i, k) * a(k, j)
0 b+ ^, c7 i, V9 {, V8 VNext
7 ]# R9 y  }% V! A  Y% ~8 D, O& DNext, [9 }4 C7 t/ f/ X
D = D * a(k, k)
# l5 B* i2 ?# u. f" nEnd If. }6 _" t& s3 I8 |* X  w& S
Next k '消元结束
' H, X" |* {4 A4 q4 y# M! u# @: ]% dIf a(n, n) = 0 Then
+ Q" T+ H" E7 H. _& C) u  x( Z6 EMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
7 u8 M4 \1 E0 b4 C" }6 B$ lExit Sub
' E' T. h& J$ `% [Else
# g+ z) j) S+ sD = D * a(n, n)
  }# x6 l2 [* X, J, n: w8 WEnd If( ?1 v, ^4 D" d# e  }
Print "--------------------------------"$ p/ K/ N0 R/ P4 K( O
Print "系数行列式的值是:"; D
0 I! M9 e) N! Nx(n) = a(n, n + 1) / a(n, n)( V; P( W  F& W7 z9 v5 G' ?
For k = n - 1 To 1 Step -1 '开始回代
) d( ]4 ?6 K( m3 z- |; TFor j = k + 1 To n! W5 d  a( ?3 ]) Q) S; o& S0 ~
m = m + a(k, j) * x(j), X6 C  u3 |4 y' j
Next j& C, s1 R, T: I, U+ [9 P0 M: A
x(k) = (a(k, n + 1) - m) / a(k, k)6 {9 e6 x. B! P+ t6 `' x
m = 0
% g( l; S7 }1 R! R2 Q: A8 F6 pNext k '结束回代
, n; V( u0 a+ r2 H
, Q! t4 r# r$ {) _% Z! TPrint "--------------------------------"
: @! h5 d9 Y& O2 zPrint "方程组的解如下:"
' E" N: M' X. `. m6 A( h7 r1 y6 T$ d& L$ t/ A
For k = 1 To n
; Y) N) b/ U& SPrint
0 l8 v1 t( Y# p( ~% Z9 l/ qPrint "X(" & k & ") = " & x(k)2 ]6 i( S: ]$ v% Z: g. X
Next k
' @4 p. f0 d& L5 X) f" d$ U0 o9 RPrint "--------------------------------"
7 ~2 [" J. k2 ?9 X9 h5 U1 \/ CPrint "其中各行Ax-b="
1 @8 j3 ^: [- N& FPrint
3 P9 p4 f" Q* [) A* t, uFor i = 1 To n
: V1 P. q( e/ c5 D& u$ At = 00 C3 ?& z2 r! j) X- F; `
For j = 1 To n; {9 x2 ~* y) G0 ~( ?8 t
t = t + a2(i, j) * x(j)
: B  o, U5 w1 h2 s, G* c3 D, uNext j
: B( P5 y5 J" B+ M) I: Ht = t - a2(i, n + 1)1 A8 }& J, ?4 \6 e- ^* B: v9 U) M
Print Spc(5); "第" & i & "行:"; t! O  W" ~# C7 \3 F' J/ ^
Print
& Q' A$ P1 p% hNext i; @" U( _8 D; v' O: ]1 Z
3 p" z" k( h$ `+ k( |
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-7-18 05:04 , Processed in 0.432519 second(s), 67 queries .

    回顶部