QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
% Y' u" f7 F' u5 h7 G. Z5 B  uDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single4 b+ P  x3 c# r% r
i = 1: j = 1) W) g* |' I! N5 |5 @  ]3 U' q
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))* J; M; _$ p* q1 X
ReDim Preserve a(1 To n, 1 To n + 1)
7 b: [1 h. B4 E2 {% IReDim Preserve l(1 To n, 1 To n + 1)3 t, Z$ @" h; I# C; q/ T, f# x
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single5 w$ J  I6 b) h
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()8 q7 K& g, `+ G' s3 [" \( W' X
For i = 1 To n* _$ b% C* }( I1 v
For j = 1 To n
! v5 t- a- T) d  _% o  ?& la2(i, j) = a(i, j)
1 q+ W4 `5 x$ R. m3 PNext
! K4 d, s9 Z; E- }  h: HNext '将a()的值全部赋给a2()
9 f, F- ^0 P& P0 h6 ^- h- lm = 0
- D, W3 y' [) v! r! E7 C, aD = 1" n$ w6 S! N4 P) }
ReDim x(1 To n)
9 ^' O% \" d5 i9 w' Y+ L; S' ]Print "--------------------------------"" o, d" ^6 j4 v. g! r
Print "您输入的增广矩阵如下:"* k4 D8 @' w  u9 O! ], S; L( r( I
For i = 1 To n% k; L& h# ]8 J. z! Y, B7 q3 [
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))( \( q8 h" M6 ]" M$ d! Q/ q
For j = 1 To n$ Z4 G2 l% i9 F* [3 d
a(i, j) = Val(Left(s, InStr(s, " ")))- g3 G, D0 u2 G) j1 X- Y
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
/ N* h3 R1 f) R5 ]! t1 L& RPrint a(i, j);
2 e0 f; v' b4 v1 p7 hNext
  X% k' p9 E, o9 d2 ~* Fa(i, n + 1) = Val(s)
