QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法+ p0 I: \8 |  H
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single" V: E" s; }$ q1 S+ e8 S
i = 1: j = 1# p: E- E, x% W( r3 H* I  w9 A) |
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
: l0 Y/ v/ P. f! i8 o; JReDim Preserve a(1 To n, 1 To n + 1)% I/ i7 }& F2 J' t
ReDim Preserve l(1 To n, 1 To n + 1)' G  I4 r8 X  N
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
5 Q, [1 y0 y; A9 J% M8 D' \ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
! Y9 r+ f) c) c7 [For i = 1 To n
& a# a) @& e, k1 w; g* H2 q; SFor j = 1 To n6 \0 H+ R' {0 V) ]; _. L3 V
a2(i, j) = a(i, j)
2 [8 ]! y; H3 b) q5 DNext
) q4 [& m& l* `. \Next '将a()的值全部赋给a2()
0 o% K2 B( J  |- |; c" w1 i. z8 Bm = 04 |' N9 l3 d9 W1 D5 I" v( K4 k9 \
D = 1. @5 S  W: ]% u& a7 I5 m
ReDim x(1 To n)
' q# h6 `! @1 s  j, R2 bPrint "--------------------------------"4 h- h( t& ]& M9 b! g; K7 k* ^5 t
Print "您输入的增广矩阵如下:"
: F' O" ~) c& i% U7 a+ uFor i = 1 To n, Y9 E" ?5 ^  v6 \- L1 p% x
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
7 @  U8 }9 C) P* g, TFor j = 1 To n
5 W& x8 e; }/ N# s  J5 N- R; fa(i, j) = Val(Left(s, InStr(s, " ")))
" {2 \2 ~9 P" t0 G$ Ds = Trim(Right(s, (Len(s) - InStr(s, " "))))
+ [" W. i& _$ C6 hPrint a(i, j);
* E/ D. H3 X5 qNext
+ t/ E6 r6 v+ L; g9 R0 Ia(i, n + 1) = Val(s)0 F- v6 z# }4 U# u9 z% d3 ^# K
Print a(i, n + 1);. E9 z) o8 ~5 y! I
Print
1 Y8 L3 l& S0 H5 F3 uNext# P0 d0 _5 W/ C! H

