QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
9 z$ u3 r% z5 Z- [  `Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
6 d( Z# A; `/ P9 l& Oi = 1: j = 1
3 d- u5 K1 L- ?/ @  J& [, kn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# ]4 e, j5 ^9 ]- i5 J& s0 j
ReDim Preserve a(1 To n, 1 To n + 1)0 l; s3 G" ~' U. o& n6 r7 L
ReDim Preserve l(1 To n, 1 To n + 1)
  h# R. K4 G; K' A" gDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single3 j) Z2 C  j$ Z
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
' _& G& _" {# X  |! `' `For i = 1 To n
7 _& ^- B# W# l7 x2 o( j  \2 {For j = 1 To n
2 ~6 d& ?' B. \a2(i, j) = a(i, j)
, s+ |; d( i' HNext
2 S: D) D, I5 P* lNext '将a()的值全部赋给a2(), ?; P: n; E! R1 @' G
m = 00 h: o4 x( _4 g; R
D = 1' w. E/ J* C2 Z# U0 }- j  b
ReDim x(1 To n)) S/ \' P& T4 G: C
Print "--------------------------------"4 I" \5 g, H$ W( J# z" i! j
Print "您输入的增广矩阵如下:"  U7 k8 S: x) y+ R* U/ u+ y
For i = 1 To n
' r# i  ^8 f0 {) C: k. F; D- c$ Cs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
1 y2 W7 E- S" r3 {! g& eFor j = 1 To n3 Q6 I# }2 S1 j( _
a(i, j) = Val(Left(s, InStr(s, " ")))
* O- X9 E$ K7 ~4 U* f, Ys = Trim(Right(s, (Len(s) - InStr(s, " "))))5 Z7 D, @" V3 }! F
Print a(i, j);
4 X+ ]+ u9 s- X& z- DNext' S6 s1 W, x0 ^: x. n& L& Y9 x
a(i, n + 1) = Val(s)
5 ^6 K2 f6 u' j8 n  ]Print a(i, n + 1);
. d0 Z' _8 w+ w( z4 N4 w/ ^Print+ c, b) T7 B  ~; A* t' d) |
Next
! X- N1 d* o- C2 u9 s0 F& q( V: N8 j3 b( Y, a( g
For k = 1 To n - 1 '开始消元* C# L" y; F# ]( s
If a(k, k) = 0 Then% h7 r8 V7 h7 `, K2 E5 U' M" ~
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!": ]: u# S' X6 Q; \# \2 e. k5 ~% F
Exit Sub
, P" B  a; G4 p, Q7 m6 S7 N7 bElse& N6 C: K1 D+ I/ E+ D
For i = k + 1 To n
; K+ u6 c5 `8 v! `l(i, k) = a(i, k) / a(k, k); F+ S8 H# U5 A. h
For j = k + 1 To n + 1
. q: D* e  ]/ ]8 @a(i, j) = a(i, j) - l(i, k) * a(k, j)8 L3 N8 n6 K! v
Next2 @/ m  T: ~. O0 a4 B& t* q6 N% S- G
Next
1 c- i+ y& m( S5 i0 n- wD = D * a(k, k)
6 K' o! F$ \' L; s9 q% N) a. H- `. [End If! e$ U; \; s& {( k( w% ~
Next k '消元结束& W! L- v# e4 d2 M
If a(n, n) = 0 Then9 u, k4 ]2 B3 j* G% |
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
0 U- i9 J, E* g; `Exit Sub
2 T3 U" `$ J+ Q  J5 j1 _  o2 uElse' {# z% P& L5 }* ?0 l
D = D * a(n, n)
1 T5 W+ {/ q1 S4 V* KEnd If
1 M6 u: m" `+ O& t( kPrint "--------------------------------"- X. f, n5 f/ P9 |1 Y( }9 X% V
Print "系数行列式的值是:"; D
, h2 {" B5 o' m9 {/ f) sx(n) = a(n, n + 1) / a(n, n)
  z/ I$ k# ?, {2 }6 zFor k = n - 1 To 1 Step -1 '开始回代
& u$ A6 R* s8 S, W$ k" u' }6 d8 tFor j = k + 1 To n
( C" ~" J' b0 w# n! _6 vm = m + a(k, j) * x(j)# P+ b" O5 I, E' ], j: S6 X# E# l
Next j1 m" e9 E) E: ]8 d7 i) S
x(k) = (a(k, n + 1) - m) / a(k, k); [+ n1 Y4 {5 R# _
m = 0
0 k3 a5 T, y% S' P8 SNext k '结束回代0 y: B( e/ q) x6 X; X1 J
! {/ ]# F* P+ j6 S1 |. n
Print "--------------------------------"- C/ Z5 f. I* ]( L; t  f
Print "方程组的解如下:"
' r: o9 S$ c1 `) ^. t" K8 w( O9 J% D" t) s6 p8 Q1 O) {! z
For k = 1 To n4 j/ J' S* `9 o+ w* J; y8 {
Print
! ]1 |& e" B7 c/ D* kPrint "X(" & k & ") = " & x(k)) H+ |* f  _6 b  j4 i5 x
Next k, t7 E8 N  i% ?- N+ f- R! S" J
Print "--------------------------------"4 \0 u- ^# j7 }, c  \9 _. n8 T
Print "其中各行Ax-b="
! P" f- ?+ J! ]9 d* c# aPrint- l2 I$ o9 ]# V  f
For i = 1 To n  L7 ]' ^& v7 W& T4 M! f2 v
t = 0
9 w# b% D+ u! M) @% d$ Z4 nFor j = 1 To n  i  J- e2 a# ]+ j1 ~0 E$ d
t = t + a2(i, j) * x(j)  ]" I0 R* r3 [/ N
Next j4 n1 ^1 X" Y, @8 Y7 V
t = t - a2(i, n + 1)
4 h5 ]8 Y1 l' |( H6 V$ ^+ iPrint Spc(5); "第" & i & "行:"; t
1 O' R- D* Z: |" NPrint
7 j5 }7 ~, u8 j4 T9 a7 Y. CNext i
3 o4 v" n6 M, Z) }( K  {* ?5 ^: n1 }
End SubPrivate Sub gauss_Click() '高斯消去法9 g4 e, w3 i; [3 Z( C
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
) R) D. @; V3 }6 j: g$ P% ji = 1: j = 18 b. N) h* r4 v
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
, q1 Q; x9 Y& t9 o$ j# AReDim Preserve a(1 To n, 1 To n + 1)5 U$ N4 V3 \; i. o& d
ReDim Preserve l(1 To n, 1 To n + 1)
- {* \" _* t3 I9 J" W7 F3 xDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
0 M$ [6 Q$ ^  j0 ]6 M! _" o6 TReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()% _4 y& q, `2 ~
For i = 1 To n- x0 r* [! ~; Y9 b1 h4 G( [
For j = 1 To n/ q2 O- f' P3 h% ~
a2(i, j) = a(i, j)9 }, T" K& }* T5 v! V0 m9 ~/ I7 \
Next
6 ~6 z, g. U8 j. M  r5 O, LNext '将a()的值全部赋给a2()
# O: Y1 K$ t- ]% X$ b+ ^! Im = 0$ m% s2 ]4 Y+ l
D = 1& X" C/ c) X3 D( f& j4 N
ReDim x(1 To n)
7 W7 U" K" ]9 G- lPrint "--------------------------------"  a- D4 b# L* J# e( d
Print "您输入的增广矩阵如下:"
& K0 R) }5 |6 {4 q0 C1 O7 MFor i = 1 To n' R/ z/ G4 M% u1 B7 r
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
! O, L/ p% c% m) @' \) ]$ ~1 vFor j = 1 To n. L4 Q0 s; ]6 Z- B7 H# z3 L) j
a(i, j) = Val(Left(s, InStr(s, " ")))' X" E: _0 w! y9 P4 d; J
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
2 x  |3 I0 P$ NPrint a(i, j);* o0 Y# m; n) O2 w
Next
3 g& Q0 o& z# x4 `a(i, n + 1) = Val(s)/ T- k+ V- R  i+ t
Print a(i, n + 1);
$ b9 P9 t$ t: t7 U9 ^Print8 ^+ y% ], I' B7 s' [8 n7 V: u
Next- a7 Y3 C. G% L) H7 [

# M4 W2 y3 P( xFor k = 1 To n - 1 '开始消元: g! D& p- v9 z
If a(k, k) = 0 Then. U& g3 r$ S+ ?3 x' T1 G
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
! ?+ M  @% }8 B" y+ E  JExit Sub
; R) r4 t6 V" L, ^6 GElse- f2 c% e. a, n" V6 H0 u1 I
For i = k + 1 To n3 _* u+ Q, Y2 W8 z2 N  t8 }' q
l(i, k) = a(i, k) / a(k, k)' v$ O/ V1 S8 e  _) x" i5 K, h  q
For j = k + 1 To n + 1  L1 O) l8 ]- F5 K! f5 i7 `
a(i, j) = a(i, j) - l(i, k) * a(k, j)! _3 K( R' }! _
Next( w& w( {" o: O3 B
Next
- \) k) Q- W. e2 U& O: vD = D * a(k, k)
4 `8 f- ^' k1 A( ?8 dEnd If
. |" B( ^: c1 ~1 e, g1 WNext k '消元结束
; }  v4 n- c- m% ~; d4 ?4 WIf a(n, n) = 0 Then
9 v8 V8 C" F. [/ K# i; NMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
' s4 d2 f5 N1 G3 n" q% |; zExit Sub
7 f: z. A0 q6 N1 m8 }Else
2 [. a/ x- {8 \& GD = D * a(n, n): y# f% \; N. w
End If
& k8 j8 D  n8 t& \: w( r% h! F* SPrint "--------------------------------"
5 j! V' G5 W2 {2 s" nPrint "系数行列式的值是:"; D" E5 y6 _$ o8 l( y! {0 C
x(n) = a(n, n + 1) / a(n, n): K$ S& [* a' P' Z
For k = n - 1 To 1 Step -1 '开始回代  V5 r& v) t1 ]3 d! `  U  U* \5 H, E
For j = k + 1 To n: [7 h! z( h# |
m = m + a(k, j) * x(j)
8 T" ?4 x& }# }0 pNext j
! ~) _, V* r4 }1 wx(k) = (a(k, n + 1) - m) / a(k, k)
) z  `2 M$ L' Q% j8 i$ @1 Cm = 0: h7 |' L1 i7 n& n( |
Next k '结束回代
7 y$ p) r7 N" ]$ h" ]2 f7 F5 r0 u" `9 P# }) b$ X+ n
Print "--------------------------------"
: `2 v6 r9 b, C! R/ G1 YPrint "方程组的解如下:"& l; z2 t; p5 ~( `
' ]& {; d) j" x' K8 R2 K% F
For k = 1 To n  n3 }9 t" [% |4 T7 w
Print: G' g# w( F& }( s- `4 f
Print "X(" & k & ") = " & x(k)
( l4 g. X9 s0 R, zNext k- t: C) t9 w  F  y
Print "--------------------------------"+ c" d7 {4 s5 X, T9 w
Print "其中各行Ax-b=": R5 M0 r  D8 @3 e8 k
Print
7 F  A9 U$ z+ m9 x" l3 n3 sFor i = 1 To n, i2 N8 I% H, G
t = 0
$ E7 o+ {: V3 D0 uFor j = 1 To n
4 n( O5 H- L' ?t = t + a2(i, j) * x(j)
' Z4 c* q% g* n9 b* R& gNext j
9 T" F+ t+ b& Y; E# }9 `t = t - a2(i, n + 1)
: \2 X0 v" C/ a5 O  d# J$ H" `Print Spc(5); "第" & i & "行:"; t. ~. A1 e+ W" W, K- [
Print
/ A- b3 o% [  J  ?  dNext i
# I8 p- B6 N- g& n$ M. c8 F6 L' o: K9 t! \1 e* \
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>
回复

使用道具 举报

4#
无效楼层,该帖已经被删除
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-9-25 09:34 , Processed in 0.522353 second(s), 73 queries .

    回顶部