2 v; D  w! Q" Y7 a% g3 y. WPrint a(i, n + 1);
# z9 y3 k. r$ y7 B) M" h  N! hPrint$ s4 i( S, S8 H
Next
, [/ `- @6 S2 m: ~
% r& B1 E. l. ~6 K  R2 ?For k = 1 To n - 1 '开始消元# t) z8 T2 {2 i/ `; @
If a(k, k) = 0 Then
) g# Q, c$ q! p/ B) [7 zMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
! d$ p4 x  ?% @# g; P, n" L0 rExit Sub" J; G' j, R- Q. @, s7 A
Else
! z- ]% t0 a- _# [0 H# V, b6 g7 nFor i = k + 1 To n) w! Q0 x8 r# V, P: P$ G  A
l(i, k) = a(i, k) / a(k, k)
$ [9 ]9 g) b* ~* {  I0 iFor j = k + 1 To n + 1
4 D2 k, ~6 n# K& T, n' g9 }) ra(i, j) = a(i, j) - l(i, k) * a(k, j)* m  m; D/ n5 `7 z
Next
8 q* m( c& S0 @# v% ]Next* r2 l) O3 @$ {2 `
D = D * a(k, k)$ E' o4 D1 P8 Q4 Y
End If2 U9 K, _3 t( r
Next k '消元结束% O4 ^# D9 m& P
If a(n, n) = 0 Then
  Z+ ]0 H7 c/ i3 P2 K' _MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"1 {+ |6 i) r& n4 y" r
Exit Sub) e4 y- x6 M' r5 F5 E" K- A" X
Else  q3 V. K3 |: _3 B2 R
D = D * a(n, n)5 r# C% Z8 Z1 c
End If
( R# E0 @" w6 e9 S7 S' ZPrint "--------------------------------"
+ o# b. R8 d! Q( q7 `3 rPrint "系数行列式的值是:"; D
" v: `" F8 e6 c6 Tx(n) = a(n, n + 1) / a(n, n)$ {6 I) r! y+ n' I: X2 u4 |0 T
For k = n - 1 To 1 Step -1 '开始回代
7 L9 j* g- N1 s5 |- FFor j = k + 1 To n' N4 B  b/ }) {0 w" X1 \
m = m + a(k, j) * x(j), Q& f3 j) Q3 M' U
Next j
0 q4 t2 c8 [2 o8 G7 ?x(k) = (a(k, n + 1) - m) / a(k, k)
+ j3 k+ V) Y! j' um = 01 P" e( c+ `2 T  C2 _
Next k '结束回代$ h9 f* E& h1 l  `

' }/ `. p5 {" e& HPrint "--------------------------------"
# u+ Y3 P; p7 |8 w/ [Print "方程组的解如下:"
9 s1 y0 t  p$ G# P# x3 L  g- E$ |: E
For k = 1 To n& V& |* l! a# \4 F; G
Print
- h8 x5 g% d' }# \$ fPrint "X(" & k & ") = " & x(k)
& Y& `* _2 G% v3 e" @9 cNext k
2 S- R& n. q( ]6 ]# }1 N6 FPrint "--------------------------------"
. O- N" \2 a- IPrint "其中各行Ax-b="
: l$ |, S. R! F" T  LPrint
8 x; n/ D1 O7 a- ?& r  _For i = 1 To n
2 U4 s: k$ a: E1 ~t = 05 {. Y* Y" E1 ?9 b! F
For j = 1 To n
( B6 K1 n" j$ ~0 s( T' j1 I. n3 jt = t + a2(i, j) * x(j)
: l& [9 e0 W5 [! I" j+ SNext j5 I) C/ S  e( ?
t = t - a2(i, n + 1)
$ k# z3 ?3 q  KPrint Spc(5); "第" & i & "行:"; t% Q/ I7 G2 k1 b! t- e  @
Print
* x. F$ h9 u# g, Y" x2 f3 Z# W: h3 zNext i4 {6 Y9 y5 Q* i( @. Q

4 y  v4 M5 m0 F6 zEnd SubPrivate Sub gauss_Click() '高斯消去法
4 A# J( G) G! b( \+ b( xDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
4 ^; U9 u6 e* @0 ~  Ai = 1: j = 1
" ^& i3 X5 e# V5 H) i/ Kn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
7 b) a$ v! U1 p( fReDim Preserve a(1 To n, 1 To n + 1)8 ^+ n3 ]  n; o) c
ReDim Preserve l(1 To n, 1 To n + 1)5 T) e' ^' B0 w& e4 ~3 j
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single% f: q  `' c# Y  `% q) V# ^% w
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(), N+ ]. C6 }- F1 d( ]
For i = 1 To n0 E/ d7 m( V+ ?. _
For j = 1 To n
  i, P8 a  c5 s! P  ]a2(i, j) = a(i, j)
