QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法$ {& i% \- e) C8 E  P: Q. J( Z
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single1 [3 l$ F  m# L! |
i = 1: j = 1
' Y, K# Q  w! E5 ~2 En = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
6 ]# Z+ L. J& f" I- z0 {7 ^/ R0 K( |ReDim Preserve a(1 To n, 1 To n + 1)" E# ?& D/ F0 z/ w+ E
ReDim Preserve l(1 To n, 1 To n + 1)3 O2 b0 y2 c$ v5 I) s
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
0 S3 @" \9 `7 }8 _ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
3 q# _  u" w. n7 z& h8 g: nFor i = 1 To n
  G+ J6 _2 [$ ?9 U2 H* }For j = 1 To n4 V& e- R! G  z7 W5 B
a2(i, j) = a(i, j)
$ G* U( @/ |, n) jNext
5 T  H' Z) _7 w- K: s& J$ \/ f9 L/ e( QNext '将a()的值全部赋给a2()
1 l& f/ w" e. t, t; Em = 0( {$ e: w* O( v" B! W" Q
D = 1
+ @0 }, F1 U: w$ K( J* I( B4 mReDim x(1 To n)' L. E  p2 u, u3 u1 L
Print "--------------------------------"$ c- r2 K6 o- K6 x$ {0 L! d
Print "您输入的增广矩阵如下:"
8 Z4 w- l  K. \; U/ EFor i = 1 To n% w; R5 l+ A; R" j
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))* [# H$ j3 w/ d8 t. v% r
For j = 1 To n
- F2 ^" X9 o8 ha(i, j) = Val(Left(s, InStr(s, " ")))
9 _( V0 D0 x0 b2 fs = Trim(Right(s, (Len(s) - InStr(s, " "))))* N- E4 b+ z# }' X+ G, e
Print a(i, j);8 U" G) ?9 ~, W0 D0 T
Next: _! [% M. d1 @1 _
a(i, n + 1) = Val(s)9 e$ H# d" V2 r: \3 |* S  Y
Print a(i, n + 1);, A5 O4 n% F2 N! ]' q
Print
) l4 n2 B+ k, g. `, A6 q0 fNext
/ I6 s' f! r; a. z, c4 ~$ b4 S0 c& J/ d3 G+ G2 D) `
For k = 1 To n - 1 '开始消元3 B! R0 {1 l+ h' F1 R
If a(k, k) = 0 Then% W. v0 {# p9 Y0 e& A: U; I; K
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
1 S* s  d, V0 FExit Sub
" |! y4 I2 G8 c* X5 t& ^$ l6 g% UElse) i# C5 S- k7 [6 o- u4 M( A) P& Z
For i = k + 1 To n* T- N8 l( Y$ a3 Y( V1 u6 ~: _
l(i, k) = a(i, k) / a(k, k)% _" w1 a+ A6 m: R; l$ w, i0 \% I! N
For j = k + 1 To n + 1
  ~4 L" s& j2 \, K0 C, e' O$ la(i, j) = a(i, j) - l(i, k) * a(k, j); X5 m; T% U! O( j( G, u
Next5 g  z+ T$ T  I. D1 H- N
Next
/ c. m/ l0 ~1 gD = D * a(k, k)
8 k# R+ ^  M" t3 N, \& s! x3 IEnd If% }# v8 n' T2 g- R% X  P( [' b
Next k '消元结束5 P4 [- p$ g! T
If a(n, n) = 0 Then4 K4 m& y' U  G: d- f% L2 D0 M
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"& |3 U/ a: C3 p6 e7 b, O, z
Exit Sub* w5 f. T& M' J" y
Else
& _9 M- f1 g$ r' VD = D * a(n, n)
) S2 n5 c. e& P. B; KEnd If
  {! n! s1 _" W: iPrint "--------------------------------"
# e( N. Y* C" C" TPrint "系数行列式的值是:"; D) p8 `: C* y: p( Z) e
x(n) = a(n, n + 1) / a(n, n)$ O& N* ]! k0 \) r7 h2 K; H5 q3 z
For k = n - 1 To 1 Step -1 '开始回代! h( }; K- a, J5 ?, h
For j = k + 1 To n
% S. j3 ^: P* Y4 I& km = m + a(k, j) * x(j)9 v  f7 t, T9 d4 Q$ R6 F
Next j( c% D2 i) v1 ?# }% n
x(k) = (a(k, n + 1) - m) / a(k, k)* \; x# _/ p+ S
m = 0
2 Y* E+ H* |# t( gNext k '结束回代
9 c2 C3 h; g4 U
& `- I. M! S/ j7 `* dPrint "--------------------------------"
4 m# B$ q8 b- e! `/ bPrint "方程组的解如下:": `6 a7 C. b0 b8 P4 j

( j+ u4 g# U4 ?& W2 L$ SFor k = 1 To n- G, H9 q" r# r) z7 W) _
Print. j8 B9 |# u, U# A# d4 S: ]9 n
Print "X(" & k & ") = " & x(k)
' L  q; D/ a1 @" `Next k) @8 |8 `" }- V% A
Print "--------------------------------"
: _+ q! w' A3 v* y$ V7 W# _/ c( RPrint "其中各行Ax-b="
) H  S# I7 y/ x. tPrint
) k5 e, Z; \+ b; J/ F4 R' bFor i = 1 To n/ w8 y* U# w7 D0 w- ?1 R/ W5 o
t = 0! Y5 X+ o3 W2 L; M
For j = 1 To n  [3 i+ e; x/ I, R
t = t + a2(i, j) * x(j)
) N: B. J+ |# D* p% i; q0 D" QNext j
. Q1 J7 @8 p2 ~! H8 t3 rt = t - a2(i, n + 1)5 W' W- s0 F- y0 ~& k
Print Spc(5); "第" & i & "行:"; t! |6 |( ~6 S  a: f+ A4 ^- R  I
Print
" u9 Y, H% p! ~, ?, Z, Z! aNext i0 o4 K) f! U4 {% b  @0 z2 ^, I7 Z
* f0 o3 Y8 r1 L" D- b
End SubPrivate Sub gauss_Click() '高斯消去法6 t: J1 a: K$ H2 p+ m& ^
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single  A4 Q4 w$ o5 ^+ Z5 s
i = 1: j = 1* G! l) Q- ~1 c' ]) T
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
5 I; K" x/ Z5 U5 y  eReDim Preserve a(1 To n, 1 To n + 1)
) n: E1 \( Z; [! E( jReDim Preserve l(1 To n, 1 To n + 1)2 b2 I3 k' F: h3 r4 U. ^2 f1 g1 O' y
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
& B+ s0 V: K6 NReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
$ v+ v9 z. w7 kFor i = 1 To n
. `0 O* `) V6 d4 QFor j = 1 To n
8 m- v' B$ L" i' q, xa2(i, j) = a(i, j)( B! h+ Y) r9 Z7 @4 d9 U' k" `- C
Next# F  K+ r8 ^: B/ d* s+ B" r
Next '将a()的值全部赋给a2()
( g$ [( z4 d3 Y; H/ lm = 0+ b6 t( p2 j  v8 O; A4 L; L. \
D = 1
0 l# W1 A! H2 X8 U1 A# TReDim x(1 To n)
7 w" x, o( S3 J$ D& KPrint "--------------------------------"/ a. c  A$ g/ v
Print "您输入的增广矩阵如下:"
' E9 Q4 u8 t$ {" QFor i = 1 To n! O0 g2 q! [% n, f4 m9 x; e
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
) a5 f5 n  y% T5 D$ W4 xFor j = 1 To n
! n3 r& [" t& ?1 _5 M: |a(i, j) = Val(Left(s, InStr(s, " ")))
- W4 G3 S7 j8 o% j. `s = Trim(Right(s, (Len(s) - InStr(s, " "))))4 |  s- A: r, n; h" E' {
Print a(i, j);) W4 \. |" ^. A2 \4 ^
Next
  k  p! i2 D6 Wa(i, n + 1) = Val(s)" c& k1 W8 f% u/ D
Print a(i, n + 1);/ u4 U- ?/ E) @6 k$ y: [
Print5 C! H& e% H& F
Next
/ R& [9 g7 L& u4 O
$ w9 t5 ], J6 U9 V: F# j, J9 iFor k = 1 To n - 1 '开始消元
7 p+ y2 q; i3 X: |' j! M2 WIf a(k, k) = 0 Then
8 p8 E$ S  [5 m  O8 ?* C( a, DMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
# b. j, p2 e/ x3 qExit Sub" f" R! A; z9 n: u+ \- D  G
Else
' i& q( b+ u( Y- H: a/ p% ?9 GFor i = k + 1 To n
  i' E. j, T3 D6 nl(i, k) = a(i, k) / a(k, k), ]% m6 `, J; s9 C/ s" n
For j = k + 1 To n + 1
" s. j) k" Y( m& N$ d! u% h+ da(i, j) = a(i, j) - l(i, k) * a(k, j)
+ |9 [( d& T& m$ [  U& e9 [Next$ @  Z+ y5 y+ Q: b
Next, v1 z5 U" Y; x' g! S
D = D * a(k, k)
  @0 Q0 Y/ I* w$ O8 w6 SEnd If
9 H! Q2 Q/ L  k! `1 W: YNext k '消元结束
! F& E$ K( V) vIf a(n, n) = 0 Then
" C  ^# q  t% F" Q, d" X! b1 p5 tMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"- r4 s: N% w. d/ Z
Exit Sub3 |' |) W; S/ R. P9 G
Else
2 \* ^& G1 i+ L' ^9 c2 D- d0 \D = D * a(n, n)+ t. w7 t: F$ J4 l( j* {4 z
End If% Q) ?. s0 b  `- _
Print "--------------------------------"/ ]7 a3 ^1 ^9 n7 ~2 X
Print "系数行列式的值是:"; D
9 Q. v6 g0 `! d& X, Y4 s8 S& ~x(n) = a(n, n + 1) / a(n, n)' x7 c/ D2 L5 ~! ^# t
For k = n - 1 To 1 Step -1 '开始回代
  x2 Z" `: h: y* }7 N/ yFor j = k + 1 To n
1 r& o) T/ }4 Q0 |) Im = m + a(k, j) * x(j)6 H8 i, J) `) g
Next j' G% P0 k% Z1 q4 [2 M/ u
x(k) = (a(k, n + 1) - m) / a(k, k)$ j0 n' T4 s  P( @; M5 i
m = 0
9 G3 b- f' @1 r4 w! BNext k '结束回代
: M: a3 I2 z2 z9 ]- o$ f
) Z% `/ D, M% ^% j% [" a+ c& }5 i, rPrint "--------------------------------"9 z# u+ X4 z+ K# D! J* K! i
Print "方程组的解如下:"
" C) N; v" h  d, V' E" z8 i. H
/ d6 ^# \/ _; m1 X8 P5 aFor k = 1 To n
" A7 v$ w1 [: mPrint& s. ?+ ^1 B& n6 O* d
Print "X(" & k & ") = " & x(k)% O6 s" `1 k. E% j! I
Next k; c# v+ Z1 l: ?0 N4 h# Z8 p; O
Print "--------------------------------"4 U% g: m( r! E
Print "其中各行Ax-b="  G+ ^! N6 O% x- L
Print
7 b; \3 H9 j, W4 b3 H) dFor i = 1 To n8 {8 d4 Y1 t& o1 a1 R
t = 0' F* [4 E7 ]% U  K7 Y# G
For j = 1 To n
- w9 t, L* {) p$ m5 k0 j* Ft = t + a2(i, j) * x(j)
4 \9 |: `6 J# gNext j- Y4 y% R$ t1 ~; h6 U
t = t - a2(i, n + 1)- Q& b; }3 \" A3 P. T# l3 ]
Print Spc(5); "第" & i & "行:"; t& M" ?& F9 b8 K( _- C
Print0 q! I3 T% H- G, Y* H3 |
Next i
" S; `7 @. A( R. ]$ Q0 l, s1 }. p  N0 D/ G3 p* _6 {6 i. A8 J
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-9-19 18:06 , Processed in 0.415776 second(s), 68 queries .

    回顶部