QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
  a; T1 c! i5 q6 N, z7 F6 pDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
6 R4 x' C% S6 }  y2 I/ q6 qi = 1: j = 1
5 Q+ I$ @+ S, ~; j( ~6 Hn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))7 x5 B+ g" D& ^5 C/ X
ReDim Preserve a(1 To n, 1 To n + 1)( p+ e9 ?: U+ t5 Q% F  M
ReDim Preserve l(1 To n, 1 To n + 1): ^3 V( H4 b  K$ F$ |' w
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
- G( c6 x4 e' G& q8 GReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
8 o+ K  j& N( g9 ~* \  SFor i = 1 To n3 B) b4 P* q2 K
For j = 1 To n6 t/ P( A" j3 |$ P, f
a2(i, j) = a(i, j)" @. ]# e2 e' n8 S
Next
- q  u' F0 x" n) w1 Q3 wNext '将a()的值全部赋给a2()
4 Q) H1 d8 w+ _6 W7 ]" Lm = 0
* W% Y! w7 E9 g. b) FD = 1( z# L) h0 T# W8 h; {0 a; r6 l
ReDim x(1 To n): `0 t& @* m  V7 `
Print "--------------------------------"
- [$ L. Q6 e1 y8 I% s, gPrint "您输入的增广矩阵如下:"
: \0 n. `5 `4 h& NFor i = 1 To n
* W" s  |  |, e3 y/ U& j" L* ns = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))) `; P" u& N$ C$ H2 V6 a
For j = 1 To n
' S% L9 ^- ^6 v6 za(i, j) = Val(Left(s, InStr(s, " ")))
7 X; f# _$ P! T+ n% Z, is = Trim(Right(s, (Len(s) - InStr(s, " "))))
6 A" w& [; Q* g; v, ^2 }( Q1 E+ C: @4 zPrint a(i, j);; T5 \0 V$ c$ X* W5 {  m" ~
Next
2 \$ ]0 v: {- {1 d7 P2 D; ya(i, n + 1) = Val(s)
. E  y! L7 n1 S- L& PPrint a(i, n + 1);$ h/ o; ^8 d& }2 q
Print  d9 g. B7 z! E
Next
. t6 ?4 o% d/ u3 X* J% e
/ j0 A, v/ p+ D5 KFor k = 1 To n - 1 '开始消元
& e5 j& [6 m8 p- u9 L- `. NIf a(k, k) = 0 Then. i9 |  o2 |' ~0 S0 S8 F
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"# b8 I, L/ o6 _7 ^( {- l
Exit Sub, a+ u& `4 s; p6 |: y8 A# o
Else
; O3 A" m- s9 b7 j% M: Q) `For i = k + 1 To n
4 q/ a' H1 _6 v1 L/ k5 z; p4 ll(i, k) = a(i, k) / a(k, k)
  H, w2 ~& D1 V' ^9 C) Y# lFor j = k + 1 To n + 1, f  J( _+ z  w( O, j% ?: c
