QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法' e1 @& W/ I/ c0 R% v/ I2 q2 T; y9 |, J
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
/ u, s2 U1 R6 W9 li = 1: j = 11 T5 I+ h: N# n
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))+ f/ H& G! a$ |2 J" b' S
ReDim Preserve a(1 To n, 1 To n + 1)' {- L1 C0 w9 ]* x! N( v7 Y5 V
ReDim Preserve l(1 To n, 1 To n + 1)0 m! m4 _: N, O% W# W. Q; x
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
/ F  ^# _6 }, k! C- UReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()1 v: B( R. U+ `
For i = 1 To n
/ U4 O" E* k0 t# U; V1 @9 dFor j = 1 To n
+ J& ]% o! m& m2 H" Va2(i, j) = a(i, j)
( i9 D1 h* F: ~2 l( a7 MNext. f1 ~2 L( d  I8 [9 M$ r9 J( U2 V
Next '将a()的值全部赋给a2()! N3 [9 Z5 @) e* v  Z8 ?
m = 0
; x7 x* N% \# o% W6 ^7 AD = 1, x' O3 ?* F6 N8 E9 a; u2 f
ReDim x(1 To n)4 d0 ?8 t7 n/ Y4 V- t
Print "--------------------------------"
# h6 {5 c7 U8 {Print "您输入的增广矩阵如下:"
4 `$ @0 j4 B9 A' @8 A8 }3 BFor i = 1 To n
8 Z% a9 i1 c* Es = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))  \7 J! I1 D* @% |) q- U( h
For j = 1 To n2 r6 g7 D& y! r+ Z
a(i, j) = Val(Left(s, InStr(s, " "))); Z, Y$ @. |" D0 d- X' y1 Y1 n* u
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
. }8 R8 s, G* o  T) _% UPrint a(i, j);
8 W' i, |7 W) H2 Z4 RNext! y* T0 K2 F- ^
a(i, n + 1) = Val(s)! j2 V7 l" A0 S9 `' w- R
Print a(i, n + 1);3 T7 \9 }" ?( [1 y
Print8 X1 O$ w- p* ~5 n: w+ Y9 s
Next
* Z. C: J5 s- R, ^
3 g$ w: l' b6 B& |. sFor k = 1 To n - 1 '开始消元
) a! d* G- V- _5 U+ `2 u& {( B  b5 uIf a(k, k) = 0 Then
* _, }( M8 K6 ^. Z* pMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
  u* G: E5 [" w/ k! ?Exit Sub
8 \7 A. }0 @" e1 CElse
7 e( d# {. {# r. zFor i = k + 1 To n
  E6 Y: S% t/ f  h- F3 g3 K, [l(i, k) = a(i, k) / a(k, k)* `4 r+ z" \  h; m! P
For j = k + 1 To n + 14 Y9 D" n" a6 c3 [1 M  H- i3 E) C
a(i, j) = a(i, j) - l(i, k) * a(k, j)$ p6 X5 H+ I7 v; v; G& n
Next0 e- ^! k. ]  o# V8 w% S) h/ {
Next0 Y! D5 q- S; v: H" @) s: ?: n
D = D * a(k, k)
' }  a0 [8 Z# ~" I% }End If
" z. U. F* ^7 F# _( g! U2 d( H* h4 t7 YNext k '消元结束; n3 ~( \, R6 L
If a(n, n) = 0 Then8 O. o1 G. K* \+ ]+ L' X# h
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
% l. K0 I. ?- r4 O2 E  E: JExit Sub; c7 B/ T" z/ i  B5 g; y
Else4 |5 Y6 a. Y: B; D, T/ R. R# ~
D = D * a(n, n)
' i1 u# e  z( U3 X* @4 jEnd If2 `" o9 T* m; N7 f
Print "--------------------------------"$ o/ ^8 y% ^* n; ]
Print "系数行列式的值是:"; D
% `5 B1 g' V* R; c8 Yx(n) = a(n, n + 1) / a(n, n)2 B3 O% U" D# Q- M* Q
For k = n - 1 To 1 Step -1 '开始回代  w9 o6 I$ U+ c/ R: [$ ?9 E
For j = k + 1 To n% [9 q+ V" m! d; h* ]
m = m + a(k, j) * x(j)
+ r  {; v2 H7 o7 q3 H  hNext j
8 E' d9 u* \( c/ ]  A% ]1 x9 Kx(k) = (a(k, n + 1) - m) / a(k, k)
9 y6 t% y4 h3 v% fm = 04 X, U" D, g* y& S. x( i
Next k '结束回代
* I; x6 Q, H7 d0 J
& }1 K7 ~' t0 z" ~# dPrint "--------------------------------"
* U/ y& ^" v6 n* ^6 _Print "方程组的解如下:". g# X9 T; n& z
7 O# W# V5 R2 }8 g3 L' b
For k = 1 To n- }2 a+ p& W5 V, ?
Print
% [( F2 u/ b+ c! M, L; yPrint "X(" & k & ") = " & x(k)
+ N+ \9 o& l+ N) v- S/ tNext k
. Y3 F0 j& w* I4 ^$ YPrint "--------------------------------"# {# u5 w- e. s. Z3 ]6 A; X8 o7 D
Print "其中各行Ax-b="
2 i: u- `% F7 M, }) m/ O' z) d9 \Print
% Y' B; d* C: [: V  d- _% _; T' yFor i = 1 To n# @" ]- ^0 X" v0 o' m6 g# g
t = 0
8 d# Z; L) N3 V) P- lFor j = 1 To n
# |) Y" Z% M( s, E* d7 y  o6 h# m: ]t = t + a2(i, j) * x(j)( `8 R& K9 R* A% h6 r" G& t
Next j
! d4 M, c' l' `( S. \# Nt = t - a2(i, n + 1)
9 E9 R; T7 {/ U: b5 V9 b& ZPrint Spc(5); "第" & i & "行:"; t
7 \; j3 g1 z! v; S7 E! APrint
+ j3 }% c1 E: y3 N. oNext i. ?; x$ v/ {# @8 J8 |  W
9 c! _; Z# l! C7 C. s
End SubPrivate Sub gauss_Click() '高斯消去法
2 b1 {/ S" H/ A, v# }7 WDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
1 ?1 U) r; d! R, t2 ^7 h, T) vi = 1: j = 1
- s7 F  f2 V; |8 t& @n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
9 \, I; A! s3 D/ E! [/ |/ I7 oReDim Preserve a(1 To n, 1 To n + 1). r$ v6 z. E' N3 W/ P" _  K
ReDim Preserve l(1 To n, 1 To n + 1)
) w2 G# N" z) d  m5 U0 VDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single% D: `) W' r7 q$ `6 P
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(), }" |% S3 h& F
For i = 1 To n( y" c6 E" C) M0 z
For j = 1 To n0 B) h8 W# \3 @
a2(i, j) = a(i, j)
% h2 x' i& M! `  C- z3 R* iNext
7 ]1 e# ~9 h& e+ ^" A( h+ ONext '将a()的值全部赋给a2()( i7 W1 [" M8 \" v0 r* I" R
m = 0
. ?4 `' j4 q7 J4 ]( E! xD = 1
" P; f: K% X' n% o7 C& m% [7 gReDim x(1 To n)
* M8 v% C$ d% x; e9 G0 _Print "--------------------------------"9 g) `* ^$ f/ _) @- s  e1 c
Print "您输入的增广矩阵如下:"
7 S5 G6 l8 O  `  l6 nFor i = 1 To n: M. X/ y" J# p
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
- j" b  s3 w7 o/ v' [For j = 1 To n
- w( u+ O5 K' ?; F/ Ba(i, j) = Val(Left(s, InStr(s, " ")))  N5 T, M/ O3 l6 }9 z) {
s = Trim(Right(s, (Len(s) - InStr(s, " "))))% d& n+ y( Q1 H1 D+ s$ K
Print a(i, j);
8 X6 u$ C7 p$ y0 j" Z! [Next- P: b9 O) l# d7 b2 ?
a(i, n + 1) = Val(s)
0 P/ N& W" K$ `- t) x1 Q, ePrint a(i, n + 1);3 o) u" t3 N9 [" B- W/ f
Print
. A9 y- v4 \# N; P0 wNext
$ o- y' f- {# f5 z( u  m" q4 N3 R+ N6 f& a! e8 @
For k = 1 To n - 1 '开始消元
/ V) v) u8 F* `$ y% {2 {# _, K+ ]7 ?If a(k, k) = 0 Then
1 p& H+ _$ M( `% d7 W% |MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
. a( T7 I  ~5 }5 ^! I4 SExit Sub, \; U; e6 b$ X1 R7 H
Else
( k7 Z( `/ G* M& [0 OFor i = k + 1 To n
/ |; L1 ~5 B: ^l(i, k) = a(i, k) / a(k, k)
8 s: u  f* }/ M4 u) B" M2 B6 F9 Z9 P7 mFor j = k + 1 To n + 1, `. f% _# R% t$ `4 [
a(i, j) = a(i, j) - l(i, k) * a(k, j)# ^0 ^0 w% s* i1 u/ F+ h) p, m
Next8 `8 W  ^9 `- d( d
Next3 l; U* F% ?. @8 i; h4 l) a) G
D = D * a(k, k)+ p4 \- p8 P' o2 ?  F, Q3 P
End If0 M& h, l; J0 Z. N& l
Next k '消元结束! r$ V0 W3 o4 `! N- ^/ u1 Y
If a(n, n) = 0 Then
. p8 D) o: o5 d$ HMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"; J( D* a- r  z
Exit Sub
- {2 f5 N+ Z( r/ w) ^; AElse
' M: P- a" _" B/ q( Y) L/ JD = D * a(n, n)
1 U/ S1 D: `4 Q. |, gEnd If
9 E+ n* k& v- u  U6 d9 K. ~7 I0 rPrint "--------------------------------". V2 V6 @5 u' y3 b! H
Print "系数行列式的值是:"; D0 J( x$ L& A. k2 y% T5 [
x(n) = a(n, n + 1) / a(n, n)
6 _, z+ f- }7 H' YFor k = n - 1 To 1 Step -1 '开始回代
: o8 T1 V) e5 N, Y& I" b. XFor j = k + 1 To n
8 j' a7 @( C, L7 T/ F8 Rm = m + a(k, j) * x(j)8 r+ R2 l# ^" B, K- H3 c
Next j& j- F6 T$ N7 `4 R- a8 J
x(k) = (a(k, n + 1) - m) / a(k, k)
& z  V" ?& l1 v  A& }" y5 w% j, ~m = 0
7 R- a+ _8 O6 y2 r. rNext k '结束回代
" r1 G% W. T- s" L4 Q1 e+ w% h4 |
$ K! R  m9 `4 E* |0 T$ l5 r* ?Print "--------------------------------") X* r/ V) H# R! M* a# J
Print "方程组的解如下:"6 R0 ~8 M% ~" J& Q9 N
( o/ R+ ~( \5 ]% D0 c0 {4 }
For k = 1 To n
$ a+ v7 Y& w# k$ \Print+ _  \6 h% V* _/ W# s/ m. K, y: `1 }
Print "X(" & k & ") = " & x(k)- O8 ^" s; \/ J0 ~6 ?* r% B
Next k  C8 R$ u1 R; r. Q5 U# ]8 C; @7 u: Q
Print "--------------------------------"& O6 F% f, d9 o! n# D1 w  k
Print "其中各行Ax-b="
0 `, z, p2 Z2 s/ x4 SPrint
* x& y* L% C( t9 h; \6 e- `For i = 1 To n
. {- p0 c7 U6 yt = 0
" K$ a: n4 D8 t( i2 {For j = 1 To n7 E: K4 n2 X0 |# v7 M. d1 S; |$ Y
t = t + a2(i, j) * x(j)
7 W1 r# j2 L; M  \. l5 t0 F8 WNext j9 ~$ s& a* E. n% ~6 M3 p0 t% W+ S
t = t - a2(i, n + 1)$ v/ O) d6 P, D
Print Spc(5); "第" & i & "行:"; t
( o& i* p  h' P$ k/ S, M9 YPrint
# A$ ?0 ?2 P! S  R3 hNext i
+ Z& F1 P5 ~  O1 @, X# ?/ b8 g& F  L% h" d; R
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-1-3 14:37 , Processed in 0.428056 second(s), 67 queries .

    回顶部