QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
0 `  s: C) G0 F, I  u( ]5 mDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
  Q8 H3 _' ?1 V/ @) yi = 1: j = 1+ h9 ?* _; H; }6 K
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
1 C2 b: t2 o$ y" s( jReDim Preserve a(1 To n, 1 To n + 1)
2 o2 U2 L. U4 l; f3 n  mReDim Preserve l(1 To n, 1 To n + 1). r: j' T9 Y! H, d4 k- P
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single% W  O* m# a' s
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()9 `- a% M1 i9 Y* Y, b
For i = 1 To n  p8 w, T5 [5 g2 F, e
For j = 1 To n
! Z; m. b5 b- A/ Z+ B# L! W/ }a2(i, j) = a(i, j)4 z, G. ?: _6 F; H
Next0 I8 B. W* E# f/ G/ q) n; a+ {! R
Next '将a()的值全部赋给a2()
. B# r! H- b1 o7 {- sm = 0
( }& h: l" Q* G5 S. g& W/ nD = 15 R9 P) n3 m0 q- k' J4 B
ReDim x(1 To n)8 p$ ?# N# y" V2 b
Print "--------------------------------"% A" q: G# `6 A5 N, I+ `: [
Print "您输入的增广矩阵如下:"
0 _2 ?5 P* B2 b" Q1 e" p* Z/ {For i = 1 To n
: {7 T0 L- {. E; t/ ]2 Gs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))0 Z0 E4 ]/ L1 G/ r' L+ j: I
For j = 1 To n
/ v' T7 j/ W5 G7 e) \1 w! Ja(i, j) = Val(Left(s, InStr(s, " ")))
% z) U% O' b' E, H  |s = Trim(Right(s, (Len(s) - InStr(s, " "))))
5 Y. v; v' y( O4 ?' t; v, sPrint a(i, j);
9 [0 z& |6 N* S7 `) M/ ]7 Z( n2 Q7 ?* GNext; `4 l7 b3 e% G' l* ?
a(i, n + 1) = Val(s)2 j, \! N5 |+ V; N$ Q
Print a(i, n + 1);6 ]4 j- H+ p  P2 J( G4 H& b
Print4 z3 X% x/ I, v. Y) l" Q( z
Next; l3 a) P0 A; ~( `, Y
5 Q% I$ z6 e' C2 w4 c
For k = 1 To n - 1 '开始消元* L* _! q2 H$ K7 [# h: E
If a(k, k) = 0 Then
0 s0 i& i8 G# B  [6 b6 GMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"/ ]6 I8 e' ]( E
Exit Sub
9 F6 M; B3 u+ j, [' x$ UElse
7 B6 w7 R& V6 {* G* wFor i = k + 1 To n6 C4 S0 c: G: N$ V
l(i, k) = a(i, k) / a(k, k)
' x4 e9 i5 T2 x+ pFor j = k + 1 To n + 1
7 ]4 b2 X' Q1 |a(i, j) = a(i, j) - l(i, k) * a(k, j)) e. C9 F, k  B- i- y* W/ X, ]
Next* ~. L! x& X; x5 _
Next
- e0 B# s8 j2 I! W; _2 kD = D * a(k, k)' k. l; D4 j/ m( p$ z
End If
; i3 L$ P7 |3 t# W; w  QNext k '消元结束/ a# E8 t5 c0 T2 k- C
If a(n, n) = 0 Then2 {1 H5 Z1 k4 q5 I) l" r8 W
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
; X  j" c. Z3 B, |# z+ i/ A# |1 L$ E- IExit Sub
: R6 U$ U+ a, u! \Else  y, M: s7 K+ K, S
D = D * a(n, n)' C1 T# O6 }8 n' N4 `
End If
* A+ J2 p5 m2 BPrint "--------------------------------"
) v% P% O2 E4 b2 g4 ^: I; [; CPrint "系数行列式的值是:"; D
% ^* C- W5 G/ }( v  |4 r) ]9 zx(n) = a(n, n + 1) / a(n, n)' R9 N7 ~( U' @$ J+ I
For k = n - 1 To 1 Step -1 '开始回代
- I  h. j8 h% J2 h' x; Y2 b! vFor j = k + 1 To n2 n: K# s* s. ], F# Q! }' g
m = m + a(k, j) * x(j)6 d7 \& X, \0 @, {$ c2 f' u
Next j! C3 X6 |: a" S9 t- k9 s7 f8 r
x(k) = (a(k, n + 1) - m) / a(k, k)5 A: G& `9 e2 O; P6 H3 Q
m = 0
! h& W- _4 q6 y5 f. TNext k '结束回代
1 d& s3 s( ]1 S3 H/ D& k% f
7 x; O3 R7 N4 v: x* mPrint "--------------------------------"' X. F  h- `* Q0 L8 ]
Print "方程组的解如下:"
: p: p/ }, N$ B' r9 \
3 K# L# L! s0 {# Z8 q; @For k = 1 To n- M6 `% ^; J4 f) a$ f7 i
Print
; k) p- ?+ c: o& R+ gPrint "X(" & k & ") = " & x(k)
3 ^% Q5 i7 b1 YNext k* [* T: i" r3 ]/ r
Print "--------------------------------") C9 R: t# [' G- l: k
Print "其中各行Ax-b=", F( b; Z9 m1 y2 e/ m0 t3 X
Print. l9 j1 P# p, I/ s* z
For i = 1 To n
4 t* B8 D+ S% {5 P0 z$ pt = 05 }5 M) J; R+ Y- K" M3 d+ ~- [9 A
For j = 1 To n
9 Q7 ]3 c0 X$ i3 It = t + a2(i, j) * x(j)
' i/ ~! [9 e8 NNext j
& }  K. F/ m# Q+ C/ O8 s; |t = t - a2(i, n + 1)& U8 ?2 p! m$ V! V6 s
Print Spc(5); "第" & i & "行:"; t+ m  P: i' `2 G: a3 G# [
Print
& `3 _4 C/ ^# H& T5 a+ nNext i$ y7 w3 h" @4 v: M' _- I
9 B: \/ Z$ N' \
End SubPrivate Sub gauss_Click() '高斯消去法. z' O* v; t- [+ u% D( [
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
7 N- i: r( @& u- D' E9 \: J& b( Ji = 1: j = 1
1 s& [, [! ?6 A8 H) m, ]  M: Hn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
- _' ?& D" Z/ }, i. T( aReDim Preserve a(1 To n, 1 To n + 1)
4 X  V4 P0 o1 |6 P3 p5 z7 DReDim Preserve l(1 To n, 1 To n + 1)
. J7 v% d3 t. M* z. |Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single; H) |7 c" E! {% L1 x0 A- `2 U: ]
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()) z- C# H* I* v- v8 p' q
For i = 1 To n& R( S2 R) Z( @& d; v
For j = 1 To n- \; W) S, |( E0 D$ @
a2(i, j) = a(i, j)# P. y6 x7 q5 W' ?. G
Next
5 @1 A# \% m2 j% B& b% gNext '将a()的值全部赋给a2()  k" k# V( q6 p
m = 09 u' L8 A3 E0 d  x) h
D = 1
% h+ }0 H7 K, h: d( @2 @ReDim x(1 To n)# M( i% j/ \/ W! \/ \
Print "--------------------------------"
1 _% A7 a- j% f+ SPrint "您输入的增广矩阵如下:"# @# M6 D1 y; f3 g2 z/ I
For i = 1 To n
9 |) {  O& C" ?6 P- w2 ^/ Ys = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
5 c5 f9 {/ B7 S, G2 g# pFor j = 1 To n
0 n( z$ @% F) T" Xa(i, j) = Val(Left(s, InStr(s, " ")))
# @" F8 J$ W& P3 ^9 f- Vs = Trim(Right(s, (Len(s) - InStr(s, " "))))
* ?5 _/ T: N/ l1 ~Print a(i, j);
3 ?0 F4 l3 _) H/ ZNext
) v$ U. p1 {; s0 v3 C+ V9 Da(i, n + 1) = Val(s)
" Z; t; W% m; b" O$ }7 [( A' D! UPrint a(i, n + 1);
8 X, o9 X0 Z* s6 DPrint) W0 q# O  S4 T, Q2 K- J
Next9 o, R: T) a) N. C! Z% l
! C7 A9 U; v$ H' N% |
For k = 1 To n - 1 '开始消元: @4 p' z4 s) i- i0 C- Q) R. b
If a(k, k) = 0 Then
1 A5 Z4 y2 }  i& d# @MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"4 ~% P( i6 i  c. }' ]. r
Exit Sub# w+ e# ^7 V) _. @2 a* O$ R# j* I; ?
Else- k' I2 C1 P5 L4 U; m" s9 G
For i = k + 1 To n
8 ^6 \$ H, c* Jl(i, k) = a(i, k) / a(k, k)) X- S( a3 W7 A- g  K
For j = k + 1 To n + 1
8 u0 ^5 s. g" `, z' D- fa(i, j) = a(i, j) - l(i, k) * a(k, j)
& C' T) S0 `5 I$ uNext1 d* O9 n; ^( H" n; k
Next
: s& N/ z! Z, s3 ID = D * a(k, k)
/ Y. T7 K8 N6 M. jEnd If& v1 V+ ^" D" W# h4 @
Next k '消元结束
6 s$ c6 c2 C% H* IIf a(n, n) = 0 Then7 ]. Q" [" l5 P1 v
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
$ J% M3 W8 V# ?6 ZExit Sub
" q' i6 l9 D5 [1 [3 E$ CElse, ^2 u- n3 e# a7 _) p* X1 N3 K
D = D * a(n, n)% _; F4 m0 I# A, x# K; T
End If
- A4 Q# u& Y4 n  E' a( z) ^Print "--------------------------------"1 o  i; w6 Y" S' b. S, I5 b
Print "系数行列式的值是:"; D
0 C3 Q: ?0 t1 h+ r( T5 ux(n) = a(n, n + 1) / a(n, n)
4 q9 L; u9 v! j. \( DFor k = n - 1 To 1 Step -1 '开始回代
. U) b+ g; ]. M) W' A# u* BFor j = k + 1 To n, d( s' M& D+ b
m = m + a(k, j) * x(j)
, B% F8 Y2 f+ g$ ^" d' VNext j$ C" G7 ?0 c. n" A  a8 |& i2 T7 A
x(k) = (a(k, n + 1) - m) / a(k, k)
3 a! t0 }$ G$ D$ x& _m = 0
3 b7 b% u' c# A$ k% O5 P0 HNext k '结束回代
9 v' N, e0 m8 o, n* S, p! {
: n; j/ N- G, N2 F$ oPrint "--------------------------------"
% g9 U5 r0 Y8 \Print "方程组的解如下:"' {/ ]: G( O8 X5 _& V; j

) v0 r6 i- U, l, {5 h/ {' P& D/ jFor k = 1 To n
  Z- L+ R$ V  P2 y3 `7 }Print
2 r# A$ X/ s" t7 U4 [' j/ F" zPrint "X(" & k & ") = " & x(k)
9 J& [1 D2 R5 p* D4 ^' a: XNext k: d$ ~7 i  ~7 }$ B5 K
Print "--------------------------------"2 u( n) |. n% e( j2 n1 T% U
Print "其中各行Ax-b="& z  h% V7 y0 g
Print+ [0 S1 H2 e" n, D; y3 d/ f& ^
For i = 1 To n  a" ^7 _7 g- V
t = 0) B) z4 d# ?9 w7 d9 b
For j = 1 To n
  ]3 M8 O3 n7 }3 w; At = t + a2(i, j) * x(j)- Z. C2 u6 I# L$ p) h" s
Next j
! S& C4 c0 \4 Zt = t - a2(i, n + 1)6 P4 J/ K& Z0 l1 n' p
Print Spc(5); "第" & i & "行:"; t
$ y. V1 f# t$ z# k, d8 t/ t: OPrint* a  U9 V3 r+ U' E9 D
Next i
) m+ ]- }. W8 y  W3 t
+ H1 g. e* A! t/ i! |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-9-19 15:13 , Processed in 0.540842 second(s), 67 queries .

    回顶部