QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法. d( P& p) M2 o2 c
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single5 K) r0 m( x3 y) d3 K( S3 o' X
i = 1: j = 1
3 Z2 K( l" e- o! In = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
" N: N) v; P% J% P; QReDim Preserve a(1 To n, 1 To n + 1)/ L9 h1 [2 S* \
ReDim Preserve l(1 To n, 1 To n + 1)+ z7 U/ C# ~3 M
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
! z: p9 E$ x* d6 q7 {7 RReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()3 w4 ?9 z1 q- [, D/ i$ K
For i = 1 To n
$ Z6 d8 Z4 s8 [/ B. K6 E, pFor j = 1 To n
$ J7 C$ K: S) \a2(i, j) = a(i, j)$ F+ L. a+ T" f$ K1 i. j* z9 ^
Next
3 W5 p" M; z8 g5 k% yNext '将a()的值全部赋给a2()+ i5 Z" O- E# {
m = 0
- e6 G' j0 `( X: }( X3 K8 ^D = 13 `4 [: j# T6 l6 ^
ReDim x(1 To n)# f. I5 m* _7 T, @& q# K
Print "--------------------------------"# ~0 Q; W  ?* `6 R
Print "您输入的增广矩阵如下:"
' {4 s7 v4 V5 v5 L$ TFor i = 1 To n( Y7 W; g/ z  }" M/ X
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))4 a  Q" @9 f) ^
For j = 1 To n1 ^( i" Z- D- `
a(i, j) = Val(Left(s, InStr(s, " ")))
/ e, v$ D: O5 R, x  o1 Js = Trim(Right(s, (Len(s) - InStr(s, " "))))
+ x9 j% d1 @4 i, ?8 {9 t- cPrint a(i, j);
0 ^8 m6 V  ]1 C% ~Next& Y' o" K4 U- I' W# B( z! ~
a(i, n + 1) = Val(s)0 D6 y1 s; o5 Q' q  F
Print a(i, n + 1);
/ `( J0 @8 S! v6 c" v$ [Print8 @+ u4 n0 }% W( t) Q( e' n, J- l
Next% R- \* s) P& }, f8 Y% M( Y

0 D: a- s# F$ @4 wFor k = 1 To n - 1 '开始消元
5 t4 r4 Q! p, K/ u' {# eIf a(k, k) = 0 Then
+ c9 C0 @  l$ v% @, r/ e- TMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
7 O2 u: E/ z; f4 I  x# F& WExit Sub
# K' p$ F% V$ _/ A, v( K8 {/ x: sElse# _: z& F5 ?$ I8 s$ j
For i = k + 1 To n0 ?' @' {7 l7 S3 T& m4 P  M
l(i, k) = a(i, k) / a(k, k)' o: M6 w+ I+ E2 \) C- A. i8 ?% R
For j = k + 1 To n + 1' M- E6 D5 a! @: f
a(i, j) = a(i, j) - l(i, k) * a(k, j)
) z# p  ^2 u: X6 ZNext
2 ~6 K% _/ r9 R, S- [& \9 y0 dNext, R2 p7 P( q* l4 D& j  v
D = D * a(k, k)
, X7 s2 x6 H: L9 S' K1 w) f4 ?' gEnd If
9 R, c: u* z$ K- q9 NNext k '消元结束
) V  p3 {! V( {If a(n, n) = 0 Then
3 ]2 Z5 R- [) D% `" T2 v9 z. O8 dMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
7 Y8 \% \% Y  J; l6 t) YExit Sub2 \& }: A- K9 H* [4 }
Else
0 f# U6 m5 X% ^& Q' ^9 A$ [3 r2 {D = D * a(n, n)
' z+ j4 ~+ @# W9 EEnd If
$ N& w' F% Z1 ?! p0 gPrint "--------------------------------"" C; I) O" B; S4 T$ M0 n
Print "系数行列式的值是:"; D" c6 N+ q0 I6 Q& U3 G) i
x(n) = a(n, n + 1) / a(n, n)+ ^# p% E3 @, T) `! _: D  @
For k = n - 1 To 1 Step -1 '开始回代
$ I3 a5 H9 ]! AFor j = k + 1 To n& N5 j" |4 A3 F5 O( z0 g+ M
m = m + a(k, j) * x(j)
' f( ?" N& r& b# B- tNext j
5 ?# `' U+ X4 d" d2 M4 `3 vx(k) = (a(k, n + 1) - m) / a(k, k)
6 y7 w8 ?6 ?9 \+ }" tm = 0
4 d) V7 D) p4 v* z8 I4 A( ^Next k '结束回代+ J' I# L( M- d) W; p7 I

; @' Q3 g* I- r  t4 aPrint "--------------------------------"# S. B: [1 |; R. R2 g
Print "方程组的解如下:"6 a  w) L, a: o1 U

