QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
. q' y0 K- U- D9 c; YDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
& i* o7 U3 b" B! H# wi = 1: j = 1
3 @7 {6 ?5 {2 j/ R9 {n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# }9 X  x! V& ]5 e
ReDim Preserve a(1 To n, 1 To n + 1)
5 j  _  r6 {- z; w) f5 C6 l% uReDim Preserve l(1 To n, 1 To n + 1)
: H& ]8 W, a- k1 s, H% KDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
: T2 Q& h5 c3 H3 ]% X& XReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()! N  O$ i% {" A9 P. Y
For i = 1 To n
8 C; N8 i% m( Z% |For j = 1 To n7 ^4 @1 m6 G. F% I' E* G
a2(i, j) = a(i, j)6 O% H' s( O# U, k4 S! p7 b0 n
Next
) k" W' ]  r" j2 g9 h- H: z! ZNext '将a()的值全部赋给a2()
' D" E, J2 [$ x* Nm = 0: w7 d0 q0 E, \: d
D = 1/ d' z1 d* D( }( R3 H
ReDim x(1 To n)
# H8 S: {5 Z7 H9 tPrint "--------------------------------"
/ J1 J- Y6 r4 G2 @+ cPrint "您输入的增广矩阵如下:"
7 u- }6 }2 K) l7 c2 p. E- j$ B  VFor i = 1 To n
. q9 m! T" E0 X* t. T% Hs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))' D7 m3 f% i3 @% o/ i7 u4 @' m; U7 X
For j = 1 To n
  S& L# P* k* r( m/ _2 ra(i, j) = Val(Left(s, InStr(s, " ")))0 H1 {: W  u% l
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
8 v$ Y# B. G; m& H) {9 QPrint a(i, j);
9 F( q% h7 k) r! `) q/ LNext
8 s1 K  [$ T& ea(i, n + 1) = Val(s)
" Q/ ?' E* p% l! q) L; U% p( UPrint a(i, n + 1);6 U2 G# S; J. C1 A
Print5 w- u: ]0 t* ~3 b# n+ ]( C
Next
# |' k8 r9 \5 v' A# V9 x6 ?8 J: H4 T8 O' ^- B, _4 h
For k = 1 To n - 1 '开始消元& {5 h# W  r- A& T- J
If a(k, k) = 0 Then
( t6 A) H# @4 _/ SMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"! T5 o: _$ P+ D/ r8 l% L
Exit Sub
% m+ J0 |7 J  ?+ cElse7 o5 c' F1 ^* f* A
For i = k + 1 To n6 M: r+ w0 ^( a1 H" Q: z
l(i, k) = a(i, k) / a(k, k)0 q& q( u, d! k/ k+ A
For j = k + 1 To n + 1
7 q) |0 r! ]: a$ C- R3 h/ sa(i, j) = a(i, j) - l(i, k) * a(k, j)
  w4 d$ I* g& l1 T" N4 HNext% A: n- f5 f& K% A
Next( k0 @( I& H* H$ {. a6 M! A: C- F$ I
D = D * a(k, k)
+ l1 d- l- ?! V+ w. EEnd If
6 {. x+ h. t8 X! e' x& ZNext k '消元结束
  A/ S( G% ?, `3 qIf a(n, n) = 0 Then
