QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
#
发表于 2005-1-19 17:03 |只看该作者 |正序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法- E* x& E1 M; {5 T8 K
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
3 X: u- R8 ]0 x- B4 P6 @& Z  Mi = 1: j = 1
! j) s- P3 F  O# Z) c& K8 rn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))8 z+ L5 R+ [+ _5 |4 _+ H2 O
ReDim Preserve a(1 To n, 1 To n + 1)
4 H0 o# U3 Y: b* G- _: X4 LReDim Preserve l(1 To n, 1 To n + 1)
" n* j7 i6 G' y8 Z# g8 a1 _Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
' p2 G1 U% t4 V- @ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(): A7 e$ f) m" y* v8 H8 l
For i = 1 To n; ]( Y9 ]& S' q  K. u4 V8 T
For j = 1 To n+ v, b9 \8 v6 }9 H5 T
a2(i, j) = a(i, j)5 n9 f' K& h# ^; Q8 L
Next
, F( x. R6 J/ k, KNext '将a()的值全部赋给a2()8 z3 s, c# X* s) M; r
m = 08 w# ^3 z3 L4 T- |) Q/ L: M
D = 17 O' J; _4 g3 d4 L' w0 u
ReDim x(1 To n)
7 S% ]) {$ Z( P; m' b3 S' NPrint "--------------------------------"" v% {5 }; T9 m, z- o' E
Print "您输入的增广矩阵如下:". V+ R- j/ T- ]" e1 ~1 E" ?# h
For i = 1 To n- [6 t* j- r, U" l1 K8 O7 ?
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
; t8 h- c4 H1 R/ GFor j = 1 To n
# [4 k' C4 x7 G* A2 }- ta(i, j) = Val(Left(s, InStr(s, " ")))
6 Q/ i: K, X7 ]" A- x+ E* ]2 hs = Trim(Right(s, (Len(s) - InStr(s, " "))))
0 r2 n6 i0 T! Y' y( i2 o' ^Print a(i, j);
9 `( a  [- i8 h+ M; K1 I. aNext' \% I1 D$ `* s' L% J4 J- z
a(i, n + 1) = Val(s)  e6 B6 E+ Y1 M9 V" V4 X8 f( N
Print a(i, n + 1);7 Y. m* T" x5 d+ ^8 ]& M) `
Print) g# Q6 Q# C* I9 @3 E. B& t# q
Next
8 M5 d% b7 j% Q% g% _2 z- F& D5 V; z' q! y; W- [1 S
For k = 1 To n - 1 '开始消元* v$ X( E! {, \9 Y3 T( K
If a(k, k) = 0 Then$ U2 i/ t4 z% b# Y. E: X
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!": r7 h  [0 Z4 j* a' E
Exit Sub& f( V$ w% u4 u% j; {3 i; v
Else
0 Y1 g8 b4 ~' R$ Y6 o# _For i = k + 1 To n
* W/ Z2 }/ V. P9 K/ K- \7 p- ~l(i, k) = a(i, k) / a(k, k)3 q/ _: Y" f7 |' Q3 A, r
For j = k + 1 To n + 1
) S) C$ _) G: V5 C. v1 ra(i, j) = a(i, j) - l(i, k) * a(k, j)$ W9 U2 \; ]' X4 m1 J. R; Y  {
Next. m/ Y# m" {, f9 j2 g$ e
Next
; V! k4 f  S$ [: t. L; ~D = D * a(k, k); [2 Z( T  b- m+ \6 T: h; [
End If" }" T0 m3 `# J$ }& f& H: X% p8 A# o# C( }
Next k '消元结束6 u3 B5 T4 N  q, i$ i: k4 g+ A6 y! v' V
If a(n, n) = 0 Then* `- O  [/ V3 B  T9 J' _  L8 u
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
) Y7 c3 \* a! A5 |' N9 [+ B$ wExit Sub; k# v, B* O+ i7 L) f
Else
- ]  X2 h1 l$ t8 c$ x' \+ q+ R2 ~D = D * a(n, n)8 W- \, O; w2 [: {* R
End If
- E- ], c% g6 E/ J- c3 V1 n" UPrint "--------------------------------"
1 K- Z$ E5 J5 J5 c1 o* e: h' nPrint "系数行列式的值是:"; D5 q  d5 d" b" [3 L6 J) B6 Z1 s7 q3 K
x(n) = a(n, n + 1) / a(n, n)
; R* A* u9 n0 B  Z. IFor k = n - 1 To 1 Step -1 '开始回代0 T# M/ W1 V6 E0 I1 m& y- [
For j = k + 1 To n" P+ {: b, j0 M& Q
m = m + a(k, j) * x(j)# M) V; L  D4 J0 o  D7 }1 u& h
Next j* }0 q: T* P; Q' C9 n# ~8 P
x(k) = (a(k, n + 1) - m) / a(k, k)# Y8 O, a5 D$ c1 k4 g
m = 0
( e1 p" P" F* O; M$ bNext k '结束回代
7 i5 @5 r  k$ b& A- {7 A) I' n' T. |
Print "--------------------------------"3 e; V+ n& i, }& p1 u
Print "方程组的解如下:"" Y* K0 t' E# U  M1 \& E7 n

  h1 a; j6 M6 i$ ^6 l/ jFor k = 1 To n8 g- s( |  v1 U
Print$ [9 I  O, m3 u# L# \/ J
Print "X(" & k & ") = " & x(k)
  t. F8 Y( D& V8 v7 N' |1 ENext k
/ G8 b: ]* D6 DPrint "--------------------------------"
% e6 H0 W; z+ V% O. U% Z" G0 ~8 zPrint "其中各行Ax-b="' r! X5 @+ M# c5 }: S7 k
Print" e9 [, r$ R4 U% c
For i = 1 To n+ u8 R( x6 P& d$ f
t = 0# d- l" V3 ?0 F/ Q( G& G6 M' F$ I
For j = 1 To n
/ F/ X% U) W+ m* gt = t + a2(i, j) * x(j)
! \5 e1 t# [% r  xNext j6 G8 I9 t3 K3 W, L4 G
t = t - a2(i, n + 1)
, x% |6 s. c, {1 ?3 CPrint Spc(5); "第" & i & "行:"; t5 T0 i! g/ b" b; |& J! q3 n* W: W
Print
' S9 P6 r# W5 y1 gNext i& b$ v$ e2 i* R) k8 s4 Z6 Z

. R+ L1 F# W9 `# i6 P$ `' H4 fEnd SubPrivate Sub gauss_Click() '高斯消去法
0 ^& ^' y# c# T, p4 X  m$ T! `Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single! Z. \+ S# \( V+ b
i = 1: j = 1
( K3 }* B! R+ Q& k" e) qn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))/ Z% u3 C: H! T3 g$ p  T
ReDim Preserve a(1 To n, 1 To n + 1), J8 c9 n: B6 s: ]/ w3 @: y
ReDim Preserve l(1 To n, 1 To n + 1)# o4 a& O5 N8 J# V$ {* X
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
. B9 j' [& @8 T8 H$ yReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
5 X  o% t8 q6 r- l1 QFor i = 1 To n
' n, T! _  J+ }2 w0 ?For j = 1 To n
7 P$ E3 o( A* z3 }0 r; |8 h" ca2(i, j) = a(i, j)
1 l7 W1 J9 j' U' N/ t9 I+ [6 DNext. j( M! X0 D. M+ F  X6 G
Next '将a()的值全部赋给a2()2 x, o9 e0 q0 ^8 D; h
m = 0
9 a) [, y' I7 }# uD = 1
2 i- G2 a7 [1 IReDim x(1 To n)8 q. G& c, ?0 r1 {9 C+ q
Print "--------------------------------"
2 v$ `& T! z" K* rPrint "您输入的增广矩阵如下:"" O. Y6 }8 B6 d, l7 G3 b
For i = 1 To n6 e9 [' J8 L$ N
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))3 j- |" a) z2 T; Y+ W
For j = 1 To n
( R7 A& o4 x5 y5 D8 A6 ia(i, j) = Val(Left(s, InStr(s, " ")))3 v/ ?/ N; s2 v5 w) Z7 R
s = Trim(Right(s, (Len(s) - InStr(s, " "))))2 R9 C* p# `: M4 V* S: k
Print a(i, j);+ J" F) [: c8 G7 s
Next
' U& M3 ?3 K# `3 ]a(i, n + 1) = Val(s)
, a" J! E& m. JPrint a(i, n + 1);* p+ Q6 k9 J0 I% V5 @; Y/ j
Print
) z, n2 p0 h# T- [6 j! bNext& D: {3 {) h, \, e5 c; h" o: A

; j& e, \4 \. J3 VFor k = 1 To n - 1 '开始消元
$ Y* C# A9 h) j! a5 {( K* _, f* a0 _If a(k, k) = 0 Then# V& Q( Z/ T7 t# _& ~& z: G
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!": h- A6 z% I7 c) o0 d! f
Exit Sub8 Q7 H8 p$ k5 A. c: u1 T) j
Else' X8 {, _  e. b- {
For i = k + 1 To n
6 [8 p5 `  X# j2 Pl(i, k) = a(i, k) / a(k, k)+ u) z6 _& t+ `# Y
For j = k + 1 To n + 1
  D  M7 C( e" K- u1 @1 ]a(i, j) = a(i, j) - l(i, k) * a(k, j)* E, G) b! m: f
Next
# P9 ^) D! J, M1 M( B' {Next
1 Y9 a) P. g9 n; G' l4 dD = D * a(k, k)- c2 Y, E2 E, T& T
End If
+ L8 t, O  U3 |6 p3 d9 {0 ]0 h3 K0 eNext k '消元结束
/ Y! _& K4 J; gIf a(n, n) = 0 Then
  @- M& y) D* Q& H. f2 O+ F, t7 DMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
  z6 R% n  Q4 o' I2 X+ D' `Exit Sub. l3 }: L8 _( v, @" Z* R
Else# Z1 Y4 _* A, ?. _; m$ I; J6 v" V
D = D * a(n, n)# m1 y" w7 F# c7 }# K- \3 Q  l
End If
& I9 t( U8 J5 C  ^: UPrint "--------------------------------"
8 c' q; n# @4 T7 b! e* {* F: RPrint "系数行列式的值是:"; D5 |4 V2 @' Z; v" s* P: x
x(n) = a(n, n + 1) / a(n, n)1 l% I2 V( h) R; }6 O5 o9 v
For k = n - 1 To 1 Step -1 '开始回代
  j5 }* ?1 b4 J, zFor j = k + 1 To n
( x+ O4 q$ A' ?# M! H, am = m + a(k, j) * x(j)
$ X' O' |! A! J9 y" ?Next j
8 `8 T7 b7 V2 ^. _' g# Kx(k) = (a(k, n + 1) - m) / a(k, k)- |0 ]/ y1 I9 n8 I9 H4 T
m = 05 o1 s% [6 q" }. y# W
Next k '结束回代  K; i' L; e, p) o' X" d9 q

- o( G% h" |. m& zPrint "--------------------------------"
3 x0 Q  E- m: ~2 lPrint "方程组的解如下:"
7 d6 s7 ~( `5 b6 ?
9 _) ^; r4 s; h% D4 r: ZFor k = 1 To n- k% e( ?  l6 q7 e6 T
Print
3 J! T1 v) n# C, n5 m' L3 I/ |. _Print "X(" & k & ") = " & x(k)
; @5 h8 u5 t! n2 m* zNext k
$ x4 O8 B1 R( @) X# C! ]& dPrint "--------------------------------"' U9 _* l8 m+ Y
Print "其中各行Ax-b="
( D  c( w) Y+ ]; `Print$ O& @2 Z, k# \. ~! E
For i = 1 To n5 d& ]8 I' n6 J8 u  t
t = 08 I% c0 u4 k& n8 P# y/ @) y$ F9 }9 G
For j = 1 To n  w) U7 R+ I& n& @
t = t + a2(i, j) * x(j)
" Y5 F  W2 Q# T* K3 l% l! ANext j
1 Q1 @: {) p6 _% u( e( J) ?t = t - a2(i, n + 1)
) [) k& o, \& }: ]0 W% {Print Spc(5); "第" & i & "行:"; t
/ O+ s8 E  d/ z4 @  L, h2 R% KPrint5 i2 r* ^1 j( K% H+ i
Next i7 B' o) k6 y. d$ X/ m

# ?1 M- W+ k( J" W0 `# SEnd Sub
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
如果我没给你翅膀,你要学会用理想去飞翔!!!
zqyzixin 实名认证       

1

主题

5

听众

1818

积分

升级  81.8%

  • TA的每日心情
    难过
    2013-10-14 10:21
  • 签到天数: 78 天

    [LV.6]常住居民II

    社区QQ达人

    群组小草的客厅

    回复

    使用道具 举报

    0

    主题

    3

    听众

    24

    积分

    升级  20%

    该用户从未签到

    新人进步奖

    <p>您的程序我没看&nbsp; 但是我用FORTRAN 90 编过 </p><p>唯一注意的是高斯消法是有局限的 </p><p>1计算量大</p><p>2不能克服病态方程问题。</p><p>不知道您注意没有 </p><p>另我有FORTRAN 90&nbsp;的选主元高斯消去法的程序。</p>
    回复

    使用道具 举报

    0

    主题

    3

    听众

    22

    积分

    升级  17.89%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-10-28 05:03 , Processed in 1.269680 second(s), 69 queries .

    回顶部