QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
: N5 G! g$ D4 n. P* j6 d- x& \Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single7 x! }! ]0 `0 i3 J# z  y
i = 1: j = 1& \8 a3 f, e. ?" v
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
4 j0 v+ m+ |& ]' ~$ mReDim Preserve a(1 To n, 1 To n + 1)" I4 E7 [, Q8 ?3 M7 N
ReDim Preserve l(1 To n, 1 To n + 1)
& C8 n; d& Y, N" Y9 ~Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single5 R4 g& @. {! S# a
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
+ V/ N4 e# O8 _( \: y+ p3 ~For i = 1 To n" N* X8 @4 R, E3 r% |- I
For j = 1 To n
' Y1 O6 r( j' ]' R% x9 Ea2(i, j) = a(i, j)
( u. z% O0 L  h- a6 Y# q! ^Next5 E$ [- \. D7 x
Next '将a()的值全部赋给a2()) v  p3 Z$ [1 F
m = 0& I9 V% N3 T1 g7 `! M
D = 1% i( g4 p* Q6 g# \" E
ReDim x(1 To n)  t9 }) ]& h) ?9 N9 Z
Print "--------------------------------"4 F6 D, s" J1 g; v9 u9 U: }/ Z
Print "您输入的增广矩阵如下:"
9 b: r+ O# F0 \; C" MFor i = 1 To n8 L8 d3 |6 n2 A
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
) ^( ^3 u4 b4 L3 c" `' s) sFor j = 1 To n9 Z$ J! A" k5 g" @/ H
a(i, j) = Val(Left(s, InStr(s, " ")))
0 R' ~' G9 ~& p1 N1 ds = Trim(Right(s, (Len(s) - InStr(s, " "))))) ?8 U+ c% g, G* K7 w, e6 k
Print a(i, j);
- A5 M$ k* d: ?0 L4 ^Next
1 F  q* q5 W. \/ @a(i, n + 1) = Val(s)3 O# {  k! T! c8 m- I1 ?* N- I" F
Print a(i, n + 1);5 C2 V: b3 q& I& I! d
Print* `2 D% t( f  [( A9 ]5 D
Next
* u0 a7 l3 I+ t) S' n7 j* G. J+ [5 u4 n# N' X# Z* [
For k = 1 To n - 1 '开始消元9 @, F' ^& ~) ], X- g3 ~
If a(k, k) = 0 Then- B% d6 G% Q. n  E) o* Y) C: c+ D
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"% n- w+ W& t( |: G/ k! {# Q4 S
Exit Sub
* Q& M: e% w6 T! bElse( o4 O; V# d) t
For i = k + 1 To n
6 h( Q# h4 r# U; Z6 r0 Yl(i, k) = a(i, k) / a(k, k)
% T% Y9 R$ j( s  oFor j = k + 1 To n + 1
" _0 z& R6 d5 i0 F, m1 na(i, j) = a(i, j) - l(i, k) * a(k, j)
$ [1 D* s4 B' ^  u! `# W: @Next' v1 g/ g6 z* F
Next- N  U+ z$ C9 G9 o- ^" M& F* B
D = D * a(k, k)6 ^; p1 N" e# l2 h3 b4 P
End If
1 p0 z! @* r: Q8 s7 R" {0 gNext k '消元结束
1 W& ~+ H! J- C5 O3 s: zIf a(n, n) = 0 Then/ b/ E- P# p% r8 X* W# U# M" A2 V( |
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
# E- c2 D/ O" q1 H% iExit Sub+ I2 W3 O& R0 @2 W. _* V
Else
4 \0 `" S9 `2 B6 CD = D * a(n, n)
; v" g3 l& W7 r+ C* a0 ?. H' PEnd If2 J% @) n1 R* a; U2 |4 {7 A) B
Print "--------------------------------"$ E: }% ^: G. M7 M* `. T
Print "系数行列式的值是:"; D
, k! j3 s) p7 ?: N" J& nx(n) = a(n, n + 1) / a(n, n)
4 z7 i; [! s4 F5 b0 WFor k = n - 1 To 1 Step -1 '开始回代
; ]2 p! V6 I0 `& \7 Z/ b  y3 F  ^& KFor j = k + 1 To n" {3 I* z5 A8 e# z
m = m + a(k, j) * x(j)
; v5 z& S4 u- X* X( Y/ N" L7 u/ zNext j
. B4 [' A! }3 L/ S" \0 M7 R8 D4 Kx(k) = (a(k, n + 1) - m) / a(k, k)8 T. r( m: Z8 d/ r, n8 [
m = 0
0 V. w0 O  L2 g3 k& \/ j/ HNext k '结束回代2 v) @. l. l* r( p$ I, W
0 h2 n7 g  e8 s$ M
Print "--------------------------------"
% f1 s) Q, d( D! OPrint "方程组的解如下:"1 O2 j: {( A# b

2 V/ e3 _8 G; N8 n  D( hFor k = 1 To n. \! k9 s' L) o; V' C$ Z1 K
Print4 S" e$ J5 Y& y, u# A2 |  u
Print "X(" & k & ") = " & x(k)
# |- o1 ^: A0 x8 K$ u$ J; o0 {7 HNext k3 ]7 t$ u8 _: @  R6 H. y9 H
Print "--------------------------------"! ~( g) X" f& ~4 s, {  }* ~2 x" d9 m& i
Print "其中各行Ax-b="
) \4 e9 G% w, T; TPrint3 a" z7 a3 V6 ^- _- R
For i = 1 To n
9 K- \# I( }5 Q. m% At = 0
) S( x& @& p# ^  d6 B2 ]7 r" U* NFor j = 1 To n
# l/ x. _; i  e3 c# ot = t + a2(i, j) * x(j)
7 F" M. K( U+ `  Y4 c" W# G+ INext j
' e3 J# t& L+ @9 Zt = t - a2(i, n + 1)
% D# {5 V- F# m, q& h% ~- |Print Spc(5); "第" & i & "行:"; t8 r/ C" I! W# H' Y# F  ^
Print
8 [' I% F; U7 `" `6 wNext i
8 W* p( J9 D# c! R: F" U& R6 E* ]4 p
End SubPrivate Sub gauss_Click() '高斯消去法9 E! z3 S( V1 k! O. h0 W
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
! m- q1 \. X# ^8 v/ Z9 Q: n# \1 Li = 1: j = 1
' V% Y. k5 s* q5 `n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))" F0 x$ |* p$ H, _# g& ~2 Y: l2 I
ReDim Preserve a(1 To n, 1 To n + 1)
4 N# J8 c+ `  _3 |, B+ F& TReDim Preserve l(1 To n, 1 To n + 1)
1 L% y' _+ K- `, ^5 @6 O" ?Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single6 C; z, Z" \* e
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
7 e/ l! _9 Z( t1 D* r' Y( c6 J. n+ mFor i = 1 To n* O9 Z: Y! ?( O, H( k% L+ d
For j = 1 To n
2 \, h6 g' m, r; Ia2(i, j) = a(i, j)
& a  X& ?4 E% i) B' vNext# C8 r, X5 }1 [) X* o3 @0 [
Next '将a()的值全部赋给a2()2 d, \4 l' B% U3 E3 X. ]( B
m = 01 d4 ^, h4 \+ |/ D
D = 17 |" w7 o4 G9 q/ e0 ~9 `
ReDim x(1 To n)
. E) H* @7 |- G# w& ^( EPrint "--------------------------------"$ `1 f- L. h* T% ?, B. s- Q; s3 }
Print "您输入的增广矩阵如下:"
9 x( c2 y0 R2 I8 o: z$ K9 x: DFor i = 1 To n7 B- y: t3 ]2 ]. X% s
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))# ?, Q+ C3 l( M
For j = 1 To n
0 M0 x9 U) q2 w" i% y2 wa(i, j) = Val(Left(s, InStr(s, " ")))
- r- V% q+ W/ {8 _5 P7 [! vs = Trim(Right(s, (Len(s) - InStr(s, " "))))0 d; t8 O0 k0 K, h3 i- K8 n
Print a(i, j);% U" @% v+ P  o( y5 d
Next
( x+ D/ b) W( ?! Ta(i, n + 1) = Val(s)
$ [* }7 M2 E; N% ^; T  h0 [7 }+ MPrint a(i, n + 1);( C  a9 S  l( w3 L
Print
' d( K4 x& P1 G" ONext% Z1 K  a* U0 `2 \1 K- _6 J3 A0 Q/ j

. y9 D# x0 ]$ h7 T9 O! |1 R  PFor k = 1 To n - 1 '开始消元( Q5 V7 L- w) K+ b7 y
If a(k, k) = 0 Then! x9 k3 _9 t' |; g* H; W- c
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
  n& D# w7 [6 b. @. i- dExit Sub& q9 R4 g  Z. u3 {. V' [. {. N3 C
Else" ~! p2 i* E! c; x- W
For i = k + 1 To n
3 l: s7 l" [; \+ {5 W& v. ^l(i, k) = a(i, k) / a(k, k)
/ \2 W- l" E# T3 F; J$ X# ~+ A4 q; p! qFor j = k + 1 To n + 15 h5 A5 |1 j) A
a(i, j) = a(i, j) - l(i, k) * a(k, j)2 [+ Q: D$ W  D& c4 q
Next
' a: k7 P( O& `$ u1 l7 VNext
+ h, ~) v0 b8 z$ M, P$ z. X3 E7 l8 pD = D * a(k, k)7 J0 n; I1 b2 j; ?; m* B
End If
3 o6 e. i8 \- D! UNext k '消元结束
. b, {( ?( c) X2 N, `% z$ QIf a(n, n) = 0 Then
$ p; L: W6 t4 Q: CMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
2 ^& \- b' M% Z: b6 ?, a& @Exit Sub4 c. b# ]6 `4 U1 R# S9 N$ R
Else
% K( F, \4 {7 XD = D * a(n, n)- }0 Q2 N: r% I. G6 A5 _
End If* k3 _3 J  P" h/ d
Print "--------------------------------"
3 X* c  [' l( y! c/ `2 V: TPrint "系数行列式的值是:"; D& A) A3 K" Y& P! r* e1 m+ O0 Y
x(n) = a(n, n + 1) / a(n, n)
3 K4 ^+ s. h  e5 u6 t% U! ZFor k = n - 1 To 1 Step -1 '开始回代6 x9 u. k- ?1 Z* x! P8 a9 E( S1 {9 n
For j = k + 1 To n
" M& K3 H- o+ `" vm = m + a(k, j) * x(j)
5 ~! b# ]1 X' h7 _8 [% H. gNext j  w/ G- P; K2 p- u8 Z* N( X: u
x(k) = (a(k, n + 1) - m) / a(k, k)
% N: @; M9 ^" y; m$ pm = 0: o0 J& s  k$ |0 }3 `
Next k '结束回代
1 P+ U4 k/ I: N
$ S5 J8 O- y- ^' pPrint "--------------------------------"
* }7 S/ I4 Z' w* z: Z1 R. ]1 w  PPrint "方程组的解如下:"
2 a7 Y) j& r( q' S( [7 D0 a$ f2 b7 P3 v' B- z' O- C( `5 o
For k = 1 To n
' y( [8 Q+ o0 r5 U& [Print
3 O# f: i6 m) r+ iPrint "X(" & k & ") = " & x(k)
% {7 i& {( D( ]' i; w: A7 x; LNext k
% y7 @. b3 t& x" ]. N  iPrint "--------------------------------"
) W7 C, ]1 D2 t1 QPrint "其中各行Ax-b="
7 f  P, B0 i; F6 A8 w" B2 VPrint$ w! J7 z; Q5 E7 J8 O5 o$ M$ Y7 A: ?
For i = 1 To n7 b& @1 j6 k: y, p" p
t = 0
2 D9 }) h! z$ `For j = 1 To n" @$ v9 C: D4 M! n' J) I7 k* r" w
t = t + a2(i, j) * x(j)/ b  _! T/ M$ Y; u; X
Next j9 j8 H" E1 L5 }" U) {- W8 o
t = t - a2(i, n + 1)
- x! M3 _0 x5 H. QPrint Spc(5); "第" & i & "行:"; t, F: U9 T( U- n
Print
, _3 @/ `# e& }& y% D8 rNext i
) f7 @- J3 }4 ~1 b' Q9 `5 _. E+ t0 ~9 ?
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-5 11:40 , Processed in 2.979302 second(s), 67 queries .

    回顶部