QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
# ~8 \- q4 V3 [+ N- _( YDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single* {& H) g1 y2 l
i = 1: j = 1; j$ Q  n2 l1 W! B7 k) z
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))4 Q0 M$ j$ h$ J6 ]/ W5 h0 x
ReDim Preserve a(1 To n, 1 To n + 1)( D9 |/ ^3 [, S; o. |7 x* o0 S
ReDim Preserve l(1 To n, 1 To n + 1)
7 {+ q. w' f. c4 h5 x: X! NDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
! q0 u, s9 x& E# `9 X) e3 hReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(), d( _& m0 P% T+ D1 G/ e
For i = 1 To n5 e6 d. G' C& F/ k
For j = 1 To n
  g" W. r# g" ]8 ea2(i, j) = a(i, j)& j3 V# I; [& c& [& b
Next: t. m8 Q7 w4 t; o9 E# j: y2 L0 \# d, z
Next '将a()的值全部赋给a2()( R/ t; H# c! q5 ?
m = 06 N  x9 t: b, w  }* ^
D = 1
4 i8 R& ^0 e. t. m) i: ]3 |ReDim x(1 To n)9 C4 B& T( i- w7 O6 R3 z- e9 G5 w
Print "--------------------------------"; F" {6 A3 r0 Y4 Y* h
Print "您输入的增广矩阵如下:"' }2 v8 X, v. [  |
For i = 1 To n( u' o4 \3 ~% U3 ~
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))) w3 o6 @+ |6 Z# [  j/ g
For j = 1 To n
8 k1 Z+ @; R8 A: {$ za(i, j) = Val(Left(s, InStr(s, " ")))3 y' I; m( S. y* @8 f, }1 B& Q
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
) b) H; N$ _5 c8 UPrint a(i, j);+ b# m; l/ L" `0 K
Next+ V3 ~- Z5 C: n
a(i, n + 1) = Val(s)  u+ V) ~* W7 w3 a
Print a(i, n + 1);
( z0 L1 V6 _+ X" ~; Z+ o0 HPrint
' O" O- g8 D" J/ O' y( p9 o; a( s7 d6 `Next
4 L  w& c8 j- W- G9 A7 t- U+ t4 C) Z; @
For k = 1 To n - 1 '开始消元
" R$ j% C& U9 ^- ?& VIf a(k, k) = 0 Then
' `8 \; Q- ~: k$ [+ RMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"/ O; M6 [: L- I* f' Z
Exit Sub& }  R5 ]) Y: ]" D. g) ^3 f: h
Else- `" r! l: m# a9 G
For i = k + 1 To n- t5 L1 t' e* {& l! K
l(i, k) = a(i, k) / a(k, k)
* B9 h) G0 h( m! C% Q9 sFor j = k + 1 To n + 15 j* r% H8 j5 N$ A# i
a(i, j) = a(i, j) - l(i, k) * a(k, j)$ K/ Q9 F$ j0 ?: c/ P, h3 ^
Next
% r' `" j( T; z4 @* A9 ^: _0 mNext
5 f6 v1 u2 m* a9 k! LD = D * a(k, k)0 F3 h8 n+ @& Y
End If  J  g, N' Z/ c1 p) Q
Next k '消元结束
- O& W* l$ h2 {  s$ P# u$ E1 I4 nIf a(n, n) = 0 Then
3 d2 F- J/ i$ ]0 s3 u: qMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
5 |  t- v; N; ~( TExit Sub
7 z: [+ [4 H5 B) ~  v1 l/ k0 `Else
7 S" ~7 I" e5 p& GD = D * a(n, n)6 [: F% X* i  v3 [
End If1 U1 `) u2 f- Q. Y0 L' g! t
Print "--------------------------------"# p. F1 C; M' \% }" l
Print "系数行列式的值是:"; D3 b" p6 J, p1 F/ o7 K0 i: q3 g- V
x(n) = a(n, n + 1) / a(n, n)
! P! K5 x% d# F, B0 rFor k = n - 1 To 1 Step -1 '开始回代
1 U  g  ^8 _5 k0 D0 h' }For j = k + 1 To n
: G0 s. _$ y1 y$ G7 j/ qm = m + a(k, j) * x(j)
& W/ |" [3 e& O% e2 @7 H1 b$ W1 PNext j
! D+ x1 Z! U3 p/ a: ux(k) = (a(k, n + 1) - m) / a(k, k)
5 v7 @3 G- {6 n4 Fm = 0( e5 M) K0 |: J# l. ]1 x' L
Next k '结束回代
0 h/ \6 ^2 u  ?" F/ i1 t4 `  f) A8 N
) g6 j5 v. w6 M/ BPrint "--------------------------------"
6 M! o2 g7 X& Q; l3 aPrint "方程组的解如下:"* c9 [- f  G, W* z  Z& }+ l: K

3 O/ o" G: Q/ y2 ]7 J9 ?$ f; bFor k = 1 To n
) V2 d( }/ j: I/ i' ZPrint
, ^' k# N3 k8 ~& @+ dPrint "X(" & k & ") = " & x(k)
+ y8 n: g, V# c( O' |7 B; ^Next k4 h' m' R; a7 h9 V3 ~
Print "--------------------------------"
- @- C# x  k+ VPrint "其中各行Ax-b="
' @3 h0 Z. N0 S6 q& T8 p8 VPrint9 U; l/ Y; q6 f0 g+ }& M( h/ p, M
For i = 1 To n5 [1 u4 N+ G6 k- J- g" S3 p3 k% T
t = 0  i4 n2 F% M) v# V
For j = 1 To n& d) c8 A- _- j: L+ x6 e
t = t + a2(i, j) * x(j)4 q* p6 G1 b8 Y/ a& k
Next j1 n) w6 L, G8 O2 S( Z- U3 u( p
t = t - a2(i, n + 1)- o0 R( Y- K# q
Print Spc(5); "第" & i & "行:"; t
6 ?6 y4 w' b6 |2 ^# s/ t( yPrint7 ^. B& v& I0 H  ^- [
Next i8 i3 ?3 ?* m% X4 n5 B5 c
/ L+ j( J4 c% U& a8 N
End SubPrivate Sub gauss_Click() '高斯消去法3 `2 l$ d% {8 b" T- C6 F6 s
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
) `: L- r& `7 h5 R+ B+ Q, O; Ti = 1: j = 1# K6 _3 Z* e; E; f" x7 x) y
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))/ |3 c4 ^) S7 m! G* G& T
ReDim Preserve a(1 To n, 1 To n + 1)3 H2 A# t( C2 l( L2 h' P4 g0 {( z
ReDim Preserve l(1 To n, 1 To n + 1)
1 ]' @3 S, ]- E  {Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single4 s+ m* m# p$ ?; c4 |. w. l4 x1 m
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
  ~1 |, ~# x/ p; [7 BFor i = 1 To n
