QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法% [( d$ f* N  \1 k" l; t3 T+ D0 p2 f
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single; G) h, M7 V* ^6 X7 \2 V
i = 1: j = 10 W; y7 S- S# N  {$ _3 Y
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
, H% V& v+ d0 Y. TReDim Preserve a(1 To n, 1 To n + 1)7 V: p! ^# b+ l# U9 |' k! N3 j: Q
ReDim Preserve l(1 To n, 1 To n + 1)# }. u- L1 S* N" L. q8 c" _4 j
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single" m$ ~5 U! g- b) w( F9 W# h$ \
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()3 H7 {; d  }4 x2 Z% L/ e5 U3 i& Q7 W
For i = 1 To n
4 h( T5 B9 z6 N! @% A* a0 |9 RFor j = 1 To n
- \4 o0 V7 i# _- p" J# fa2(i, j) = a(i, j)
! w" e8 z2 Q! r0 s; p* CNext, }: |- T. L: D% K" y
Next '将a()的值全部赋给a2()# |& x4 }% X$ Y# P5 j
m = 0
4 i3 ~. H1 t! m4 M8 LD = 1( l6 G! Z& d0 O( W" T, P
ReDim x(1 To n)
, c5 R! W- U2 f7 W1 aPrint "--------------------------------"
  g  _: y. k$ J, {Print "您输入的增广矩阵如下:"
" D% Z9 P9 ^" [9 l$ yFor i = 1 To n3 H4 U$ @- b3 D# ]2 T
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))1 `0 O4 o5 _, M0 s( S
For j = 1 To n9 ]8 h' Q  J6 R# P; K
a(i, j) = Val(Left(s, InStr(s, " ")))
' J7 C0 R$ F: ~1 ns = Trim(Right(s, (Len(s) - InStr(s, " "))))
7 j% s6 c0 t) |( |; bPrint a(i, j);
$ A  v* C0 [+ k( y% j4 A6 JNext
* n, ~- k2 l( ^a(i, n + 1) = Val(s)7 V5 v, U- c2 P8 n5 L6 |  [7 P
Print a(i, n + 1);9 s: V' W3 g- v& x4 v
Print) {3 D5 V* T$ z+ L5 t
Next
+ M# a% Z! ^) h
5 h0 s( @5 B+ `For k = 1 To n - 1 '开始消元8 {: Q8 w3 O! L+ s9 {  W9 v1 E
If a(k, k) = 0 Then9 J& O1 ^5 l) z4 O! Z
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
* M/ }9 z" s+ s0 y/ }Exit Sub
$ F9 N- w8 T+ w0 |3 G$ pElse1 x( S) R$ o0 X% J) z( U
For i = k + 1 To n$ _) k4 S/ \* o) C4 r' g+ J
l(i, k) = a(i, k) / a(k, k)6 H0 j/ S, P2 |; K. |% z& Q
For j = k + 1 To n + 1  J& l1 w  M1 r- ~' H1 J
a(i, j) = a(i, j) - l(i, k) * a(k, j)
( \2 r/ @& y* S! l8 CNext7 M- ~0 x/ I/ e$ S1 V2 s
Next! ], T0 S4 s7 e" u* f
D = D * a(k, k)6 D% k" o. V) _
End If7 s, w; U( q* E
Next k '消元结束
* R- F2 Q- k. kIf a(n, n) = 0 Then
* C' E2 \9 n2 u5 r3 sMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"* J- m0 i: F6 j9 G: M- X& e: a
Exit Sub4 K; _1 v  ]! v. k# G/ v$ G
Else
7 j5 G+ E" G7 o, |; N9 J/ qD = D * a(n, n)% ]0 p$ W3 b! h4 J  U
End If; c& D9 v3 J, E
Print "--------------------------------"1 ?$ `, R" S+ U
Print "系数行列式的值是:"; D
  N' A6 e4 J: \% T# @. z  Qx(n) = a(n, n + 1) / a(n, n)! w. i% M0 |  r, D0 I+ A) H
For k = n - 1 To 1 Step -1 '开始回代
9 M# ~5 C( B, W4 B5 sFor j = k + 1 To n; c( J, ^3 {" o
m = m + a(k, j) * x(j)
9 W9 s9 A. p' B' ?* H+ N- gNext j
( P/ T: y9 S% S4 ~* Vx(k) = (a(k, n + 1) - m) / a(k, k)3 \& _: @) i2 P4 n+ W' a5 e+ W
m = 0
$ W. i# s: }3 W2 r. |% N# WNext k '结束回代% |* m! q# E- ]' E

* j" @. C+ s* N" rPrint "--------------------------------"& p% ~9 R' y" @  k! W8 O
Print "方程组的解如下:"
0 K: ?9 o% E3 k* Q7 m( v6 c/ r5 \- N, m' Q2 r3 U$ }
For k = 1 To n
4 b" w& e! C' \( J$ m" p8 qPrint' r# \% X+ R! F  O) o
Print "X(" & k & ") = " & x(k)1 ]9 {& y. j9 u' |. |2 t# h
Next k8 y4 O) S  l/ e3 V* r8 G
Print "--------------------------------"
8 \4 e; \( _" J# |2 ~: oPrint "其中各行Ax-b="7 p4 ?; u6 t. z. X" T
Print2 {1 P! j! I" P* m# Q" X
For i = 1 To n
% E0 K1 j( j- |2 [t = 09 F" N  K8 _# {6 l. g
For j = 1 To n
0 R" S' Z( [# J9 Yt = t + a2(i, j) * x(j)3 N7 G$ g* F6 v
Next j: W7 U1 ~) X1 y' ~6 ]  @$ j0 h
t = t - a2(i, n + 1)) u+ \( ?! B2 ^6 @5 R% W* X% k: T
Print Spc(5); "第" & i & "行:"; t6 T% W8 ~7 D# ~
Print
! j; u1 M" P1 z$ r( Z1 G& O9 KNext i
6 D0 L( L" a' e7 g& @5 ]( i( }# j; s/ T2 x% @! Y, v
End SubPrivate Sub gauss_Click() '高斯消去法9 L% }2 m9 t& c. s
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
# L; S) y6 {) b( e) Pi = 1: j = 1
8 @& i7 ?9 _* r8 ?4 X8 g1 ^/ Sn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# [1 `9 Y3 f# a1 w0 b9 H
ReDim Preserve a(1 To n, 1 To n + 1)
6 f4 B+ u" r; U  c) |# vReDim Preserve l(1 To n, 1 To n + 1)9 y& d8 \% V) V& M  ^5 J
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
, M# w/ X% T0 ~3 w- hReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()1 ~5 B2 [% x, H) {4 p
For i = 1 To n
+ [7 l* h3 L; e$ T2 oFor j = 1 To n9 H7 e+ q4 i9 W4 P
a2(i, j) = a(i, j)6 Q- i3 j0 I9 S* \# V4 N
Next
2 A% o% d$ z  l$ r* h* dNext '将a()的值全部赋给a2()8 {+ g& R8 u5 }, }4 F, z
m = 09 N8 c' |9 u( I  \5 j& m5 t8 w
D = 12 P0 M% I& u6 a+ ~. H; I; V0 E
ReDim x(1 To n)
4 }5 k- e% i9 n" WPrint "--------------------------------"
/ }" `2 \3 k9 l( v/ |% sPrint "您输入的增广矩阵如下:"
* ]4 O1 \- U- ^+ b. M! p7 f2 j; oFor i = 1 To n# s6 i4 b, A* C
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")). y3 H' l5 e; k; s4 A& Z* j
For j = 1 To n
% x1 D) t- o# x4 E% ~a(i, j) = Val(Left(s, InStr(s, " ")))) z0 z) _8 Q1 ?( \
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
+ X1 A9 e- \, \% w! e& l- OPrint a(i, j);  P0 M# e" X0 @9 _
Next
) S5 ]0 I/ x+ e+ O1 [a(i, n + 1) = Val(s)% V3 W) P6 ]6 x; u
Print a(i, n + 1);& W( K7 @# z3 K0 Z" w
Print
4 J4 U$ a* N- c, B6 |6 Y& ]) ~Next
& k& K1 j5 I6 s8 P  c7 |
- K3 x( E+ Z" H' JFor k = 1 To n - 1 '开始消元- L$ n  b2 t; Q* A' q! [
If a(k, k) = 0 Then* B1 V% Z' x, Q  v' |' S5 i6 i
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"9 V2 D+ g- ~! H$ u( ^+ H9 r
Exit Sub$ ~0 k  E( g0 b2 X
Else) G, x, t5 H& ]2 C
For i = k + 1 To n
6 ?* s& J5 V7 m' zl(i, k) = a(i, k) / a(k, k)! s3 E2 F, L( w* K! _
For j = k + 1 To n + 1
1 w8 V0 }, Y* g. k( D4 F# g! Va(i, j) = a(i, j) - l(i, k) * a(k, j)
; }3 i, G, _: W8 t- U) H3 g! D. `Next0 |3 U# F) ]& ]* N
Next' m9 T/ |0 N3 h$ K& u" M9 L
D = D * a(k, k)
9 v/ x9 x' j0 u! K. g, TEnd If
/ ~* Y! \2 b: X2 kNext k '消元结束
1 Q4 V( K* n- U7 W( b% y  M9 x* bIf a(n, n) = 0 Then. X: b3 S7 o# x) i
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
$ A2 g" |1 ?. m# QExit Sub, `. U$ H: r; f
Else- H" |8 J% a$ v8 [" F
D = D * a(n, n)
9 m$ x3 p2 c2 C# M5 j2 M7 J9 D% U; |End If+ s" c9 e# |7 _) {% [; F# p
Print "--------------------------------") u; A( c3 |2 p6 _
Print "系数行列式的值是:"; D
2 D6 L1 Z7 C5 Ux(n) = a(n, n + 1) / a(n, n)
8 s& B5 d* ]+ W7 C6 |3 x! M7 U3 hFor k = n - 1 To 1 Step -1 '开始回代2 K9 n9 q! |  `6 K4 K
For j = k + 1 To n
( }% Z/ J$ u* I1 n" [; v) sm = m + a(k, j) * x(j): c- |* @& {& ?5 `
Next j
" w/ `; J) w3 H& g" m* B  Q& y* Nx(k) = (a(k, n + 1) - m) / a(k, k), q0 b  N( ]( p+ G6 w
m = 0) Q5 r( x* r( b3 h+ p8 h7 n/ \7 B" M
Next k '结束回代
) z( n7 O% a- X+ E
' ^9 n- {" \& j3 ?+ k  _Print "--------------------------------"5 \- a6 t4 J* f. p, _; f' f  c  ~* F
Print "方程组的解如下:"
+ O4 Y4 p: c) ~
$ b+ R3 C, w8 k4 [% iFor k = 1 To n
/ ?" m. r% u$ dPrint
- ^0 r  Z7 Q. p8 X6 I7 _' cPrint "X(" & k & ") = " & x(k)+ @# X; k) V. x; y; @
Next k. P- X! t5 x& H% g* L
Print "--------------------------------"
8 L) U; \6 {; xPrint "其中各行Ax-b=", D' ]5 x5 }4 `
Print8 j8 N' [( b: H1 z5 v$ r7 o% J0 D
For i = 1 To n/ K- P) o# B' r+ v
t = 0
3 Q! W5 ~- c& T1 @For j = 1 To n2 G) m" `" V& ?4 {% G
t = t + a2(i, j) * x(j)
7 H( q9 }) t  {7 B6 HNext j
* \  W* p, m% W: i& k$ et = t - a2(i, n + 1)
# G* K8 @3 W2 Q3 e7 _4 ]Print Spc(5); "第" & i & "行:"; t
" |% O! M4 Z% d; \7 FPrint5 m8 R! z) L6 X2 U+ A/ E6 c& z
Next i
: f1 [6 D9 R: T' R
0 T' H: }4 Z7 G: _+ W4 B* zEnd 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, 2026-1-7 09:49 , Processed in 0.453090 second(s), 74 queries .

    回顶部