QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法5 n1 [9 K/ D0 Q: k+ l! Q, z
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single7 g" X4 Z) c' }' D: n
i = 1: j = 1/ ~* Y; h. f) R/ u3 V7 x# m
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
4 ?  Y+ N* s. \ReDim Preserve a(1 To n, 1 To n + 1)
- d" C0 t+ w- ^3 m' B  W" FReDim Preserve l(1 To n, 1 To n + 1)3 c9 _, m* U: c5 V
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single# ]1 f, G7 z; c. e' g% }$ I
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
, _, ~2 V3 L) D3 m7 E& E8 pFor i = 1 To n
* g7 F7 F, e$ J+ k" T& fFor j = 1 To n
4 f- M) s% q! q3 X6 Ua2(i, j) = a(i, j)
' I( E0 z1 [8 a8 P! G# v/ gNext
' ?0 H8 p: ^/ t% yNext '将a()的值全部赋给a2()! C" N6 Z4 ~4 z; G
m = 0
) d+ u& ~5 n/ c" J- k: c6 E" c, }D = 1& g: i; C1 `9 E- Q0 e# s9 s2 W
ReDim x(1 To n)
; E5 d( O/ X5 ?/ H% x0 A% v" V, DPrint "--------------------------------"( d9 K  Z1 n8 \% C3 Z
Print "您输入的增广矩阵如下:"$ ~8 Q( B: n5 q3 K0 o
For i = 1 To n( B  r: ~2 i+ ]6 O2 G% N
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))& I6 Y" J! K, l% D0 H9 u+ V
For j = 1 To n" E( l  M6 B1 R5 v# H! @
a(i, j) = Val(Left(s, InStr(s, " ")))
9 S) ~$ \* K( l! B7 z5 Q, Ys = Trim(Right(s, (Len(s) - InStr(s, " "))))
+ R1 w" }% U0 v# O0 ~& y0 ePrint a(i, j);
4 y% n' t0 T) T# B/ X/ ^Next+ S% e# A" B# W# ^6 e% |
a(i, n + 1) = Val(s)
, E, P5 Z! W$ F: p  R$ FPrint a(i, n + 1);+ p) ]" _) |! E/ N0 R* p  h9 D
Print
9 p, f9 K! |0 D$ Z2 s* yNext
6 ?( ~) o/ Y  X* r- J
! J% X* o6 D, o* Z$ uFor k = 1 To n - 1 '开始消元. l$ K7 @  j6 x) P% `% [
If a(k, k) = 0 Then
& }. g! e6 b5 F- X! AMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
( b+ I9 W* x- S* `8 x  Z9 x) [Exit Sub
; i0 Z) M( ^: Z' y/ @" b4 zElse
, V" d$ v# _3 O) a* ~& n: _For i = k + 1 To n6 O, A, m! b6 Q4 G! a6 E4 |
l(i, k) = a(i, k) / a(k, k)
1 W! ?; X0 @- G2 A7 `For j = k + 1 To n + 1
0 C" l$ X, f3 M3 Q& ?4 ha(i, j) = a(i, j) - l(i, k) * a(k, j), U  u7 R+ X5 G8 _
Next  H! l$ a4 r! i* G! `7 L2 n
Next
4 ^) y) o4 B' v: R2 @% N$ W9 eD = D * a(k, k)
' m9 ^, A" }6 Q0 b9 |End If6 `$ a2 D0 z) ?: h6 ?
Next k '消元结束
4 U4 K+ v) H1 f6 e1 ~% a. UIf a(n, n) = 0 Then) k  T; R- F# ]& S
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
) T& ?: O/ c8 C4 b. B$ U4 {Exit Sub
, I+ k) @3 G( `7 ]7 K8 J- |% YElse
! K1 C( q$ x- G: UD = D * a(n, n)
( m/ o0 v/ J% b) k6 w3 v' N& k# `End If
! n2 k, t8 {$ G( ?0 MPrint "--------------------------------"' z  u9 a& `7 w4 [4 }# d! V4 r4 Q
Print "系数行列式的值是:"; D* k0 d5 t1 k" O* |/ f0 e" w% L4 V
x(n) = a(n, n + 1) / a(n, n)7 e  L# v- F! b6 W7 r
For k = n - 1 To 1 Step -1 '开始回代, r& g! B1 j  T( t" H) q# \  E" }
For j = k + 1 To n
* c* u) c9 ~* x7 f* |; F* V( G7 wm = m + a(k, j) * x(j)
! A! q9 g, f! @$ ONext j
7 t9 ^  I9 Z) m# F; _x(k) = (a(k, n + 1) - m) / a(k, k)
; m, b: [7 i( i# H! d3 {! b  f) Im = 0# ]! U3 L) y+ b- }
Next k '结束回代
( R# ?  n; F5 Y
+ N6 b8 j1 p3 h6 APrint "--------------------------------"/ y" I, i1 R, Q* d8 m
Print "方程组的解如下:"0 g: d2 _, Y' }6 D) p& k) n
0 n1 P! e5 u- V; H) G5 K/ J& x
For k = 1 To n9 {$ X7 k+ m  X
Print1 f  K" p1 x  F+ G, L" r" T
Print "X(" & k & ") = " & x(k)7 p& ]$ @! F/ b. k
Next k- T$ U( o' q) z
Print "--------------------------------") K0 r$ k) c  h! v
Print "其中各行Ax-b="" S) ?' }/ h1 D+ I' }& e
Print
3 s  {" v1 F1 m! e8 Q1 O+ y: gFor i = 1 To n
. @; J* x9 D5 X* O- |t = 0' P+ w" J" y; X# [, P! T" L
For j = 1 To n
1 E$ r( L! q# c0 b, ?& l1 c/ Mt = t + a2(i, j) * x(j)3 H- C& V; t1 Z0 L3 \
Next j$ R( T6 u( }7 r
t = t - a2(i, n + 1)
" j, ^7 q) x5 m% Z! [: Y: SPrint Spc(5); "第" & i & "行:"; t/ m! I1 T$ x$ X/ l) Q1 {. H6 [: m* G
Print
6 o" X0 t$ z7 X4 _0 }) N. {" _Next i5 _/ v1 N7 ]- A) e0 w8 c

% U$ w4 T. Z$ B8 OEnd SubPrivate Sub gauss_Click() '高斯消去法3 j$ D: R1 R+ E0 D
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
. j! z8 M1 [5 vi = 1: j = 12 _! B* g* {" P6 ~9 f: Q
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))3 Q' H6 F* i( J1 V
ReDim Preserve a(1 To n, 1 To n + 1)1 ^  k# \3 j6 \4 B- z0 ^7 m" H
ReDim Preserve l(1 To n, 1 To n + 1)2 n& z4 t0 q; h
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single2 z. d' N1 H  Z. S
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()% h  [( g& r/ o+ p' f9 z* W* @' ~
For i = 1 To n/ u9 y7 D$ A% o" p
For j = 1 To n* D/ \6 ?' O. W6 p0 p9 b
a2(i, j) = a(i, j)
' }: Y# V" K8 F. F, W' jNext, X- {" {7 Z6 L& Z) c! S3 @3 w4 k
Next '将a()的值全部赋给a2()( L2 _- O& m  @8 [( L- ^, T
m = 0
( l; |2 y: c5 |+ j0 GD = 1( \7 k  O  V; u& S/ f/ }
ReDim x(1 To n)1 u* i7 |; @6 E1 [
Print "--------------------------------"
. ~2 g1 k, b* D, ]0 M# W' pPrint "您输入的增广矩阵如下:"
  O8 a0 C7 G+ {For i = 1 To n
  G3 ]- B1 C* S" ^( |2 F8 vs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))# C& y1 @3 ]! v% n1 j7 Q- a9 [5 K
For j = 1 To n
$ _  z) P" _7 U. n4 Ra(i, j) = Val(Left(s, InStr(s, " ")))
+ |5 h7 t* q7 X7 \9 Hs = Trim(Right(s, (Len(s) - InStr(s, " "))))' @4 i; q7 N% l. h! n4 k2 @
Print a(i, j);# W! }/ _: _& n& Q) @# T9 x* e
Next! u  Z5 D( `6 g
a(i, n + 1) = Val(s): P7 N! t4 T4 B- j8 G
Print a(i, n + 1);. f% w" E+ w( q( o
Print
3 R" W8 p6 t3 ]Next, `8 j9 H* K$ p

7 c" |& v: H) qFor k = 1 To n - 1 '开始消元6 e% L! q; J! H( ]! f- H' d8 L
If a(k, k) = 0 Then
3 ?0 y% z& \4 @; B! MMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
( N" [7 h8 F( t+ y% ?Exit Sub
) t$ J+ I! i* J3 HElse
) l; J) T. _2 K( Y) nFor i = k + 1 To n
- Y) U2 p  N! h7 nl(i, k) = a(i, k) / a(k, k)
! j9 C% ]$ |* ~; e+ X) V0 H# uFor j = k + 1 To n + 1
" x6 s. R9 j# g) |- l& Fa(i, j) = a(i, j) - l(i, k) * a(k, j)9 X& ?2 ^) w# e5 `0 E
Next
0 T/ G3 X% J6 o) {! e2 ]7 JNext
; g+ e- O  X0 y" p& x6 E8 ~D = D * a(k, k)
2 c* H2 _0 Y' H/ oEnd If6 r2 E3 r; B% }. s
Next k '消元结束
3 o. R: d. D+ u: |: zIf a(n, n) = 0 Then+ ]7 ^& r- v  P2 G; G  w
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"0 Y$ S# S; a" k* {- a# z7 `
Exit Sub+ |2 o/ h8 \* {) g' [
Else, P# P6 G: h# ~! @/ U2 s
D = D * a(n, n)9 q+ H. b8 r6 b* ]
End If
* E/ X; o6 ~/ E$ d# [Print "--------------------------------"# w9 A2 r& |7 R0 B7 S8 |" p
Print "系数行列式的值是:"; D4 I7 Z% @, S( X: x: y) o6 ]( [" C
x(n) = a(n, n + 1) / a(n, n)0 B& o, X+ G" x2 w9 [6 c
For k = n - 1 To 1 Step -1 '开始回代
6 q! m) t! A- U( w  qFor j = k + 1 To n
4 ~! Q( [, g: c% o) m6 hm = m + a(k, j) * x(j)1 T$ t1 w5 V. r
Next j
& j! d7 z8 c, o8 I( P8 W5 T0 z; Dx(k) = (a(k, n + 1) - m) / a(k, k)
# b/ _- H0 K! }) f1 q) @4 Em = 0' S* @5 y9 z" T, t* F' F4 B
Next k '结束回代. q  B6 c" c. W! I

: {) B, b7 Z; N! ^0 y6 ?Print "--------------------------------". m9 ~9 v; V/ {/ u
Print "方程组的解如下:"7 ^2 D+ B( G/ `# t$ O
* I" U$ T0 P$ ^: H0 Z  e
For k = 1 To n' ~; \3 b7 h9 F7 b
Print
6 o8 |& ]& u  D0 T& _4 I& R6 V7 KPrint "X(" & k & ") = " & x(k)
. g; `5 y9 @. G2 G& ONext k
3 u! E. O: m6 ]4 g( mPrint "--------------------------------", t3 |3 n; V% R# R, A
Print "其中各行Ax-b="
- F, b, F& B% |! o" U- ^Print6 l8 R$ B) v. m, A: ]+ X
For i = 1 To n+ e  s7 n# A! D2 x7 q. w' a3 H
t = 0+ U' l  k3 i8 v4 l7 Y4 b0 h! F
For j = 1 To n( S4 R6 M/ B7 g) R) d; _$ _
t = t + a2(i, j) * x(j)% n$ f, s1 `; b5 _! x; N6 l
Next j
# Q5 D0 H2 r, g. vt = t - a2(i, n + 1)5 @9 q$ [- m5 c" g2 F, s( Z
Print Spc(5); "第" & i & "行:"; t7 N8 X) c# q! L4 n, z) N2 M/ u
Print
4 }! R# y0 {) q3 S/ Q  p8 SNext i1 W# n  ~+ H& p
& J: w  R7 N; T& B3 D
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-9-19 21:44 , Processed in 0.475224 second(s), 67 queries .

    回顶部