QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法# {& U7 _) Y9 l. W& I" l3 j
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single) i5 J/ {* C# z$ [: a7 P0 b4 j
i = 1: j = 1: _/ G7 E4 O  h5 p9 q2 E
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
3 b( _' y' K+ C# a# F9 SReDim Preserve a(1 To n, 1 To n + 1)
' h5 z1 ?; @9 i* E& A+ P8 PReDim Preserve l(1 To n, 1 To n + 1)8 `8 F( ^% x' `3 F/ Y- ^$ Z  N
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single( l2 d, W7 J! Y+ i( T
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(): L/ P2 D0 \2 E0 J4 H
For i = 1 To n
8 O5 D" B; Q2 m1 u( l  x, x  c3 r: OFor j = 1 To n
3 Y5 ]. }- ?! ]$ }a2(i, j) = a(i, j). m- G. x/ y! {3 G0 [
Next
0 ]' ~# P4 f) p4 S, R+ O& N. ~* e6 kNext '将a()的值全部赋给a2()
9 ]5 `4 }3 a3 m: \( C8 h* W+ ~3 Bm = 01 W; W, ]' d" B* x, ]
D = 1
" {+ e4 K) N% gReDim x(1 To n)& j: r; ?; e  ~/ u. e
Print "--------------------------------"
/ a- Q+ j0 e8 Q* l' j+ v$ k2 pPrint "您输入的增广矩阵如下:"
( B6 s6 S: I! [* V8 H3 U# p3 `3 cFor i = 1 To n2 _8 \8 V& }& `/ Z5 E% J& ~- i" D- e1 ?
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))# L+ G* n( x, M: r5 W" ^
For j = 1 To n+ p; n* z3 Z* _4 Q$ ?: ]5 T
a(i, j) = Val(Left(s, InStr(s, " ")))
, H& s$ q! {. @s = Trim(Right(s, (Len(s) - InStr(s, " "))))
$ b7 I* n4 f; T, cPrint a(i, j);
  c) k% S: H( g% B, m! fNext
0 _9 S" y! ]- G: z' K! Ga(i, n + 1) = Val(s)+ D) i4 S0 [+ F, J0 `* h
Print a(i, n + 1);* \' d5 u0 R: _; W3 V9 D
Print9 W; n8 Y% L0 Q7 N- Z# c! M
Next
/ D" W2 j4 D# i! Q3 R
: k3 T: v/ X! w' PFor k = 1 To n - 1 '开始消元. e& ~2 H" ^: q
If a(k, k) = 0 Then
. o  p# y  S1 m; \MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"! K3 X8 B+ c% U- K
Exit Sub
& Q* E3 m; g5 z$ S7 qElse0 s1 N/ f' \% m" I
For i = k + 1 To n4 t/ F, \" G+ d
l(i, k) = a(i, k) / a(k, k)
2 X% g5 |) \' `: e; AFor j = k + 1 To n + 1$ d* W- ^; _* j7 W7 ]
a(i, j) = a(i, j) - l(i, k) * a(k, j)
) b1 z1 L5 F5 e6 @, BNext, |9 X5 z5 k1 C/ e0 f. @
Next1 V- z5 n3 ]/ Y1 W4 Q7 x& _
D = D * a(k, k)! C/ v7 R/ E6 W; L2 |& U+ W
End If* u7 E  `, Q0 B5 m6 s
Next k '消元结束
, A* p* {' }2 a' O& r* o( m4 W% |: G- tIf a(n, n) = 0 Then- J) W& U: Q; i8 w  Y4 m. {8 e0 w# a
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
$ _# p) t( N2 C# Z& kExit Sub+ P6 k$ F- z) t; p5 E; W' ~: }8 l
Else
0 Q7 @% H- f: Z, fD = D * a(n, n)
% Y% I0 j4 s" X" ^End If+ H+ ]4 _7 C8 Y+ P& o2 \1 \
Print "--------------------------------"7 v6 u9 G% F: V7 B# W9 f" I+ \3 n' y
Print "系数行列式的值是:"; D
- h) k( @+ v6 Z* fx(n) = a(n, n + 1) / a(n, n)% _# Y) z1 y6 y4 U- u0 q  B
For k = n - 1 To 1 Step -1 '开始回代
0 J. q. L: x% J3 v) M( ~& k) u0 XFor j = k + 1 To n5 ]+ g0 G( m# h7 _$ E
m = m + a(k, j) * x(j)! @1 k  v3 r5 ]# Q) I0 ^
Next j! p. }4 o! L+ y) _+ c1 e
x(k) = (a(k, n + 1) - m) / a(k, k)( z' c, h" v& `) _
m = 0
2 f- B. E" E2 U8 HNext k '结束回代
/ d$ ^9 n/ V, \' h/ ~6 i$ e$ `
' S' S" M4 j0 C# u6 @Print "--------------------------------"
/ B. s% [. f9 z  iPrint "方程组的解如下:"
6 @  y* Z# m" _# d) e2 d
% s( c; Q4 t( p* [' r, RFor k = 1 To n+ _2 y; e* J/ Z$ u1 K8 \
Print
* z5 ~4 U8 {3 P: ^Print "X(" & k & ") = " & x(k)
! J) ?- A9 ^' i$ x2 j' ONext k
2 G5 M  A* Y  L4 q% sPrint "--------------------------------"
* T8 H$ K8 k& f3 ]$ lPrint "其中各行Ax-b="
4 i! A7 f- s$ D9 Y5 G# [Print, ]( D- B7 t7 m
For i = 1 To n8 g3 x: r( f7 L  f# l% f
t = 0
2 T" K  F, {& ]) Z  yFor j = 1 To n$ v4 u( r# k  F
t = t + a2(i, j) * x(j)
, b6 Q( ^9 Z* [/ E( U5 ]Next j
1 j2 H! I- a) S- P, e" tt = t - a2(i, n + 1)
! a' S9 v, I! {: \# nPrint Spc(5); "第" & i & "行:"; t: N7 T2 Y3 V4 \( ^$ ^! X9 F
Print& d# X  a: A3 U- K; Q+ K# \
Next i& M) v' [$ o! [+ ~7 q2 k

4 O; `1 P9 h0 V- {End SubPrivate Sub gauss_Click() '高斯消去法; f. J8 x7 V) |# i0 Y6 D
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
8 r9 L$ t& [2 x+ W' Ei = 1: j = 1
* I7 t3 |( x3 F# n  d1 ]n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
% ^! k* T$ o9 J, Q7 J* _/ i/ J. \ReDim Preserve a(1 To n, 1 To n + 1)9 i, q( }5 s! M" B0 Q1 x8 X
ReDim Preserve l(1 To n, 1 To n + 1)
, r) b* A0 `8 ?% GDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single$ `5 J, B! j1 e" x* a
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
/ s! i; _+ c/ D7 h  q5 T+ d. EFor i = 1 To n
5 P9 i0 \6 c' Z4 Q$ a+ NFor j = 1 To n# P4 `4 R2 O& d6 B
a2(i, j) = a(i, j)8 i5 E, `* W5 E5 y1 e
Next4 E, a6 Z4 ^( t. w: d5 J/ \
Next '将a()的值全部赋给a2()- M$ j0 ~' q: m6 n% h8 ~: p
m = 00 _/ t0 H5 F! f/ `2 S% H1 v
D = 1
7 `+ p* I3 Z* t; G' EReDim x(1 To n)
- }2 D% _+ \0 k! sPrint "--------------------------------"+ D% _/ P( O  @% c
Print "您输入的增广矩阵如下:"
( z) x7 u6 ?$ b% B7 u+ F3 sFor i = 1 To n( b$ k% r3 {7 a3 P
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
! ?. R$ t4 z0 U9 n+ GFor j = 1 To n
& H3 i8 B9 l$ ja(i, j) = Val(Left(s, InStr(s, " "))); j; a  N1 m3 v: h% ^8 _/ Q, K
s = Trim(Right(s, (Len(s) - InStr(s, " "))))" h! O, P8 g4 T; o
Print a(i, j);4 c4 I" b" T: G' e9 O
Next
9 `9 z3 a, N: n, P) D2 ?" Z  ?# }a(i, n + 1) = Val(s)! V( H+ Q; @* P* i4 W# N
Print a(i, n + 1);8 ]3 Y% q7 \1 a8 c# B
Print. W9 |' d3 Q# f+ {
Next' S/ a$ ^0 C$ d1 R) s
" @  C$ t. B# Y- d
For k = 1 To n - 1 '开始消元; K5 W9 @( x- N* [5 y& N- X% b6 A/ @7 B# D
If a(k, k) = 0 Then
) W0 g0 `8 _+ G! |MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
0 d/ A! W: U- }. p0 J/ {Exit Sub4 {0 s0 J# F9 ~* {! z) }0 \  \+ a
Else
$ V8 a6 l- t: m- c; _2 s4 G0 }+ j: E% V$ vFor i = k + 1 To n
( A6 q2 \7 H/ O9 f) T  Ll(i, k) = a(i, k) / a(k, k)
( G/ I/ n8 r' b! \6 y9 ~2 F& QFor j = k + 1 To n + 1/ [! b7 I0 m0 l4 Y3 K
a(i, j) = a(i, j) - l(i, k) * a(k, j)9 q- E; n. r* F2 Y' O
Next
& D: E& u  B" HNext
3 |6 W) v: X* u7 T# A) MD = D * a(k, k)- ~: T8 }3 @# D$ f, \9 i# o
End If8 x) F  N1 i! r) j
Next k '消元结束5 }! G: n3 z6 Q' U3 @
If a(n, n) = 0 Then
6 {/ u+ I. C( r# |( o" rMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
6 _# {- L9 C/ T, c: ~8 cExit Sub# C1 J" |$ w: Y1 R+ [9 D
Else" f8 L6 M9 a" N, L# n
D = D * a(n, n)
, f1 s2 z+ B* u) i( j) Z' jEnd If
. v4 `) z! g0 K, ~7 n2 [" u% lPrint "--------------------------------", C% b) A, D+ d
Print "系数行列式的值是:"; D
/ v8 Q. a  e1 h0 K( M4 \" r4 _x(n) = a(n, n + 1) / a(n, n)
2 U. \7 O1 X. }# ?! [. x" FFor k = n - 1 To 1 Step -1 '开始回代4 x1 A1 q! C  j% ^" c3 M
For j = k + 1 To n
, T1 |- ^. a/ J2 Em = m + a(k, j) * x(j)5 G% h, G# f8 F- f0 L" c2 s
Next j0 @4 q+ j0 U+ }( D3 K2 V
x(k) = (a(k, n + 1) - m) / a(k, k)
) q6 j. _$ G! [; z, t4 M3 pm = 0
; c# {5 o; B- f4 N5 \. uNext k '结束回代* }+ x5 H) v; Y3 s! K

6 P0 W9 A* I' {" M( aPrint "--------------------------------"
; _  Z% H, q2 EPrint "方程组的解如下:"
) P3 R4 R+ j2 H2 ?& G6 D$ U% c
, g% @$ W: q) \4 u! a: PFor k = 1 To n
; x1 P. H7 O% R. _1 j" e& g5 {Print' e, E( j+ S4 p2 x! A  n0 @1 K
Print "X(" & k & ") = " & x(k)" N6 v; y& O! L" |) }+ c
Next k1 g" ~! ^$ d/ @) }
Print "--------------------------------"4 a$ F! \, }, o8 K  t. }) K0 x  m
Print "其中各行Ax-b="+ X8 b/ e& {5 @4 z8 L- s8 Z; M
Print& K7 c) I7 z, P/ U6 f3 d$ ]
For i = 1 To n
, X& @1 Z* p& _1 bt = 0$ O- r1 \- y2 E7 W( \
For j = 1 To n/ ?  R7 r. u# ]$ t4 g; z
t = t + a2(i, j) * x(j)5 d  q! H# z& w; [8 n3 [) c
Next j  l  ?& H8 s# L; w$ y2 X5 i7 [2 z/ z
t = t - a2(i, n + 1)
2 Y# ]) N% J5 s2 u0 S/ A/ b, F+ wPrint Spc(5); "第" & i & "行:"; t5 U& j* D6 M' m/ j) ?1 {! j( I
Print  t! Q' K% `2 o, o+ h
Next i
% _7 j8 L! N& ]/ K+ |/ R' k% u- p+ n5 `: j% R( W& b2 W! h* e. e
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>
回复

使用道具 举报

4#
无效楼层,该帖已经被删除
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:34 , Processed in 0.464467 second(s), 73 queries .

    回顶部