QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
5 n, Y* L+ a" r& w" jDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single) H" f: I9 y- V* S" c2 c7 }
i = 1: j = 1
+ x# Y( |$ f9 |( C2 Bn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
! r* R& g" |- }5 h* }, oReDim Preserve a(1 To n, 1 To n + 1)
" x6 m- f4 V8 W# gReDim Preserve l(1 To n, 1 To n + 1)6 k& ]; `5 I) x) |! W1 m  o
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
9 x( y# e6 S! AReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
9 ]1 A% O: \4 z) k7 J* N9 n$ \- BFor i = 1 To n
: `, M& @% e5 SFor j = 1 To n( C' O8 r# J4 q0 }/ O
a2(i, j) = a(i, j)! y% j% d0 k: v/ d8 Q7 U
Next
4 M5 A; O; \- wNext '将a()的值全部赋给a2()
5 E1 g! C5 u) w2 B6 p! z( Km = 0' K0 @. j: I, G( ^
D = 14 `' e/ \7 b! `: Z1 g& I8 Q
ReDim x(1 To n)9 w$ x+ _& ~/ I
Print "--------------------------------"
$ b% l) u, _4 i- P* r1 Z0 A0 UPrint "您输入的增广矩阵如下:"
  g% W; r6 h0 C1 L$ N4 G. l( vFor i = 1 To n
+ a) \" l6 r! T7 O; ^! |  gs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))% X/ R4 _' }$ i0 V/ d! B5 m9 ?
For j = 1 To n
" q- A, f4 u1 ia(i, j) = Val(Left(s, InStr(s, " ")))
; _* |2 ~0 g5 ws = Trim(Right(s, (Len(s) - InStr(s, " "))))
0 @6 H7 X' \: t% ~% M1 ?% E+ hPrint a(i, j);
: O' U! M; P9 D8 [9 j2 [1 J+ g; kNext. M4 P, _$ N7 g2 z
a(i, n + 1) = Val(s)# P: z. j) r+ g+ [
Print a(i, n + 1);$ X8 i  [1 q$ q6 f" Z5 B
Print" g" q# e2 w3 ?. U: q; B2 Y9 r
Next
0 e7 `7 P% N9 s; B/ r( L* m( v3 B6 P+ w- @6 Y2 v, `
For k = 1 To n - 1 '开始消元
% p2 a+ t" w* E3 [, X0 a3 UIf a(k, k) = 0 Then
- \9 H3 k1 [+ {! o. r' xMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"- x8 z, \) ~  Y4 O# J  e! J
Exit Sub7 m6 K  N# d8 h$ ^5 q$ L9 m
Else  b- l" T: a8 m" H, `) e. x
For i = k + 1 To n
* T, [: p! C. o- V) f7 U  n# g$ z6 ?  @l(i, k) = a(i, k) / a(k, k)  v# s% R. V! G* m; j8 w9 Y
For j = k + 1 To n + 19 o2 i/ E$ d. H0 z# `4 K
a(i, j) = a(i, j) - l(i, k) * a(k, j)7 K; m! s3 [  G2 E5 O- q7 M
Next
  G! x6 e0 j3 Q: D  D% a7 n8 aNext
. K3 n3 u7 G+ sD = D * a(k, k)" [% @. c- F9 d4 R% Z* }5 m) t
End If* I+ J/ C) \3 D( N: i1 s
Next k '消元结束0 N% A+ }! p( H, F1 Z$ ~+ [/ L8 v
If a(n, n) = 0 Then
* Z! G. d; @# d2 e8 `% ZMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
$ U3 Z# A$ H! F/ X! i8 ^( A8 k! nExit Sub5 t8 e& K7 A. N5 u
Else: o- F' Z. B2 o$ \, \) g- X
D = D * a(n, n)( x, M5 q$ O& H- W. Q1 o/ b8 L
End If0 E& B2 X  ^# H# s8 Z8 z5 F
Print "--------------------------------"
! B1 v; n- b! ~4 {Print "系数行列式的值是:"; D
0 i' D8 f& y. X4 cx(n) = a(n, n + 1) / a(n, n)1 ?# t( h; p* W# Y5 P2 X
For k = n - 1 To 1 Step -1 '开始回代
) H; _( p  ]/ X2 m; b2 c  v$ A3 SFor j = k + 1 To n8 S/ {; l+ m+ |7 k! n
m = m + a(k, j) * x(j)
6 V1 L8 v" s4 f( y) @# I+ dNext j
0 K* }! b7 V$ M7 I& S0 T0 c4 rx(k) = (a(k, n + 1) - m) / a(k, k)' y8 ^. {2 l2 I( n, ]0 x% e) f7 J
m = 00 ]& G# {3 n  t) a) V
Next k '结束回代- x0 V  O" G- u: H" @. h: \
# R2 Y+ s0 L0 ]
Print "--------------------------------"
2 i. {) c% F5 v& {Print "方程组的解如下:"7 z! }) M  K5 F1 e
- u+ ^2 u/ T! h
For k = 1 To n
5 C* K/ d1 F% `$ VPrint
/ `! N5 Q' t5 l7 yPrint "X(" & k & ") = " & x(k)' z! J- d+ R3 J: h: O
Next k
! g& S  B  y2 DPrint "--------------------------------"+ s' ?% ^* [0 v* n3 S8 l! o
Print "其中各行Ax-b="
; |: e* O2 c3 A. wPrint6 I9 o6 s: X! {8 N/ @7 Y5 b& U
For i = 1 To n) K+ @/ F$ d8 T; h  V
t = 0$ @: `& r6 J9 R
For j = 1 To n' \; Q" W' G. J4 D: x$ A" x( Y
t = t + a2(i, j) * x(j)
9 |7 r7 y( c% u5 \( n$ ONext j
8 f% V7 `0 h+ D3 J2 P, yt = t - a2(i, n + 1)
: C: C$ w: J- h* G) D1 HPrint Spc(5); "第" & i & "行:"; t& z8 V" N, R, s" ?2 ^
Print. o2 j1 }+ v8 Q, Y$ `& G. f" D6 H; e
Next i
- b0 y, `; h( l8 t: L
+ s) c5 r. Z2 [" O& eEnd SubPrivate Sub gauss_Click() '高斯消去法
, z' Q" E9 V2 Y# L& nDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
) M! P; Q4 Q" s1 i+ c- ei = 1: j = 1' v$ {  S4 T3 d4 [8 X+ g( P. @( o  o
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
$ Y' P7 W4 U: `. i5 D7 R! M0 @1 J* TReDim Preserve a(1 To n, 1 To n + 1)3 L, _$ g9 S1 N: L
ReDim Preserve l(1 To n, 1 To n + 1)
, g  W9 [; M( m$ _0 J2 K1 ]/ b$ WDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single& t- N& R7 @- f4 e6 v
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
, X! r7 ~+ q+ pFor i = 1 To n
8 ^) t# V8 y; g  p! sFor j = 1 To n. e$ d. }0 R8 [
a2(i, j) = a(i, j)
$ A; E1 x- `4 z7 UNext
, a. c+ M# U* }: rNext '将a()的值全部赋给a2()
0 X$ {! |4 q; h3 Pm = 0
0 ~# n+ D+ S* b" b$ r' d9 jD = 16 _4 E0 ?+ p' E3 j
ReDim x(1 To n)# b- b8 n1 f% c
Print "--------------------------------"
/ ?+ K6 F) M; p. B  b1 ^) TPrint "您输入的增广矩阵如下:"
! `% b' G' h" n" t: t/ G/ pFor i = 1 To n
3 d8 \8 I. |3 S9 Z9 @s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
2 s9 \$ p# W* E* l- G5 YFor j = 1 To n+ x8 f5 p, b, c" C' h
a(i, j) = Val(Left(s, InStr(s, " ")))9 D" L3 v  P. S) T5 f
s = Trim(Right(s, (Len(s) - InStr(s, " ")))), G+ Z2 D7 I0 G: e: V
Print a(i, j);
% X! a$ d5 G8 X; _: J- x1 \Next
/ S, h8 a% q1 d3 ja(i, n + 1) = Val(s). Q, B4 P% J  _
Print a(i, n + 1);
( J8 M* t; c2 W6 c) W1 aPrint% H/ G1 y: c8 Y3 |+ b+ B/ i. ?
Next
% j9 v7 E$ j$ U0 d! C! R$ W6 x# {8 ^0 H3 ]+ R: I3 H
For k = 1 To n - 1 '开始消元
3 E' Z. x& O' W! xIf a(k, k) = 0 Then
4 q  u7 Z. F' x- I* k+ d5 DMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
' \- d3 p( T  ]6 c9 a- ~+ MExit Sub2 m1 j' J* [& w( {
Else  t9 ~% S9 Y& d) [0 j0 K
For i = k + 1 To n: ?9 Q& A& O; z- T, k  W$ @
l(i, k) = a(i, k) / a(k, k)
' U. |' y+ E1 y9 q% N1 XFor j = k + 1 To n + 1# I! a1 t4 O1 c( R$ B9 q3 w9 s
a(i, j) = a(i, j) - l(i, k) * a(k, j)
+ j4 b* ~' H* bNext# B1 l0 t. x. {  m+ X0 p! i
Next
& \/ Q) [5 D" sD = D * a(k, k)
1 r$ G; A$ z# y/ h( [7 d( BEnd If# m" V# y* \  P/ O
Next k '消元结束3 w1 g1 Z5 I+ H) |4 ~
If a(n, n) = 0 Then. ]5 ?* m# e6 y
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
4 y5 U3 v6 ~1 X) P3 zExit Sub
9 X( e0 @* S: ]$ ?. X$ b' a8 {Else, N+ L9 M2 R" @# Q( O, _
D = D * a(n, n)1 X/ b( Y4 c* X4 V" k" W+ K
End If
9 Z0 T) N+ _% M/ T+ Y% q. u' U  @  yPrint "--------------------------------", i7 N& d5 K, O, p
Print "系数行列式的值是:"; D
9 _' ~4 V( B- D3 F( fx(n) = a(n, n + 1) / a(n, n)9 U0 \$ \" Y& G7 U
For k = n - 1 To 1 Step -1 '开始回代
$ j) h* W. e3 f! EFor j = k + 1 To n
) H4 e0 S  w* S* I1 U4 \m = m + a(k, j) * x(j)
) a5 H' p! [* I/ e% Z8 t: q( bNext j" d5 Z/ z& ?" ^/ ]  ^5 v( [# z$ o
x(k) = (a(k, n + 1) - m) / a(k, k)
- O. H2 M8 H6 ^4 Lm = 0
# A7 B) C% d# a- l4 l; H' S5 T: G' }5 bNext k '结束回代- k: M8 j# n. x- x( j
9 ^" E# _: i; M: L2 x+ y1 t
Print "--------------------------------"
7 H" v- {' E+ j  n- PPrint "方程组的解如下:"; @+ I. @, c  W4 C
; s/ X( k& P6 B
For k = 1 To n) \/ @. P6 e( x+ M6 o
Print; ?9 F$ H" @; W0 d) h  W9 ?
Print "X(" & k & ") = " & x(k)+ W. P( s. J6 X7 e
Next k: x. u& ~& K: u1 o* v4 e
Print "--------------------------------"' K/ E1 H/ O0 A! @, j9 A5 V8 K
Print "其中各行Ax-b="+ z  E0 x; h+ L7 O4 W( B- y
Print; Y( j- F& ~3 ?5 L
For i = 1 To n
; Z, T" q7 o+ z6 _t = 0
- g% R0 y$ H3 T* t8 gFor j = 1 To n
! z4 T' j, k, Z$ |, N4 Dt = t + a2(i, j) * x(j)
2 L! B- @2 a: \2 E: J0 YNext j
# T1 d2 i% j! ~t = t - a2(i, n + 1)& C- Q- S3 s3 L  t2 ]- K, T+ @1 S
Print Spc(5); "第" & i & "行:"; t- L5 W8 b3 q/ {% \( }& Z! E
Print
6 R# Q) Y4 k) m6 dNext i
3 v1 ]" E; ?/ z; W
4 A- L  z7 e! b2 D- J; sEnd 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-4-13 20:40 , Processed in 0.449351 second(s), 67 queries .

    回顶部