a(i, j) = a(i, j) - l(i, k) * a(k, j)9 x( ?6 h6 u7 ~7 E
Next" y0 J- R8 F. ?
Next( I2 Q8 Y7 q: j1 f% {% i
D = D * a(k, k)8 j/ m( o5 `. K' A( o
End If; ]) ~7 k/ @, ]0 l
Next k '消元结束
6 D6 p7 W+ ]! V# qIf a(n, n) = 0 Then
" V6 I) q2 L; ?5 V! bMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"' \- w( O8 L1 |1 L! i9 t
Exit Sub4 v# @. K' a! M  y
Else
# L1 O% b, v- o: DD = D * a(n, n)
& H, N; p- |) cEnd If" S( ?- p! f: T
Print "--------------------------------"
2 |) O+ B0 e0 T/ J1 XPrint "系数行列式的值是:"; D
2 C) _; L1 @8 a$ v# j: a% Dx(n) = a(n, n + 1) / a(n, n)
) W2 W, b6 Z& \3 ^9 N6 x+ e1 ]* wFor k = n - 1 To 1 Step -1 '开始回代
$ |8 w/ P8 }: M% F; \5 a- {For j = k + 1 To n
# |: M$ w3 @0 R5 Rm = m + a(k, j) * x(j)
! o% A: \% F( HNext j
8 Q7 a+ T0 J( u' d% `6 O, |x(k) = (a(k, n + 1) - m) / a(k, k)
2 a& u* G, G' ^4 K' M  q% r% Q' y5 u5 ^m = 03 r5 x1 S( i9 p! C
Next k '结束回代. ]6 `  y* {2 S
' b) w5 X; J* c+ w1 S$ m
Print "--------------------------------"5 ]. W! ]8 ~" B! M) Z6 {
Print "方程组的解如下:"8 b) g5 V4 v& Z. x7 U- ?
8 i& V' a* c: e) p- R6 {5 x
For k = 1 To n
4 V; Q9 q1 K1 {+ y8 ?& q" GPrint7 [5 c8 s& A( V+ {" Y
Print "X(" & k & ") = " & x(k)
2 c/ a" H2 X4 T& g, W& ^Next k
# A* l6 o5 b$ y7 s- MPrint "--------------------------------"
) l$ E' b9 a/ m5 q( G; YPrint "其中各行Ax-b="
: M! W3 v4 s9 c/ P8 ^# s- ePrint
. [: X( `+ Q% D- x. b0 F) _For i = 1 To n1 }7 ^5 w/ c( Y/ K6 d) {. V
t = 0  I1 J# ], I3 m: }
For j = 1 To n4 y3 ^" x# V! U/ i3 x& Z
t = t + a2(i, j) * x(j)  ]5 u4 H# l7 m5 H4 C, r
Next j+ p) a  K2 h$ I9 `
t = t - a2(i, n + 1): W- M4 t1 A0 C( z. b+ |9 f
Print Spc(5); "第" & i & "行:"; t) f# J# S- @6 F- P, C
Print1 V4 u4 x+ X& m; [5 q2 N' o# \4 C
Next i
% I6 L6 O" t$ B2 w  N1 T2 t
7 |1 L3 d( g% J& N4 h' bEnd SubPrivate Sub gauss_Click() '高斯消去法0 A* O- i( N7 a; y
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
# M8 r* M9 g% u0 Ni = 1: j = 1
/ q/ F, i0 c" g5 b7 q& R' W9 k$ @n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
7 r; r! s( f+ l; ]3 O& wReDim Preserve a(1 To n, 1 To n + 1)
# M  R/ l8 z7 y& r- WReDim Preserve l(1 To n, 1 To n + 1)3 F" y& z  L9 K7 {# I; z
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single7 l4 N8 m/ q# ~0 ]; Z
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
- g% ~$ I  v0 D6 x0 I- m3 `For i = 1 To n
  f- u5 m% t8 E$ ~. bFor j = 1 To n
( |4 _, ^2 w! d( ]' z6 Fa2(i, j) = a(i, j)
- y4 p/ U+ u' r! cNext
9 A2 |( o9 s; O1 ?- s9 q( b$ x( bNext '将a()的值全部赋给a2()* t4 Q+ @) r: e6 ~, B
m = 0
. q' u% g  k( }; U: q. ^: ?/ ^+ MD = 1
& ]1 C: p- d# LReDim x(1 To n)
" a( k/ v1 }( J6 E6 gPrint "--------------------------------"
, n8 T$ }0 D( D& e$ |0 GPrint "您输入的增广矩阵如下:"
7 |4 Y; x$ w) e. ]" E8 ~  l  f5 tFor i = 1 To n
7 H- g. ^0 B6 R5 }( L  Os = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
0 M3 w2 V3 s4 f% n1 hFor j = 1 To n; B: ]/ G$ v* F2 l  L7 z6 U9 A. q
a(i, j) = Val(Left(s, InStr(s, " ")))
/ ~% y, n  [$ R- [8 hs = Trim(Right(s, (Len(s) - InStr(s, " "))))& g2 L( y5 J# }8 t$ c# G1 [
Print a(i, j);, c+ l0 ^- U7 y* i$ k: h" i
Next
, C% }& A9 Y7 N3 Qa(i, n + 1) = Val(s)
8 j* P8 G6 B# p6 I3 J: wPrint a(i, n + 1);
! i8 z8 A3 M2 E! c! z8 a% lPrint
2 y' B% f$ R2 V4 @9 vNext
% ^% ~6 g$ K. H+ z8 W8 o
% X! A, w. ]3 v+ p/ W- tFor k = 1 To n - 1 '开始消元
, V# q9 z, X+ N* p: L5 ?8 _If a(k, k) = 0 Then2 A4 R% S9 I  |5 u, h
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"  f0 ^' F7 A0 v8 f4 P, @' }
Exit Sub
( M# [4 r, X( ^! Y+ vElse) s  S$ b5 O* m7 z
For i = k + 1 To n
% P- B$ Z& y% D! V5 ll(i, k) = a(i, k) / a(k, k)% `  N, S' ]! Q  X  e; T
For j = k + 1 To n + 1, f# v- l7 F5 B5 W( E' X- X
a(i, j) = a(i, j) - l(i, k) * a(k, j): A9 _+ h( X0 s% m
Next
$ B( }4 m' C2 j' u( XNext$ A+ E/ u3 T& W0 n
D = D * a(k, k)
! e& H  Q* ~4 e8 h  `% JEnd If
3 B# P2 Q1 w0 _+ BNext k '消元结束
4 }7 W- N$ W9 G, r7 r0 |/ p% HIf a(n, n) = 0 Then+ Z+ R1 Y; ~/ K5 |0 S
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"( O7 M* P( P& P: u" v2 Z
Exit Sub% ^% M8 e0 H1 T( o) L1 L
Else+ R2 @" R5 J5 R3 }  S1 `
D = D * a(n, n)4 R# q& C1 o0 x
End If) _* h/ G4 R6 E9 T! m
Print "--------------------------------"
0 c" @' M3 V: ?0 C% m9 A5 P6 `# EPrint "系数行列式的值是:"; D
7 ], _3 M7 o; |1 l3 p: Px(n) = a(n, n + 1) / a(n, n)
! X. t' q$ ^; b+ [" @For k = n - 1 To 1 Step -1 '开始回代7 m8 j6 o) l6 g0 y5 ^0 L
For j = k + 1 To n
; }2 E) ~& N% r/ M  i( d* `2 `m = m + a(k, j) * x(j)1 C7 n+ y1 S" ]6 A, O8 p
Next j
3 F9 N0 k8 A) J( e/ W2 Jx(k) = (a(k, n + 1) - m) / a(k, k)
$ G4 o- H$ A; T; ]* Rm = 0
# Z+ r1 v# x& z& fNext k '结束回代
* T: c% P' |5 y. A
8 f! a3 h% e( W# n, kPrint "--------------------------------"
6 ]& q' m; |8 N( ^% _) LPrint "方程组的解如下:"
$ r4 M- d5 R3 p* B, {' X; Y6 g' T. |. h% e# y. Z" |3 c$ }7 y
For k = 1 To n3 _  o! f5 q# d
Print
# N& J6 W& g% PPrint "X(" & k & ") = " & x(k)7 a" Z! x* n* {0 q+ x7 a7 p
Next k
7 I" I4 Z$ \) O# p: l4 GPrint "--------------------------------"0 X3 E; T3 K' G# J9 \
Print "其中各行Ax-b="
1 g* S2 V* |7 pPrint6 z2 ^* H4 x, s
For i = 1 To n4 R2 j0 L0 B2 f
t = 0
7 s: t4 I: l8 s0 {( W) {6 n# iFor j = 1 To n4 S) a- S0 f) c0 \7 k
t = t + a2(i, j) * x(j)
4 z- ]% v* ?/ [2 [) Q0 sNext j
+ K1 q$ P4 F' F3 ~8 h/ O  W: I5 w' j: h' It = t - a2(i, n + 1)) @1 e7 K0 |0 P) W2 I! \) N
Print Spc(5); "第" & i & "行:"; t4 G) l6 U. _  \$ a8 P
Print
8 S* l$ F( Q$ [; l  y& f; F8 oNext i
4 h$ o2 W7 H0 `" c) V; H- d) [9 G3 C" b, s0 p$ x
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, 2025-11-1 06:18 , Processed in 0.570972 second(s), 73 queries .

    回顶部