7 ^0 s3 ?+ s! RFor k = 1 To n
* T6 i& O+ f0 KPrint
/ |# r( O: p. _/ r$ @  W! E7 R9 U2 D. ~* bPrint "X(" & k & ") = " & x(k)/ Z7 B! f6 S. X# @
Next k' S" s7 V' I. y! |8 u& p! R" x
Print "--------------------------------"3 }7 y" X% F6 S" i7 D9 l
Print "其中各行Ax-b="
' h* f9 Y/ x0 G1 p2 d" Y7 HPrint# N! K6 S  p$ J, ]
For i = 1 To n
( y1 o: ^  S9 Pt = 0; A: U. U7 y  `. f1 |/ f( B! T
For j = 1 To n
: J3 C7 z# K+ u$ O( f8 M: {t = t + a2(i, j) * x(j)# ~& U! X: ~6 p* Z* {
Next j4 ]" O, P, R! Q6 @; k
t = t - a2(i, n + 1)
1 L) D( l& m  R" ^) lPrint Spc(5); "第" & i & "行:"; t
4 n4 `, A+ B0 \" u/ pPrint, e2 F  W8 k9 q* o6 A. a
Next i
# c  U" n, g, A! m4 v" E0 y% [# l$ C
End SubPrivate Sub gauss_Click() '高斯消去法9 w( H5 R5 Z( ]# ?, Q$ d9 e
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
/ J% V% ~3 V" ^; x- r# f" @$ Ni = 1: j = 1# c" C$ n6 \; P' o4 @! q
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
) G/ {$ M; Z6 N! H! b+ t/ m( E6 TReDim Preserve a(1 To n, 1 To n + 1)$ A6 J+ r2 F- t* ^+ L, f) f$ i. i
ReDim Preserve l(1 To n, 1 To n + 1)7 T+ ]1 ~; U" H7 `
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
6 h: y" ?! m1 y2 qReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
- r' z; W9 O/ P9 N/ G0 T  n% z& NFor i = 1 To n0 h: L( J% p# Q" C' Y0 b2 p7 B
For j = 1 To n
/ B$ E+ M6 o" N2 b6 l( Qa2(i, j) = a(i, j)
9 p$ F; ~: Q" z' x) L1 |* _; KNext. r- t; W% B7 `- I; b" v
Next '将a()的值全部赋给a2()
. z+ A7 C: i7 I1 R3 Jm = 0  u1 d3 `7 W: t$ p
D = 1
$ V. Y* _* I( w$ A. x9 D6 t3 T- uReDim x(1 To n)  T  z0 w: X6 T# [
Print "--------------------------------"  E' f% c$ C* N/ U2 T; R
Print "您输入的增广矩阵如下:"
: \# C, ^9 L& y& D+ gFor i = 1 To n
& J. F' R/ Y$ A2 O1 H- P) Ps = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))7 M" H8 V' y% `- Y4 s) M" V
For j = 1 To n2 C% H8 ]/ l! P) h9 j
a(i, j) = Val(Left(s, InStr(s, " ")))
$ B; D) p8 X/ B/ Us = Trim(Right(s, (Len(s) - InStr(s, " "))))  W8 e. J' S: C& C
Print a(i, j);# e* r* U# x2 O! Q- n7 A9 |
Next# s* X8 w* P' J. ~5 P
a(i, n + 1) = Val(s): y6 s! v- y( s
Print a(i, n + 1);  n' ]! N; [' R( x. J
Print9 w9 X# }! u7 O" c- x  ~2 ]  e( V( g
Next
4 V" x: y+ A! h6 @) @4 A3 l8 q# G  F; }, Q! t0 |! X7 N
For k = 1 To n - 1 '开始消元
, |5 h) s. [7 A! gIf a(k, k) = 0 Then
& s+ ]; H) A9 qMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
) s) [% m% y) mExit Sub* f8 d2 w4 P. K. t( \' ~
Else' k) Q$ L, u$ \$ J, O) \% k8 z
For i = k + 1 To n
+ k( G. f- a$ l# R- I' Ul(i, k) = a(i, k) / a(k, k)
# {2 h( [2 x# d0 {For j = k + 1 To n + 1
( [, R7 f# p; C8 Pa(i, j) = a(i, j) - l(i, k) * a(k, j)5 Y) R# T' f1 d% X3 B: s9 ~
Next
$ k3 W1 |6 I. p. |' n9 s9 fNext
. F5 D. D7 {: C0 U1 CD = D * a(k, k), K7 C4 ], f/ R) U
End If2 Y. K/ C- u3 M9 O! T) Z" G' A
Next k '消元结束
, ]% J' x! e* z9 ^9 Z7 AIf a(n, n) = 0 Then5 F' `. Z7 {8 ]. N
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"- X, U$ z# C6 B
Exit Sub8 x2 b7 ^# L: J1 k' T& @9 L: v9 O; z
Else
( {% ^, R4 y) e: m3 q7 JD = D * a(n, n)
% i5 k" a/ ~4 yEnd If) n) J+ ^3 i- D4 M& |
Print "--------------------------------"$ V& N9 v" y, A( S4 z. j
Print "系数行列式的值是:"; D4 [$ c  h3 |5 Z! A
x(n) = a(n, n + 1) / a(n, n)2 Z! ?1 B2 i) [: }* R/ H( B
For k = n - 1 To 1 Step -1 '开始回代$ D$ v# x/ R# y
For j = k + 1 To n
2 H0 `6 c3 B* f9 T4 u% {# km = m + a(k, j) * x(j)
0 |2 `, }6 h* c  I( kNext j7 x$ _, t+ v  V7 s1 d
x(k) = (a(k, n + 1) - m) / a(k, k)
, p( J% {* K6 {; r# Y6 i* Zm = 06 K6 L1 j) b. r5 t5 w
Next k '结束回代0 f7 @. @  \: D- i: u8 g6 f
; ~  H8 l) w6 b3 F
Print "--------------------------------"
8 R4 o5 B/ {5 d( b  u5 Z/ yPrint "方程组的解如下:"! D/ m! l" O7 l7 E: b) u6 a

- k5 Q2 E) h8 `# {For k = 1 To n7 A" i  e' \6 X, g0 o+ U
Print
% E: D( {. s6 q1 M/ ]) Y0 }Print "X(" & k & ") = " & x(k)
4 g, @' f9 N. S1 L4 ~% Z9 sNext k
# E# d. e. w2 J/ pPrint "--------------------------------"
  S  j3 i# r7 J1 nPrint "其中各行Ax-b="
' L. O/ C. N; tPrint
$ [9 O/ h6 V$ B' d' K. T! C. JFor i = 1 To n
% @2 ]# j2 [$ J/ x5 f" _t = 0& ~5 O; N& D' F7 K5 G
For j = 1 To n6 I1 Y% P, N9 o2 k: O3 i/ l6 ^
t = t + a2(i, j) * x(j)5 ?6 [6 v( O: ~' \# C
Next j- R2 T; n# X( L' S6 @* }) }
t = t - a2(i, n + 1)7 h! k* k* S/ J' m! Z1 ~4 U) R
Print Spc(5); "第" & i & "行:"; t
5 y2 `3 P" o1 y( @1 Z0 IPrint
8 Q; @/ p' N1 \7 A, w/ ~Next i0 B5 T/ W" `) P1 L$ p
. |' Y" Z$ F1 K  p3 [
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, 2025-7-29 01:50 , Processed in 0.390360 second(s), 68 queries .

    回顶部