; u+ y" X: ^: C% Z& _9 E. `Next8 _  e+ w! A  O/ L4 B
Next '将a()的值全部赋给a2(); A7 B4 N" y7 V2 Q# t' f
m = 07 \  q& t! H3 R0 N3 A+ ^
D = 1
0 {$ q2 b8 A7 k' k6 F/ `ReDim x(1 To n)
/ L& Q" h+ R. c) \& {- GPrint "--------------------------------"; t/ ?6 k; E* v. c
Print "您输入的增广矩阵如下:"
8 Z( R' t: ]  G/ f, P7 JFor i = 1 To n" z) U) o! T7 a$ i, A
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))/ m6 y0 t) a( ?4 C: }
For j = 1 To n" g; W, w  D% Z8 H
a(i, j) = Val(Left(s, InStr(s, " ")))
, ^! U# o1 g5 n. Q- T6 f* T- C) _s = Trim(Right(s, (Len(s) - InStr(s, " "))))
9 I- l% T1 A9 m: j0 o2 D" o% |Print a(i, j);) o2 J2 V8 i8 l! O# w2 a: P& I
Next. {& d+ }1 @, K: ~$ `
a(i, n + 1) = Val(s)9 e2 C( ^' V) y7 [- F( T/ K- Y
Print a(i, n + 1);
# X0 }! t) S8 JPrint
3 u# s0 g; D& H) g1 BNext
; t: u( j7 r2 G
2 y1 I4 M# ?: e+ W3 bFor k = 1 To n - 1 '开始消元
; l, W9 \1 Q4 {: b' yIf a(k, k) = 0 Then& o/ ?2 Q7 ?% c4 W/ u# ]
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
6 d/ r$ f3 h3 M0 O4 Z" f% ]Exit Sub
9 m$ G1 q$ w/ S  n6 l- fElse
* w& r8 S" V$ t" ]% g$ fFor i = k + 1 To n; Z1 C- h$ y# F3 \
l(i, k) = a(i, k) / a(k, k)
# A2 S% h' }5 M+ hFor j = k + 1 To n + 1
5 u4 i# B2 i0 p) ]6 [& Ua(i, j) = a(i, j) - l(i, k) * a(k, j)
6 o# z+ ^' v) r) ONext
; H0 O6 ], K: t, w0 q4 HNext
+ k3 E' I) ~, OD = D * a(k, k)
5 i" }/ ]1 u* uEnd If
0 m( q) x' P7 }* n$ sNext k '消元结束+ C7 n0 L# R  z# e( f: V; g; R& A
If a(n, n) = 0 Then5 u" f; s% {1 a4 l) z1 A
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!": o4 j0 H. P, X. O
Exit Sub
' u0 {( _8 |  O7 j( F  ~1 F8 kElse
6 C3 P$ t5 \% ]# rD = D * a(n, n)
. c  t( d3 E! BEnd If# X  m9 W7 {1 g% k1 t) e
Print "--------------------------------"
) q; z: f8 e* B1 [# C" fPrint "系数行列式的值是:"; D8 \  r# S' v& R1 U5 D
x(n) = a(n, n + 1) / a(n, n); r( t9 @' x# X. v
For k = n - 1 To 1 Step -1 '开始回代
) i: r+ G& Q. w. G6 }9 rFor j = k + 1 To n
; n6 }* t$ H/ O! `: [# n6 Zm = m + a(k, j) * x(j)
( u! c! ]. J4 T) L1 j: }7 ~7 r5 c. WNext j
1 T$ b% P. q1 X& ]/ c# M/ ?x(k) = (a(k, n + 1) - m) / a(k, k)# L" H. t5 c5 m0 s
m = 0
* A! ~7 x8 C2 T% fNext k '结束回代# Z2 u( V% J4 h
9 ?, K$ Q" a) g$ b! O
Print "--------------------------------"0 M* |* x- N) d  X( ^* }/ A: l6 L
Print "方程组的解如下:"
0 s( d7 `" ~. N7 ?& S( v
/ i+ {8 |4 j1 ]& Y4 o! d' m  pFor k = 1 To n
5 r# \' ~$ {  i6 k% w9 MPrint0 X( t* C, L1 e2 b* y
Print "X(" & k & ") = " & x(k)# O2 Z8 P, x; m7 A; {
Next k
2 k" j9 W8 p( Y) S: o8 NPrint "--------------------------------"7 T% `0 v7 ]' q# k  Y
Print "其中各行Ax-b="
! y+ L1 P, M  T  M; }2 I" n7 vPrint
/ g. R! j( B/ P5 K0 M3 G* A( I$ JFor i = 1 To n5 t  ^' c# _; p% u( P
t = 0# Q) }' E8 _% e1 \
For j = 1 To n
/ w. W) X( f7 z9 ?0 m" m+ yt = t + a2(i, j) * x(j)
4 k; s; G; P0 y# NNext j
7 o& u8 M! F1 h4 E/ Gt = t - a2(i, n + 1)
& @7 K$ {4 N/ o4 \Print Spc(5); "第" & i & "行:"; t
; ~. G  D% a3 c$ Y2 W3 n, V2 GPrint
" _7 h# Z0 M! d7 ~, PNext i
* s) L) x& @: `! ~  q: g
5 T4 {7 K( w* s" U8 ^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 02:33 , Processed in 0.692567 second(s), 67 queries .

    回顶部