QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法3 _8 h7 Z8 A9 d
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single* |# _# v5 a# v
i = 1: j = 1# H( [  w/ M$ [" p1 z; y
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
1 U1 D. U3 q; S9 u, }ReDim Preserve a(1 To n, 1 To n + 1)* A, c2 s6 r- m5 b% @( y9 m  l
ReDim Preserve l(1 To n, 1 To n + 1)
9 ^  A- Z  j6 ?4 w) F& k6 e. l* yDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
8 f8 `8 K8 n* cReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()* [! N* T* F( i9 ^" j# c6 D
For i = 1 To n( |3 w6 D; c) o' O0 }1 W# v
For j = 1 To n  O- E2 ]2 X  x& L, g
a2(i, j) = a(i, j)
3 J6 v+ e+ v- ]$ DNext5 Y4 B( ~" ^% h2 [
Next '将a()的值全部赋给a2()* z( w5 ^( W! C; N* C1 h  Z$ b
m = 0, a' @3 S7 f  c* D) Q
D = 1$ @" x" ?& I5 K7 Y; z! k1 o1 B
ReDim x(1 To n)
" y; a7 \. z5 Z$ z* }% c7 CPrint "--------------------------------"
( c5 d9 O0 N7 J, I& d( F0 _Print "您输入的增广矩阵如下:"
. w: [7 |" ]( g* ?: sFor i = 1 To n& q' b- ]* ~, T9 h4 R6 Y: J- y
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))/ C  ~+ [0 Z. H. ~- Y, T
For j = 1 To n8 F6 j4 M3 E+ `& \+ I
a(i, j) = Val(Left(s, InStr(s, " ")))
) h7 X, \2 ~, i) gs = Trim(Right(s, (Len(s) - InStr(s, " ")))). W5 h. g+ T/ I
Print a(i, j);
& v4 h7 f. p5 L1 M6 g3 [Next0 O/ p- o1 H4 ?& ~+ k, Z- K* Z
a(i, n + 1) = Val(s)
" z) q' {1 C) j. h( HPrint a(i, n + 1);
, b- u8 |% a8 s/ l8 B! }Print& M9 L/ L( `3 h* G6 ~( d
Next: D. h. ?& O5 ]9 W2 ~2 i
# @% M* p  _1 i
For k = 1 To n - 1 '开始消元
2 u# f- c. w# Y  L. f* zIf a(k, k) = 0 Then3 Y2 f& t' P- e8 Q
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"& b8 |/ i- l( }5 j
Exit Sub. k7 c( K! b/ {7 b0 v
Else9 q' q3 n4 X9 f  ]  F
For i = k + 1 To n5 `  c% k) k4 x: I
l(i, k) = a(i, k) / a(k, k)
& R/ B4 M/ T# y0 xFor j = k + 1 To n + 1; j8 s+ }0 X' D; m, D8 m
a(i, j) = a(i, j) - l(i, k) * a(k, j)
2 \9 q+ r5 p" _2 r: @3 ENext1 `$ {0 L. _+ x7 b# Q6 Z2 \4 ~
Next
; q9 t% h6 S6 u$ ?( i$ ]' o+ eD = D * a(k, k)) N, l* o9 B+ y" q  l) R' v* b
End If  o& @0 w3 y8 c8 d6 M  l7 e+ {
Next k '消元结束& Y- c8 ~5 H: |
If a(n, n) = 0 Then: ]) I* A( n2 S0 H: z1 o
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"9 V2 v* L+ T* x- F. X: I4 _
Exit Sub$ z7 {, X1 G3 N# V! A
Else# ?' R2 A/ f% s+ q7 S$ J5 J! a2 N8 i2 x) G
D = D * a(n, n)
6 j, }! H9 r! DEnd If0 g7 `" G2 I0 a4 v
Print "--------------------------------"# E  @; g6 N$ }. U7 z# h
Print "系数行列式的值是:"; D
. A* y- N- c0 k$ h6 X; Jx(n) = a(n, n + 1) / a(n, n)
5 _' ]% d: P" T. M2 K  [For k = n - 1 To 1 Step -1 '开始回代
+ _. N, k* L# \4 {8 AFor j = k + 1 To n
: h) I& @  L. y$ M0 ^$ cm = m + a(k, j) * x(j)  g% _( Q. o" S6 L
Next j
! H) r0 a( `% {1 e2 Qx(k) = (a(k, n + 1) - m) / a(k, k)1 [9 A4 e* a1 h2 U
m = 0
9 |$ m# z: {$ I3 |$ N5 {4 hNext k '结束回代2 B* V+ l9 l0 D0 P) G
. W/ F1 V% q- L; p0 k+ e
Print "--------------------------------"
9 M! i2 r6 Y2 K5 ~% q7 M6 F4 YPrint "方程组的解如下:"
* ~, Z& D/ Y0 s3 j7 q  Y2 E. _1 A5 t; j1 P: Y; t5 x
For k = 1 To n$ X7 y' T3 _9 x- T- h/ q: J
Print/ z* E1 t8 @) A8 I1 X' w
Print "X(" & k & ") = " & x(k)' I* L  b: ]6 U; W" Y* K7 ?
Next k5 H; Z1 _4 x0 l! W( n3 B8 ^
Print "--------------------------------"
* \! N+ e0 g# [+ ]) lPrint "其中各行Ax-b=". r% U" B; r$ {$ E2 _
Print4 w3 p; e# P8 I; ^8 ^. m7 M3 r
For i = 1 To n
, c# p- I; B+ {7 a' E- ~t = 0
7 d! o- s# G9 N- {. ?& A% K) Q8 ^8 ~For j = 1 To n! m% s0 A! V8 D- o
t = t + a2(i, j) * x(j)
% ?+ B3 U. O6 f: ?" nNext j# D' n% |3 V% `) p
t = t - a2(i, n + 1)) R0 A- e8 f' z4 V% J: {$ j
Print Spc(5); "第" & i & "行:"; t& v0 n  v% r  k* ?, D
Print) }1 f  A$ d) n- `
Next i$ ]$ t* k% c; H1 E0 p* s5 o1 B
* m' O3 e& @2 ]8 x3 P( U7 T
End SubPrivate Sub gauss_Click() '高斯消去法+ a$ |/ C& s$ s  Q% T1 Z$ _0 c: p' t0 F* ]* r
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single& Z  I+ q, m+ [
i = 1: j = 1; C4 R/ w9 I% A: u: p( G
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))3 K% K. g) i/ W5 k
ReDim Preserve a(1 To n, 1 To n + 1)8 N0 [, m7 K: x& m* ~# P8 o9 y
ReDim Preserve l(1 To n, 1 To n + 1)1 D- b4 |1 q: F/ I+ p
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
9 d7 V9 y$ _; X* t6 _1 eReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()5 S" Q9 p5 Z2 @  N
For i = 1 To n( y) A2 [  P# [( S' w2 p, D- d
For j = 1 To n
6 ]; w+ W+ O  I# T8 H' i7 sa2(i, j) = a(i, j)
; F) z: X5 W$ y6 |( E, e* hNext" C( F- l9 e! E
Next '将a()的值全部赋给a2()
, [6 U; H  S7 j9 _m = 0; p! V9 v# k# C1 ~+ ?4 N
D = 17 ~0 p: l- Z/ ]" K, z
ReDim x(1 To n)
* [! c2 `( ^* b7 |0 @Print "--------------------------------"
: |7 q) |0 ]  Y' |& I1 h, aPrint "您输入的增广矩阵如下:"( F; e4 \$ ~+ ~1 ^
For i = 1 To n
* |1 F0 M8 K- B+ R6 U# }# V5 ys = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
2 L: N+ |  X& @+ s4 ]0 cFor j = 1 To n
0 U5 A/ {5 D$ ]' |" b# ha(i, j) = Val(Left(s, InStr(s, " ")))
5 ^  ^# w6 {( \( L: xs = Trim(Right(s, (Len(s) - InStr(s, " "))))$ Q" Z; M4 E7 c7 X
Print a(i, j);
2 b( E/ X) G( k3 p' T# y% MNext+ x8 e& B6 A" |1 d5 u" L: J2 \
a(i, n + 1) = Val(s)( N4 V0 e' P1 U) j3 g
Print a(i, n + 1);- l. G7 f, _) W4 s6 I# F
Print
+ j% k( }% V# U9 e& xNext
7 k1 y# U9 F6 D2 e" y0 j" V$ a, d5 x3 ?5 i
For k = 1 To n - 1 '开始消元; W4 s5 b2 Z4 X7 g. F
If a(k, k) = 0 Then
' c9 K* q& F+ {$ s; kMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!": u. ^6 Q3 r6 v  R8 z
Exit Sub
$ g4 A+ E7 }: o% K9 OElse
8 l) ]9 b3 ]6 D% YFor i = k + 1 To n* d+ [% g/ z8 H; z$ \5 r
l(i, k) = a(i, k) / a(k, k)
. c( s3 v( v* u! pFor j = k + 1 To n + 16 ~  A2 |% a* D( R9 o- \
a(i, j) = a(i, j) - l(i, k) * a(k, j)
' k) L0 p$ h; K! d) B9 TNext
  U0 d$ d1 S* E1 m) iNext: s" F6 s6 h3 m% n. ?+ p  W
D = D * a(k, k)/ A& U; @2 ?' I/ i( J) i% H
End If
( a& w7 ]0 a/ L6 P# r/ FNext k '消元结束. w# Z1 y% I& A1 t
If a(n, n) = 0 Then0 \4 a+ w5 ^' q6 I
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
4 u2 j& c% V" d" {( \Exit Sub
2 Z2 \7 a# K0 V: OElse( N  z" ?# a  e$ G$ u$ M* g5 c
D = D * a(n, n)! Z1 f* N  d3 x* k9 f0 x& L; v
End If: i1 _: D, G2 e& Y* y* L  |4 S
Print "--------------------------------"
7 h$ n( g0 U. b5 HPrint "系数行列式的值是:"; D
* {2 X- G5 `. x& c7 S* ex(n) = a(n, n + 1) / a(n, n)( I! i* |. g3 K% S& }
For k = n - 1 To 1 Step -1 '开始回代
- b' p! G% I# qFor j = k + 1 To n# z( I* I0 p! h% @8 J2 r6 \
m = m + a(k, j) * x(j)
0 h9 m3 a- n% P: H+ f, xNext j+ P# f3 }& G' O+ K  y
x(k) = (a(k, n + 1) - m) / a(k, k)8 S/ Q( {$ E9 k. V
m = 0
% w) @4 O$ P) ?$ u5 j9 {. ANext k '结束回代: x5 w" a$ _) Q

3 d/ D* j- s& f) M7 k6 aPrint "--------------------------------"# R9 D4 u) h8 o7 S# D. z3 d
Print "方程组的解如下:"
0 A% ]6 S5 [0 v8 w7 W- F
* {) M$ o( B4 I, aFor k = 1 To n
5 `9 x; `( l; M7 o5 C6 rPrint9 W6 D2 i0 Y8 ]) R
Print "X(" & k & ") = " & x(k)3 x( `# O( L2 h: V( \
Next k
; c1 F) {6 ?  i2 {3 o+ vPrint "--------------------------------"
8 _- k- j! O# ZPrint "其中各行Ax-b="6 z  G5 _8 d% Y9 O2 K. P
Print" J5 G5 q, {( ~* q
For i = 1 To n) d7 ^( ^# `9 O/ X1 b3 I" I/ z
t = 0
8 u8 O8 {9 A: s) i& mFor j = 1 To n3 ]- x# v" B: Q
t = t + a2(i, j) * x(j)
% M3 ^4 \4 g  u: ANext j
7 ?, r6 ]) D' m) V, }" j7 A# Yt = t - a2(i, n + 1)! B8 B1 M  s. r; B5 P# h
Print Spc(5); "第" & i & "行:"; t9 f. A3 F7 u! k' y
Print  A$ E! C5 c' H" k3 ]9 T- z
Next i
! ^$ X* F; V0 I0 ?. p9 G/ l$ f' C" Z4 y8 E" U  d: A
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-7-13 13:41 , Processed in 1.086218 second(s), 73 queries .

    回顶部