; }% F: ]2 L: jMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
: c* U. b8 z2 \9 ~Exit Sub2 B( \- e  X2 _) l
Else8 p0 b& x4 f1 W( Z2 b$ H. |) K
D = D * a(n, n)
& F9 Q5 R8 Z5 J0 `End If( Z5 T; u/ [! F! M3 J
Print "--------------------------------"0 D- @5 G1 p2 c. ~$ B) G2 j
Print "系数行列式的值是:"; D" x- R4 R# L& j3 G
x(n) = a(n, n + 1) / a(n, n)4 z' _3 j# B! m/ v1 K
For k = n - 1 To 1 Step -1 '开始回代
; j% q0 ]1 z7 M# A  @1 O& ?# uFor j = k + 1 To n
& K# O# ^6 W5 h% o9 s5 @  H0 im = m + a(k, j) * x(j)
4 p- G0 _% M' L0 _0 {, [Next j
& L* M. V8 ~; ]. wx(k) = (a(k, n + 1) - m) / a(k, k)
, p3 ?- S; S# O9 Y0 b0 sm = 0
: m4 z6 Y- _, U. r3 V" ^# Q/ s# ~Next k '结束回代0 W5 Z" T0 R' q) m

; y" i; R) `! lPrint "--------------------------------"
* P' \5 M& S( DPrint "方程组的解如下:"& O5 z' I3 I7 {8 Y4 B; A* _

1 b6 d: {: m9 s6 v! [! u: W( iFor k = 1 To n' ~" m; ?& q- a0 Q' l
Print
  v/ T1 K6 r& {) V& @0 fPrint "X(" & k & ") = " & x(k)
! _" q- H7 h, w3 y. p' `Next k
9 N0 p3 e  w1 B- o/ W- S0 k$ T. VPrint "--------------------------------"
7 T; ~- F9 T3 W$ Y- DPrint "其中各行Ax-b="6 {6 p% M7 G- q7 D
Print/ }* c; D- v+ z. \
For i = 1 To n
2 `' f, v8 y* N: Q+ ^t = 0) l& r, A- S( K0 J1 N  s' z* v2 ?
For j = 1 To n5 A* p) ^- Y+ O
t = t + a2(i, j) * x(j)
9 D; f5 F# h4 ], JNext j+ Y# ]) I1 X- p' c: h% U& r* c
t = t - a2(i, n + 1)5 j7 L: s% K# @& S
Print Spc(5); "第" & i & "行:"; t6 X& ]5 f& O& \
Print' J, y7 w" e( x5 t" H. F5 C
Next i; |6 M& r& A$ n( l8 f5 S- ]) h0 G
2 {1 ^% l% G6 I4 j( w. ]! x& |
End SubPrivate Sub gauss_Click() '高斯消去法
! o3 a* i: {) e, B/ r2 K& ]Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
6 [! S% c5 D; g) M; Ii = 1: j = 1
2 p; }, X) Q* h/ ?* en = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))/ q9 j! E. @- L* v; W
ReDim Preserve a(1 To n, 1 To n + 1)
) z  L! T5 z+ h; f& ?' IReDim Preserve l(1 To n, 1 To n + 1)
/ i* v' g5 A6 {) p' {% o5 ]# A/ o! xDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single" G* B5 k% O  B+ i1 I
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
, q3 d6 R5 Z8 f& T3 J) }: KFor i = 1 To n* j" ~% K6 L: x$ \
For j = 1 To n2 \' y' n  {( E( b6 F
a2(i, j) = a(i, j)
; r9 A# f: _' e) w# R  s/ q0 J# fNext' |/ }( W& a* d/ V) T* D. A
Next '将a()的值全部赋给a2()
5 ~! @# O6 F& V& j1 _m = 0
1 u3 Q- M+ ^7 v. zD = 1
% t7 `+ b4 T8 m' TReDim x(1 To n)8 [, B( U+ y+ l
Print "--------------------------------"
" P; |! Q) L7 _/ _# Z) y, mPrint "您输入的增广矩阵如下:") W+ T9 r# [" p* s2 c/ t( m
For i = 1 To n
7 f& r$ R* c2 P" Z" rs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))/ j" {0 L. I) i, h3 i
For j = 1 To n3 l9 s" u( i% R3 @+ w/ D
a(i, j) = Val(Left(s, InStr(s, " ")))
6 S7 `; s1 i6 f- Ws = Trim(Right(s, (Len(s) - InStr(s, " "))))7 ^5 k8 {4 y8 ~. n1 k' D% q# M
Print a(i, j);
; S8 r( B% m# Z+ a9 Z$ K+ [  [Next; O6 k7 N. v/ i/ z/ U
a(i, n + 1) = Val(s)
/ `6 A; ~, G+ iPrint a(i, n + 1);/ u2 U9 D" e" N) R. B
Print
% y* v) N% r1 b1 y2 p  @% V/ @" GNext8 m9 B4 p+ U: _5 @
! Z4 O; m/ P: h
For k = 1 To n - 1 '开始消元
+ V! f; Q- a, Y' {If a(k, k) = 0 Then
% a" {7 U; |% X8 J5 X5 ^MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
! p6 x( {9 Z, V& @- Q2 T. XExit Sub
# \5 e% P( q* }3 @+ w) ?. GElse
/ s7 `2 a1 I6 p' hFor i = k + 1 To n
6 {( q* s$ \6 T2 x& V) y1 Al(i, k) = a(i, k) / a(k, k)
1 P( q7 X% s' S8 p% j0 v! o- IFor j = k + 1 To n + 1
  g* a, o" t- i% u$ U3 N4 Pa(i, j) = a(i, j) - l(i, k) * a(k, j)& n) P2 w* h" `. R% L/ e
Next8 |8 ~; i8 j5 E; f: _7 x
Next
  ?5 G1 u# ?+ B# j6 L7 c+ wD = D * a(k, k)
" C. H2 @: ^3 t8 h+ sEnd If
8 u/ ?' y8 M3 q9 DNext k '消元结束
4 N( X! `& |) `9 ^; V' B: `If a(n, n) = 0 Then" M- _! K# I) W4 W* Z# p
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"+ O% b& }5 p" y/ J' l
Exit Sub, S1 t) M$ ^/ o/ @; X7 U8 f
Else
" S! p7 ^  i) |6 [: u" a0 M- o; _3 N9 MD = D * a(n, n)
+ Z0 n! z- x- S3 I( u8 ?0 zEnd If
( s6 q% g4 q' b1 x& F* f  G2 IPrint "--------------------------------"
0 S+ v8 c5 L- H3 H% EPrint "系数行列式的值是:"; D' ^8 V( V+ I+ ^# f' A
x(n) = a(n, n + 1) / a(n, n), y2 h' `. s" }0 N  q. ?. h
For k = n - 1 To 1 Step -1 '开始回代, m: r* v& m* t
For j = k + 1 To n! e9 @' m7 @+ J3 B& D4 b
m = m + a(k, j) * x(j)8 o8 ?* C9 R) s+ G* i$ w
Next j5 a' a! D% Z! E  d
x(k) = (a(k, n + 1) - m) / a(k, k)# L! ~1 _# i( e
m = 0$ K2 `& V& h: B" n! }
Next k '结束回代
- Q- I4 [- r5 z
) }# T7 Q& T  g$ I; u# T4 E* S) J# X, MPrint "--------------------------------"
3 J+ q/ X7 l1 t) pPrint "方程组的解如下:"
& ^6 _# c0 a, w) [9 c) e+ ^" S
+ V' q/ r: R  G3 o3 FFor k = 1 To n7 B. X4 Y3 ?! Y$ L4 c3 w
Print
/ {! V  _) ^4 c( r% B  lPrint "X(" & k & ") = " & x(k)
2 m( a5 [4 T0 W/ S3 Q$ W% ANext k, ^+ Z- k5 G, ^+ h$ |$ B* ~/ U
Print "--------------------------------"
" y6 s9 r# r  JPrint "其中各行Ax-b="
7 d9 u4 P8 j% J) ^- ZPrint
% i* J; d0 P" [2 w4 c3 b* [For i = 1 To n
+ V5 T' ]8 c% S; N$ i1 j. _t = 0
( c" K+ ]. x6 |. M- K9 P: p, sFor j = 1 To n% ~0 \; y" P. X7 M  h) P4 Y' _% a4 r
t = t + a2(i, j) * x(j)
: n6 ]- D$ |6 x# k& \Next j5 n3 e6 u! c) t
t = t - a2(i, n + 1)
1 C6 i* j  v, q5 g. n8 f. J& NPrint Spc(5); "第" & i & "行:"; t$ l- C& ~, n/ J2 @1 s% c6 ^  b
Print8 J9 k8 K! r% I5 d5 z, F0 j3 F
Next i
& M+ ]6 m. ^1 @% i- \: x5 c" _3 s5 l6 Y9 E# Q& {9 Y8 [! 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-5-31 03:51 , Processed in 0.329310 second(s), 68 queries .

    回顶部