QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
, h) N* I9 W" `1 \' k$ _Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
2 o5 y* q0 Z7 G% Z+ W# Ii = 1: j = 1
* U) }& N5 d+ [( ?0 W# O8 Xn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
8 P" L  W( X: M" K. T0 eReDim Preserve a(1 To n, 1 To n + 1)
- i7 Y" Q" E; Z7 ]7 k6 j# E% V0 ZReDim Preserve l(1 To n, 1 To n + 1)/ W4 d2 a9 o5 j: [: b
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
  r. E) B. \! T# M4 [/ xReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
0 l; }$ t( U0 E" OFor i = 1 To n
, k5 T3 R7 ~' QFor j = 1 To n1 i9 Q% v0 h- P- J; a7 J- F! p6 t
a2(i, j) = a(i, j)
) \+ _3 K' a7 J6 z- F# ~8 {# pNext
- \$ X  |4 E4 _: A5 z8 Q( L3 NNext '将a()的值全部赋给a2()+ m( N5 `$ x8 a3 R0 ]: ?2 Z1 [  z
m = 0, t5 f: \( F! Z# Q, P) U. |
D = 1, H1 F) P! ]( F' G
ReDim x(1 To n)/ O5 `. U2 @4 l  c0 l8 \2 ^
Print "--------------------------------"
& M4 t6 V5 Y# @9 }Print "您输入的增广矩阵如下:"
2 Y" K& \  O3 }, Q' p, CFor i = 1 To n
* v& m1 B8 y* V0 G' _s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))' C$ Z, l' E: M" n# x0 p
For j = 1 To n
  M; Q. [* f! ]. S  ia(i, j) = Val(Left(s, InStr(s, " ")))
# ~: G8 u0 z5 y2 O, Fs = Trim(Right(s, (Len(s) - InStr(s, " "))))' _& S/ u) N. P, X+ _! d3 d+ W1 j
Print a(i, j);8 o+ J# ]. w# ]5 {8 \2 A
Next0 A" E7 M* Y9 B$ E
a(i, n + 1) = Val(s)
! `# P/ I# K4 X9 N  V  EPrint a(i, n + 1);
, a$ C* R' c, W4 i( WPrint
+ f: ~9 B! i! [+ \Next
. X( y+ j" S  L* V* F) ~3 ~* r
1 T. m2 y) v$ T! o; ^1 V& gFor k = 1 To n - 1 '开始消元' R* r# L3 p5 w+ r  T" @% Y8 z% A5 n
If a(k, k) = 0 Then
' K1 [  c* L1 \% wMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!". e0 ^7 d& R5 ^/ @8 V* |2 @
Exit Sub  a2 H* {1 ]# U: O$ X0 D
Else
) d. u) S. e' ZFor i = k + 1 To n
( C8 e6 {( d1 ll(i, k) = a(i, k) / a(k, k)9 K6 b/ n" t2 U
For j = k + 1 To n + 1
8 T0 X4 ?4 v& a- _/ j5 q0 G7 Ja(i, j) = a(i, j) - l(i, k) * a(k, j)
8 P! Z1 s5 S3 F: X; q& c7 B8 f1 R+ bNext
( r7 D- O) K8 h  C+ ONext, d/ d7 Y1 ~# D4 |- B. y# k1 P( x
D = D * a(k, k)" c4 W) }8 v% g/ w4 |' _4 \
End If9 ~/ N$ a. O2 @
Next k '消元结束
/ [/ E, t- n4 T& ~$ uIf a(n, n) = 0 Then
  f' ~; J1 ^+ CMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
  A! Q; f% F4 A5 Q$ H. OExit Sub
- y- |$ I( f9 e( o& z  [5 e' EElse$ U/ o2 P* u. ]$ j2 z9 c7 a* ~8 g
D = D * a(n, n)
/ K/ E* g5 Z, uEnd If
, L5 T" l& R# q0 B& x/ GPrint "--------------------------------"
1 F5 r; `, u; o1 t, V) o& UPrint "系数行列式的值是:"; D
# l. Y! M1 X6 e. ]x(n) = a(n, n + 1) / a(n, n)7 V4 W& ^  f5 g- ?1 x$ V% |. m
For k = n - 1 To 1 Step -1 '开始回代+ X9 s# a8 U' u3 F% J
For j = k + 1 To n% t6 k( w9 F1 @
m = m + a(k, j) * x(j)1 E; m/ B1 O$ [
Next j( Q/ |3 f  U, b* E; z" h( h% [
x(k) = (a(k, n + 1) - m) / a(k, k)% f1 E9 c* y  w# e+ i
m = 0$ z" b* p& Z$ z9 |- @1 _# j# z
Next k '结束回代3 e, W: M8 n% B% h

8 Y: g  P# a( s4 @0 UPrint "--------------------------------"
8 F- ?2 z$ d3 a( s, BPrint "方程组的解如下:": R+ X6 G3 a8 W* e3 i
7 y, V- \2 U) Y  e. g( `
For k = 1 To n
( [! A- K; m. E) }" R" K' @8 rPrint3 a% l: i4 o; C3 e1 k
Print "X(" & k & ") = " & x(k)% Z, s) E* x% O  L0 u8 s# d
Next k  G& y$ {6 V/ D* |( h: c
Print "--------------------------------"
' e3 E1 X1 H, r! {8 h; TPrint "其中各行Ax-b="7 ]2 K; |5 X, |5 h2 h- z
Print
5 L& r: ~$ F$ V- xFor i = 1 To n' ]. D' \" g& x; X8 V2 \
t = 0
! D, j- [' W. v4 Q. ?For j = 1 To n
1 e. L! C6 h% i  st = t + a2(i, j) * x(j)
1 w6 K( R1 P) @4 uNext j
( {( k5 Y( _( ^, Ot = t - a2(i, n + 1); R( g% r1 p) D; `
Print Spc(5); "第" & i & "行:"; t, ~0 f# z8 y: s0 S9 g
Print
7 I- p6 D: h  |) pNext i
, x& t8 v7 t4 V' G$ ~$ L
* R/ y9 j: H" a# gEnd SubPrivate Sub gauss_Click() '高斯消去法5 {2 L+ R- }2 @/ h8 J
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
; {: W0 ?( A2 T3 H4 u; T" y* Mi = 1: j = 1
5 W) f6 x+ |4 ?" q0 ^  S+ [* R1 Xn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
! z( G3 R7 D3 |& I" jReDim Preserve a(1 To n, 1 To n + 1); o3 N- \/ V% f3 K5 m
ReDim Preserve l(1 To n, 1 To n + 1)) U+ r, M+ C! C6 w# @- o; i4 \
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
" G; C8 x( t5 r( gReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()( R" k. x& N) J/ S/ `8 @6 q* o- a
For i = 1 To n9 d6 [" e0 P* C7 b
For j = 1 To n' t8 e8 X! k" y2 @, r
a2(i, j) = a(i, j). r6 @: {: ?, \
Next
, N% g5 z  u) w0 b% _/ dNext '将a()的值全部赋给a2(), H7 g) k& P7 c( ~
m = 0
& ?- U3 y+ L0 _) @" VD = 1
% r/ m/ M# ~2 yReDim x(1 To n)- r* Q: X5 e( w7 t, R, m: r! F$ k
Print "--------------------------------"' U; _: L; B0 s# _& @8 w
Print "您输入的增广矩阵如下:"
( {" s' M& J7 @) V" C5 nFor i = 1 To n) r, `5 K3 H0 R( |3 G7 q: \2 u
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
% S/ A7 v# \+ N: J6 `4 oFor j = 1 To n3 R2 ~7 s  x( K2 b$ |
a(i, j) = Val(Left(s, InStr(s, " ")))% W2 R, l3 o9 c* w% e
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
$ s& ~- B/ k- z- B4 [, FPrint a(i, j);
. y7 ^+ w, q- S/ Q/ h  R( ?Next  V( ?# j* T" K% j/ U: N( c' T
a(i, n + 1) = Val(s)
$ w# c" r, [, UPrint a(i, n + 1);
. Z4 A" y7 h! Z# z! cPrint
5 n) G( j" g/ k/ S8 XNext
$ Y/ Y2 u) m" ?" Y* j
% [! D: e  W% l; sFor k = 1 To n - 1 '开始消元0 E7 N  o( p& K  D6 r( r5 W
If a(k, k) = 0 Then8 D. d* `. \0 O6 r& P: I+ u; {* Z4 V
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
2 _1 D; H1 M1 p7 M; x! d6 E7 a2 YExit Sub1 g, C' V$ B, @; P
Else) |: j( X, m0 R/ N+ z
For i = k + 1 To n
8 d6 |8 z4 f9 Q8 T. ml(i, k) = a(i, k) / a(k, k)
/ Z2 E+ T  J* aFor j = k + 1 To n + 1
( D6 q* x; v% _7 h+ O: Sa(i, j) = a(i, j) - l(i, k) * a(k, j)
6 v! Q# n3 V+ u. V8 X7 E9 {Next; P( z# K0 O3 ^) \+ a6 U+ {7 }
Next
$ k# v2 a' g% e  _2 \5 W, kD = D * a(k, k)3 K0 J: B1 _6 H+ q' ^9 i- A+ M
End If% o8 K% O* |* z* e8 z
Next k '消元结束0 A3 D  J$ l9 a+ l" ]/ L
If a(n, n) = 0 Then
$ D' r/ ~. t$ I* s( |% i3 aMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"" x0 ]3 j) W7 i
Exit Sub1 N- ~0 K* i. X& l4 m
Else
. ]2 x2 k% l, v6 ~4 C  @D = D * a(n, n)
9 ^- k& f1 S. M0 |, L6 q; A$ _End If! [3 e1 G' M/ P
Print "--------------------------------"0 y0 P7 J9 E4 T5 k# b% {7 ^$ C5 r
Print "系数行列式的值是:"; D
/ g9 \! ~' _2 H: G( H4 s, cx(n) = a(n, n + 1) / a(n, n)
1 }! E! p: i, I4 Z# L+ bFor k = n - 1 To 1 Step -1 '开始回代+ G' b8 ?3 ?) {4 ~' M/ {5 ~- O$ G
For j = k + 1 To n% h& r' w- f  c( D! x
m = m + a(k, j) * x(j)- l' i  D- K# }
Next j! H  f* s. a! s! j: n
x(k) = (a(k, n + 1) - m) / a(k, k)( H( t6 i$ {  m2 `
m = 0
: C! g9 ]( s. W# _5 gNext k '结束回代; I; T2 a- A: |0 N& `) B0 Z
7 ]5 C4 ?& a3 `  N' J
Print "--------------------------------"6 C2 |8 W% }5 u/ e3 D+ d! t
Print "方程组的解如下:"- l( r0 @  ^( @% U% K2 |9 b2 A$ M1 u
7 K- i. l$ a7 h4 }; [
For k = 1 To n
% `: d2 M9 E* K# H6 tPrint( K' j+ G4 J+ j* q) ?$ e
Print "X(" & k & ") = " & x(k)
2 q. ^  B( i& e8 L# \Next k
. Q: X6 r4 [7 _" rPrint "--------------------------------"
: h9 R/ h- a, Y* x' N/ T& G! v& lPrint "其中各行Ax-b="
9 d8 K( h( k6 O, j9 XPrint  A9 w$ Q5 i. a+ Y8 f
For i = 1 To n, [# q  h, t2 P  ?3 B6 d9 }: X
t = 0' r6 t3 F, n2 k, Z
For j = 1 To n
& W  G3 Y$ f: H0 C' o5 q; e$ {; }t = t + a2(i, j) * x(j)
7 d, U* ?2 ~) y) \) D$ X, @& N, JNext j; n: S+ R' @  u6 u  ^
t = t - a2(i, n + 1)
! q0 a' m2 E' M; A8 q* K; U4 U+ _9 h2 FPrint Spc(5); "第" & i & "行:"; t
& g4 J+ c% w! d. F3 IPrint
$ ]* Y& ~9 Y1 _4 YNext i$ D8 ?: `& Z3 H3 x1 U
- Z; W  S- V- K1 G, ^9 Q
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-5-31 00:21 , Processed in 0.352180 second(s), 68 queries .

    回顶部