7 Z! [6 |6 r- @/ DFor j = 1 To n
$ X- ]3 u0 U5 i' f4 d. U1 `# za2(i, j) = a(i, j)
4 _2 b6 x% m1 S% I& o" CNext. ~# o; D1 i) `! y" O2 J7 Y( h
Next '将a()的值全部赋给a2()
% L9 ]1 _0 @" V. d# `- Z3 ]m = 0# d* N1 G- [; Y
D = 1
4 A; L/ @6 g6 a' p- eReDim x(1 To n)
" g; f3 g- ^. nPrint "--------------------------------"5 L7 Z) w2 Q9 u; }5 I
Print "您输入的增广矩阵如下:". p7 c) M. Y' `$ G+ ~& a
For i = 1 To n9 ~/ v, @& |3 x$ s' K. E
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
" d  N& u  \+ k% O' _For j = 1 To n9 k3 \; j$ [8 B5 ~
a(i, j) = Val(Left(s, InStr(s, " ")))
' h7 z* B9 O5 T9 W) D' ts = Trim(Right(s, (Len(s) - InStr(s, " "))))) |& X# B/ r/ B% {3 j  _
Print a(i, j);% m1 q5 U) f7 n
Next
% r0 }- x% {! h( S3 I! O& Ja(i, n + 1) = Val(s)
. O7 F* v7 n9 M0 h( n" I0 oPrint a(i, n + 1);' Z* M5 J0 K9 ?2 R8 e" o
Print
7 M% r* n- k- f% {- `Next0 V& T& w6 r7 q) \  P7 U- W

' _, n* r1 M+ KFor k = 1 To n - 1 '开始消元6 X# R5 v4 n& ~5 X- L2 W* [
If a(k, k) = 0 Then
1 _1 V3 H: P( y2 a; g; \$ q$ AMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!". X$ p7 ^% u& K, L1 o4 i2 \) f
Exit Sub
/ c, b3 O# E1 f' X. |Else: [7 X; E" o, j( n2 H& E
For i = k + 1 To n' e- C% f4 u2 G( O& {( ^4 j! N
l(i, k) = a(i, k) / a(k, k)" ~9 {& k6 }' g4 P+ T% C
For j = k + 1 To n + 1
3 o- T3 D; k7 P% ja(i, j) = a(i, j) - l(i, k) * a(k, j)5 d- k0 l8 f% R+ b
Next: V1 l. g; p- H
Next1 o- K5 b4 w; x; ?( s
D = D * a(k, k)- s2 `+ a2 n$ s
End If# s6 K) X" n3 F
Next k '消元结束
6 q2 z" k6 h9 }2 I! O' P0 CIf a(n, n) = 0 Then
: H5 ]& D& H; j7 m" c2 ?) |6 F  KMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
+ {! t1 r' S0 U  a' g2 }Exit Sub  H* R; q% q3 f
Else9 y- F- N& Q/ _: O; v) [( g% j; k
D = D * a(n, n)
# T% T. Y3 z& w! p3 `End If
7 {; a- M3 [: L# X3 R0 K2 z* D5 r4 wPrint "--------------------------------"
$ S* _8 S& \5 T2 c& {5 \+ K* s8 YPrint "系数行列式的值是:"; D
! H3 p$ U* {5 W. V  \& \x(n) = a(n, n + 1) / a(n, n)
' q$ c4 ]9 K, c, GFor k = n - 1 To 1 Step -1 '开始回代$ q6 A8 x3 ?* G7 f3 m* g
For j = k + 1 To n3 Y7 C7 e( d0 l' n% ^& l
m = m + a(k, j) * x(j)8 f( l+ e! D0 Y* n+ f' [
Next j
- [9 J) H6 X$ e; ex(k) = (a(k, n + 1) - m) / a(k, k)
; m$ u# ^& U6 w# {m = 0% R/ d; V0 p( U7 U  [' U
Next k '结束回代) G" {$ q  p, t% S2 r: U
- x1 b6 j9 t- C& A
Print "--------------------------------"
5 ]' ?; C0 K: L- F5 n3 c+ KPrint "方程组的解如下:"
# G) v% ^1 i8 ^0 F7 M! h( J. Q
) [! B8 g: L# M- K( O- o# aFor k = 1 To n: r- J5 V  X, V
Print
, O8 I5 d5 `& Y# GPrint "X(" & k & ") = " & x(k)
; f  |* S: q! Z) O9 g0 j5 D8 u- oNext k$ \2 s% a% L) ^+ O: L3 x8 J6 X- _, v
Print "--------------------------------"
0 z  p& l' O- jPrint "其中各行Ax-b="# R9 N3 Z2 q6 x, V
Print
% b2 R9 l' P' D9 P2 V  FFor i = 1 To n4 V; ~7 ?' m  Z0 {( ^+ q( }
t = 04 |. s8 C! g" K3 D4 U
For j = 1 To n
9 w1 Q4 \  b7 p9 B) P% at = t + a2(i, j) * x(j)" n: L% _2 b* @% a: O: R* T0 \# x
Next j$ m9 \- R8 p; K2 f
t = t - a2(i, n + 1)9 J5 j* j! P) a" ~6 p
Print Spc(5); "第" & i & "行:"; t9 B4 I# [/ N" D* Y
Print1 H/ W1 k/ O' T3 C2 j) O  P1 l' ]
Next i% s% W  X7 s" X' i& f
4 s; B% M; h4 I( |- ~
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 03:50 , Processed in 0.406779 second(s), 68 queries .

    回顶部