! V( e0 s: i7 ^1 L4 VFor k = 1 To n - 1 '开始消元
: _; o' z# U; e. y# C8 N6 gIf a(k, k) = 0 Then
% h5 f: B+ k3 `9 K# n  z' dMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
: y/ K; e8 P3 T% T! FExit Sub
8 M% i$ L" {! d; P9 uElse
& @, i; U7 x% H! ZFor i = k + 1 To n0 D4 ?  V: _9 r' u% |& y" ^/ [/ T2 t
l(i, k) = a(i, k) / a(k, k)
- W: Y- y: M+ I' d: bFor j = k + 1 To n + 1: j8 S" K- g/ r
a(i, j) = a(i, j) - l(i, k) * a(k, j)' |# |7 e* _  H. k! Z6 t
Next( s% y( _; Q% w+ m* |1 |9 `/ C/ \
Next3 V8 h  o3 z2 L
D = D * a(k, k)) {) b8 y" J; z1 P- v1 C3 |
End If! v7 R9 W6 g$ H/ `9 ^/ ^3 a
Next k '消元结束* G- h4 S( L( u/ G- S4 n
If a(n, n) = 0 Then# p' o5 V( K6 H, U& B% Q
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"7 q# Z; G! w8 E
Exit Sub3 S0 E; C3 |4 H: Z- m
Else  C. S4 n2 J. ^! z$ ~
D = D * a(n, n)6 c; J) y$ C0 O2 b+ q# o$ W
End If
1 ~; D+ ?: D0 {% C0 E  T6 |Print "--------------------------------"
' s1 c8 G/ C/ N; }Print "系数行列式的值是:"; D
0 a) u, P1 V% \x(n) = a(n, n + 1) / a(n, n)9 y3 D; h# |/ v2 ^: {% [
For k = n - 1 To 1 Step -1 '开始回代
! g; e2 D( Q5 oFor j = k + 1 To n
( [; B1 X9 Y6 w7 @# L6 W4 im = m + a(k, j) * x(j)
  H3 F7 S" b4 {Next j
4 C$ B# u# H& w+ @# S  u- c( ex(k) = (a(k, n + 1) - m) / a(k, k)
8 G( |* k- L3 J; e: j4 Jm = 0- o  C3 W$ H$ `/ x* }! p
Next k '结束回代
' U% B# n3 g0 k1 z. z4 @# I- u8 @/ y/ s
Print "--------------------------------"% O% n& ]6 A8 `$ D: ^; U
Print "方程组的解如下:"4 ~5 g: x, g1 r9 S: T

  w# y2 }' ^0 F; Q  fFor k = 1 To n
/ P  E: p0 W, C" q" H/ EPrint) g+ m! Q  b/ O7 [
Print "X(" & k & ") = " & x(k)
6 J1 @! {; {; Q1 R: A7 JNext k
' S" k1 T" K- f4 P  `+ r$ uPrint "--------------------------------", G6 _5 {; B- ~/ S2 O! s$ k9 \
Print "其中各行Ax-b="& I( k- H9 g, \$ K
Print) b7 L7 M" b7 ]0 N6 }- [3 _/ V
For i = 1 To n
; k# X* J' I! K: ~1 x4 j8 o0 ut = 0+ a1 N# M9 e) t" b' |
For j = 1 To n
  o8 o4 {( |5 v. |6 Dt = t + a2(i, j) * x(j). _0 q- Y* N9 d
Next j
( b) }. u/ |/ ]; N5 r. n: Et = t - a2(i, n + 1)
6 u+ U- E, A. i8 p: [( G5 C+ D8 qPrint Spc(5); "第" & i & "行:"; t# [1 I% \2 E  [
Print
, H% a# \2 C+ a: J4 |Next i
# u8 Q5 u3 f. u$ }: C
, X; {8 n. F; F" @" SEnd SubPrivate Sub gauss_Click() '高斯消去法
7 M% Y7 b5 Z* J' K0 VDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single8 u9 D2 U) L* S' h- q( F
i = 1: j = 1
# X) i) d6 \3 G  Cn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)). U2 r& J+ ]$ _5 n
ReDim Preserve a(1 To n, 1 To n + 1)
- {; @# P. n: F8 z1 l. Q% z5 ZReDim Preserve l(1 To n, 1 To n + 1). F4 f+ W& Q; I1 {: u
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single, ]% q. ?8 i, U5 i- a1 |
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()( L' `$ q5 A2 }2 ~9 ?7 Z
For i = 1 To n) `  c0 q0 q6 G6 W) B
For j = 1 To n4 z# I9 \2 i: ^1 a, y
a2(i, j) = a(i, j)
5 q; \1 S! l# v- KNext
  p" ~* B2 x+ }/ K* rNext '将a()的值全部赋给a2()
7 }  a5 o% a1 d( x  M& E' }/ Zm = 0
* ~. }4 H8 l9 Y) d, zD = 1
$ ^' G/ ~' y. o& w7 M3 X, XReDim x(1 To n)
& m" t. J) e1 ?$ HPrint "--------------------------------"
# I7 d4 L- i9 U  V. D  QPrint "您输入的增广矩阵如下:"' C1 \  l1 h! E, A; H% _9 v# u: [3 H, x
For i = 1 To n
  R# D: u& _, s/ b: C( J4 _s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))9 [$ v9 u7 \3 i) }& y
For j = 1 To n4 x2 i* F# G8 e9 T' M
a(i, j) = Val(Left(s, InStr(s, " ")))* ^0 C* b+ U  Q, l# S/ s; y, V
s = Trim(Right(s, (Len(s) - InStr(s, " "))))# g, C1 S5 O) G1 y4 ]7 J
Print a(i, j);
1 _% W5 G! O2 k3 N7 V- RNext
  v4 |& P! Z8 ]4 i& pa(i, n + 1) = Val(s)% p1 Z4 Z1 s9 G$ D3 O5 R/ H
Print a(i, n + 1);. n5 G! V6 y0 G) U: r+ Z' m! X& h: ?
Print
, r5 j1 h' {5 i  W9 P! yNext
& A  u# A/ c6 ^. K6 `( y
: t6 ?5 ~! E; D. q6 q1 k4 YFor k = 1 To n - 1 '开始消元) Z$ P9 w* q5 L( J! c$ v% G
If a(k, k) = 0 Then
7 ?. {/ |% r+ l( ]9 _7 vMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
( i! t7 F/ k4 \9 u5 C% g* N! UExit Sub) Z' D% ?. I# `5 _
Else( f! n3 s. u9 A3 O
For i = k + 1 To n% R* I) D4 |/ e4 k1 g
l(i, k) = a(i, k) / a(k, k)
6 {8 ~. M$ n0 {1 z! {+ VFor j = k + 1 To n + 1/ P- _2 N, v  E9 _& y
a(i, j) = a(i, j) - l(i, k) * a(k, j)  e' z5 L0 X7 n: m& T+ f" F
Next
6 q& e" g3 B$ h2 F1 l- m, |" gNext
% P' ?; O3 i0 n2 P0 q3 g, AD = D * a(k, k)
' p: t" H0 ?$ v+ o6 S' YEnd If
) @4 A+ L5 v. S7 E* F! P5 SNext k '消元结束" h4 f0 s" `% A- y  ]% f
If a(n, n) = 0 Then( m2 @9 J: |& S* {: O3 P
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
7 i" ^+ @0 e0 `4 K  J1 x# `Exit Sub7 b, l1 |2 ~2 q2 }& X9 g( M
Else
8 E( V% b$ F; g* U* mD = D * a(n, n)# z* ?7 f* O' k; n3 o2 ?
End If* r# }; H  Z' Y- j5 j0 ]& r
Print "--------------------------------"8 V2 d* T5 E' G4 b, _6 {
Print "系数行列式的值是:"; D
1 F, F; @) V+ w& Z5 qx(n) = a(n, n + 1) / a(n, n)
7 Q' p2 @0 y/ v+ l+ JFor k = n - 1 To 1 Step -1 '开始回代
# x) P1 q. W) c# cFor j = k + 1 To n: r8 J6 Q0 z. y$ A
m = m + a(k, j) * x(j)0 m. R. |3 R5 P) D
Next j
; ?. P* M: ?+ J' h/ Jx(k) = (a(k, n + 1) - m) / a(k, k)
7 M3 i" L: o- [+ [: S/ d) mm = 05 [  G, q: z3 a
Next k '结束回代
  t. o: i3 `# s5 d* d* a" C' B
0 i1 o: ?/ _$ Z, b( [: kPrint "--------------------------------"
! Q6 H- l# m$ {5 L2 D5 o) C7 R. WPrint "方程组的解如下:"% Q" j; \! I9 H/ b% F6 y

" V" I4 n% ~3 M  }& X4 [For k = 1 To n
5 J7 W- U  s7 m4 j# r8 U# K2 [Print& a7 B) |. |; Y
Print "X(" & k & ") = " & x(k)
& {/ i' d7 H  |( r7 i1 r$ pNext k
( J; _* A: ?5 U) r0 uPrint "--------------------------------"
+ F. X2 X2 y! W) {' j' q, x  CPrint "其中各行Ax-b="3 R& M: Y5 q: Z3 S7 p; h' W# a
Print: D1 I) {- z8 N9 b
For i = 1 To n& c1 A2 o6 Z0 c  ~9 |
t = 06 V' w3 M3 B1 B& |8 x# l6 y
For j = 1 To n
/ `5 O* i. }! @6 t0 ]t = t + a2(i, j) * x(j)
7 i9 @; p5 h9 D( u) V  i2 [) DNext j( p' u: A9 e/ K
t = t - a2(i, n + 1)
5 q6 `# }  ]7 R" n7 C% tPrint Spc(5); "第" & i & "行:"; t
( Y0 @) ]; B$ Q' C3 |/ EPrint# C( W1 L1 T0 U+ N% ], [9 ~8 |2 V3 r
Next i1 y' j- M$ ?% G) U

; w6 T4 @! M+ ?2 S) z8 F4 @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-8 23:16 , Processed in 4.034993 second(s), 67 queries .

    回顶部