QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法0 A9 J+ [/ E+ G+ L# G" z6 X
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
* y4 X* Z- M0 i" Ni = 1: j = 18 ]1 Q6 M5 a' q! u. q& r
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))4 Y2 \* _) V% F5 i" [7 w
ReDim Preserve a(1 To n, 1 To n + 1)
. x+ y# L: o) z5 C: rReDim Preserve l(1 To n, 1 To n + 1)# v2 T0 B8 v' y4 x6 K; _
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single* p+ i, D1 J% n: R
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()% a2 u8 o( s/ e. W
For i = 1 To n, A; K& f' p+ m' w
For j = 1 To n
% y/ ^3 P- G! j7 Z" k4 P9 Ua2(i, j) = a(i, j)$ I; I' T" t. i  u3 S$ _
Next$ d" f+ ^. R9 z3 S4 x
Next '将a()的值全部赋给a2()5 x) E5 ]& z1 W. ]  S, Y
m = 0
/ j. \* E  J# U% i2 KD = 1
3 [; C! }0 m9 cReDim x(1 To n)
2 y& C" o7 o; v3 c, r" }Print "--------------------------------"
% E! e) P+ f! j' {7 d6 nPrint "您输入的增广矩阵如下:"
9 {9 p% ^; ]  I  b, z7 w. AFor i = 1 To n
) _& Y. l4 \( p" xs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
* t$ c# k7 Q! [4 Q. BFor j = 1 To n7 ~+ Q  x. Y. Y" h9 `: F
a(i, j) = Val(Left(s, InStr(s, " ")))
% U3 d& i/ B' l9 ns = Trim(Right(s, (Len(s) - InStr(s, " "))))% U; V$ v7 |9 ]
Print a(i, j);6 x3 w, ]2 Z" F
Next
6 x% e0 H# z# ?$ k# ja(i, n + 1) = Val(s)
# t, |9 e' b- Q/ I$ FPrint a(i, n + 1);, i# X/ J4 Q" f% |5 x! u" \; z
Print
# @2 @# S' T; M' T6 o9 o# yNext
+ I6 Y6 @4 a' h( E  [6 C3 U8 A6 x0 I8 U- B$ g; A
For k = 1 To n - 1 '开始消元
' s0 E3 m, ~# M) \* }If a(k, k) = 0 Then& L- d0 }& M7 v  x7 A% a
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"1 j) z/ T5 X1 a! K
Exit Sub, f5 _$ z3 h6 V8 r- Z3 a% E6 X
Else
2 q% I# q( h, c4 M+ s. ~; B! EFor i = k + 1 To n
& T7 I8 |. j5 b% Hl(i, k) = a(i, k) / a(k, k)
4 c( X7 g+ A7 {% r, SFor j = k + 1 To n + 1  d0 A" a5 o/ {: X
a(i, j) = a(i, j) - l(i, k) * a(k, j)
6 r; Z; [$ f0 E* N4 ~. VNext
2 W2 ^+ z/ E( F- [Next7 L+ C) Q( p4 O. N( I5 a
D = D * a(k, k)1 J% a% U% h9 X& D; X$ ?' M
End If9 Y9 b8 v1 L0 [2 N! J) @3 U
Next k '消元结束
& t3 q) P7 ?4 e+ _0 c6 g  gIf a(n, n) = 0 Then4 \# v: P- c' n" G: |3 v
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
# T8 O9 U$ \$ Z* S+ c7 s; pExit Sub4 H' Y, ~: S+ @
Else+ S. v+ i" W5 n! F0 x6 L/ D, s
D = D * a(n, n)+ d- _' i* J6 ?( p' o! P* Z: T  T
End If8 \) w: _+ J3 v. N- `! l1 |& |
Print "--------------------------------"
" G1 e/ |3 a/ L0 k& o3 EPrint "系数行列式的值是:"; D
) a! u9 e) @' @4 f9 ]0 x" G6 M0 ]x(n) = a(n, n + 1) / a(n, n)
% X4 M( g, r7 K8 q7 k7 i5 N9 kFor k = n - 1 To 1 Step -1 '开始回代1 k0 ^+ r& v, d" W
For j = k + 1 To n
4 s( U3 H, }! D  Gm = m + a(k, j) * x(j)
! N2 B6 \" K' l* r) v5 sNext j
& K% S- Z& c7 mx(k) = (a(k, n + 1) - m) / a(k, k). q7 c9 [9 N' x$ s. J: j+ d/ P$ ^
m = 0
4 j. j: w. _0 D1 \6 |+ @Next k '结束回代
# V; k' Z; @6 A" b  _2 F' L: d
1 ?% k/ t& O) k2 Z. tPrint "--------------------------------"
" |. L$ ?% y4 F" T2 X8 k3 _Print "方程组的解如下:"6 c& C1 q0 g: q. k. I* J; U9 ?9 d
- ?# I3 D% n4 ?/ a: W3 O9 P
For k = 1 To n7 A9 Z* M7 P3 T- P
Print
& i  F. N- O1 @; L$ XPrint "X(" & k & ") = " & x(k)6 l$ J; r- Z7 p% J/ m- m
Next k
. }9 Z- y% y2 Q; L7 e" A; U* iPrint "--------------------------------"
/ ?; {1 B" X, }; ]Print "其中各行Ax-b="
+ Z0 S+ s. g, i  ?. V2 d3 l* ?4 d; lPrint
- a% W6 P- v/ L9 C. wFor i = 1 To n, w2 u5 q( I/ N  g. Y# ~
t = 0
. T6 k$ W! @# G: MFor j = 1 To n
9 ]* y2 e: D/ G2 E* at = t + a2(i, j) * x(j)
3 a, Z$ w) q1 E" A6 n. SNext j
6 s% h7 r% T" q2 L9 p5 `( ~2 t  Ct = t - a2(i, n + 1)
, k* P) ?/ _9 i* E- q, z; F( A& TPrint Spc(5); "第" & i & "行:"; t/ r; H" u: b! E6 C: V- C" ?
Print' S* _0 g; U% j9 ?* U8 R  V$ p
Next i1 K' ~5 J$ b: O: ?" L6 K

3 i6 b& i5 t6 F  AEnd SubPrivate Sub gauss_Click() '高斯消去法
0 ]; ?% p  n! @+ L8 ]Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single' Q# j- K) g6 j1 i, h
i = 1: j = 1+ Q' V8 J4 H2 G4 ~8 y/ Y
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))2 c" h7 ?) e$ W5 g% v7 E0 A  b  D
ReDim Preserve a(1 To n, 1 To n + 1)
5 D; c& I( O: {4 j! CReDim Preserve l(1 To n, 1 To n + 1)5 X) Q" G) \( f# D
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single! U0 w& P) o- K% n
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()0 X% @; I$ b* E  J8 l* ^9 u$ A
For i = 1 To n' F- E4 q: F: P/ }
For j = 1 To n/ q( h  f  I7 J* i! O6 W, ~
a2(i, j) = a(i, j)& X) J) E3 }( r! }0 y4 i- s% A
Next
" F) {$ F2 ^4 L  HNext '将a()的值全部赋给a2()
" U2 `# q, ?) A; r9 Y  V  Hm = 02 X* G. h+ n5 A. u2 b" n, X
D = 1! Q+ j. |" W- j$ ^& b! Z
ReDim x(1 To n)% g2 f# P5 g. D9 M' g# K3 F+ Y( y% W
Print "--------------------------------"- H7 v; z7 v- }5 x4 L
Print "您输入的增广矩阵如下:") R# U, T6 z$ [' Q9 f2 e
For i = 1 To n5 i* q6 i0 v( P; X
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
8 I- {/ t* S3 `! ^/ b9 DFor j = 1 To n* i4 z9 P+ S5 k, ^. i* f( E
a(i, j) = Val(Left(s, InStr(s, " "))): Q. `8 y8 v% _7 r, E+ x: x
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
& x3 O* q" X' I. {6 W  O5 dPrint a(i, j);
. E# e" Z% d: k2 T5 rNext3 n. v1 l1 W- b, G
a(i, n + 1) = Val(s); E6 f+ \) t8 I* t7 e: O  F
Print a(i, n + 1);
6 i  Y" R! ^0 ?) g4 {/ ZPrint
/ d: _6 ?$ q0 M7 A$ H% h5 `Next
8 [0 H- B: X; I5 x/ ^  w
3 \4 z& }& K. R# _- c) VFor k = 1 To n - 1 '开始消元
$ W0 H6 f4 l9 ]If a(k, k) = 0 Then# E4 @9 d5 V* L5 T2 r
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
/ E. m0 Q7 D; r$ l$ y8 Q6 zExit Sub
" e: S9 S  [9 |- h% H. zElse* `" @1 u: j4 H
For i = k + 1 To n, [! L& d( j% E/ s
l(i, k) = a(i, k) / a(k, k)- c' k$ X  b1 F" B% Z( H) q: g( ^
For j = k + 1 To n + 1
' s* b2 q- H6 r: Ia(i, j) = a(i, j) - l(i, k) * a(k, j)# f3 i* k. Z% K- U$ j. r
Next
3 P: ~4 |( ~$ u2 k) [Next
% I; ~* }* ?/ @1 }6 f! ?- X4 {1 Z! P6 jD = D * a(k, k)
. `" T: \. o9 S% c/ @9 u0 NEnd If& O3 o. R+ O- ]
Next k '消元结束; P. e8 P& y" _' Y
If a(n, n) = 0 Then# q+ A6 v& g6 u- V! k! Z
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"4 r! r; w; b+ v. S6 \6 `1 r
Exit Sub
! r% N& q$ U3 l& aElse8 F" t' F3 P  y( O; D5 l
D = D * a(n, n)
  Z2 R$ C. y/ EEnd If
2 S( x9 z; i* o* SPrint "--------------------------------"1 D; C$ E) u# P1 E2 P% _5 ~% l
Print "系数行列式的值是:"; D# A) i- n6 R: H5 m8 _% X
x(n) = a(n, n + 1) / a(n, n)
8 ^# W& s# |4 f7 Z  _) w* p( b: `For k = n - 1 To 1 Step -1 '开始回代
6 N8 R# q4 Z( F  b+ X6 xFor j = k + 1 To n4 ^7 S6 f; ~8 E, `8 p4 Q
m = m + a(k, j) * x(j)
" z/ G0 E1 W7 X; s  t9 T7 N# SNext j
/ w' K2 \2 h7 g" t5 W; |; o! l+ Qx(k) = (a(k, n + 1) - m) / a(k, k), ?. D# W$ E4 x2 B( A) z
m = 0
( N. P" Z4 _8 _- s! `Next k '结束回代6 n# q& `$ `9 f6 g& o

1 F+ f, L2 _9 \8 j6 OPrint "--------------------------------"2 a+ L3 ]3 F  u$ L
Print "方程组的解如下:"$ ]6 K: x$ |+ z+ Q4 t: S2 c
1 h# d# ?, a3 [. r0 f& t
For k = 1 To n" O4 _! T3 K! D9 W! ]3 T7 \( q3 s
Print3 q  S* d- ]1 w0 v
Print "X(" & k & ") = " & x(k)+ Q  Z2 m  G7 l3 X+ R4 D
Next k4 m3 z% N  r, H4 ~; l* k$ S# U' Z! R
Print "--------------------------------"
" s% U# C$ g9 e" }0 t1 W3 yPrint "其中各行Ax-b="
7 \" }+ N$ Z4 |  cPrint! l0 v- g5 ~, x6 u6 j7 w
For i = 1 To n* c% {4 s4 i; b/ {8 E" o+ a+ a
t = 0
0 H; o0 H* p$ P/ C. e2 F( ZFor j = 1 To n
" Z' r7 G% C8 Ot = t + a2(i, j) * x(j)5 [$ v% c  P; M" a8 _  s
Next j/ X, f0 z; m' m3 [2 ~* C' |3 |' t
t = t - a2(i, n + 1)- D9 q) G% |& B% k
Print Spc(5); "第" & i & "行:"; t" e7 w7 [4 E6 M  _0 J
Print
  G! }' P  [4 t2 P% P3 INext i4 j4 ^: b5 p0 q5 ]7 k2 z
8 W/ D2 p2 E' C1 [+ ?! 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-5-31 00:21 , Processed in 0.428223 second(s), 67 queries .

    回顶部