QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
: x. E: t% [" j3 q* r" mDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single1 j- [% |  K# {7 ^' w# Q- ~" p0 `  w
i = 1: j = 1# V% t! O/ Y3 O, t/ F" h$ Z; S0 h
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)). _6 f6 v+ u" K  Z* |* B- e3 ~
ReDim Preserve a(1 To n, 1 To n + 1)2 N! o; R: N: O2 w; l& l
ReDim Preserve l(1 To n, 1 To n + 1)1 e4 ^2 c: ]3 j6 W9 R* }/ L
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single) e. N: a) \* @" e* ]+ N
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()) B: B$ U8 E" E, Z& J0 E7 y
For i = 1 To n
9 [8 j  N4 H( \For j = 1 To n. q) a% o1 D9 X' e3 t+ e( h( N! N5 g
a2(i, j) = a(i, j)
' y; ?5 {1 N9 b. @, RNext
4 t9 N4 |  ~4 e9 d0 hNext '将a()的值全部赋给a2()5 c& f. S/ K' _% p4 T# r- ^
m = 0
! s* h- z; W1 G. c- g" BD = 1( V( q7 S' R% M. |
ReDim x(1 To n). N# i0 q5 [" @* G: m
Print "--------------------------------"  ^- R$ e3 u4 ?; F
Print "您输入的增广矩阵如下:"8 m' |4 U$ ^) v6 s& H( |" [
For i = 1 To n/ P/ ]# c1 v# @' U3 d
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))9 M: q# ?4 {' w/ f( i
For j = 1 To n0 X% F" y6 q7 X; a2 m2 P1 |$ [
a(i, j) = Val(Left(s, InStr(s, " "))), `! @$ u) @* s6 Y
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
1 d0 a3 G/ K. MPrint a(i, j);
6 E3 \& q8 B) U2 FNext
6 P1 I. u8 e, @" r3 }a(i, n + 1) = Val(s)4 l' j1 _3 H8 _3 ]5 t7 b) r
Print a(i, n + 1);5 o+ C. f7 J- f0 L9 D' O4 `- k
Print
( o  ?: ]2 f2 {5 r% KNext& ~. v, h8 J: x# L
  B  e% _' r( S: j+ Q$ K
For k = 1 To n - 1 '开始消元
1 X3 z' ]: ?7 C$ O$ v2 WIf a(k, k) = 0 Then8 j5 k- v0 w( R7 @4 l  h" ]
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
; t( I$ d* @  P( e9 g# p1 B; dExit Sub/ z- G+ v# h" ^
Else: _* T! ^' v& Q5 P! I( [
For i = k + 1 To n9 f) S0 K* K8 O; w/ o( H3 P
l(i, k) = a(i, k) / a(k, k)
' G) s" a- O9 X7 Y6 o( B% ~% Z* i/ ^For j = k + 1 To n + 18 e$ F: q- F4 w: ]
a(i, j) = a(i, j) - l(i, k) * a(k, j)3 s" Y" ~$ o9 |3 y( f% w; e
Next- n9 S- A& ?6 i) w# o
Next# |% S% p7 F# \
D = D * a(k, k)
. s7 M: r: ]+ s# T- TEnd If
. t0 D. g1 d, V; k: P. p1 }7 U: xNext k '消元结束
3 w  y* y' p' NIf a(n, n) = 0 Then$ S) n- `3 W8 k6 A
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
/ R+ u* r+ M, r8 G% e" ^Exit Sub
0 n" G' E" R% F  LElse8 C- x; I; ^/ D0 O$ j7 u' S8 S
D = D * a(n, n)
% i% B) b4 q8 y& v, R- t8 V3 DEnd If( H4 ?; V- D1 {1 p# X
Print "--------------------------------"
- m; e" r+ u3 p  k1 [2 ~Print "系数行列式的值是:"; D
4 ]% z6 n$ w+ |* C% |x(n) = a(n, n + 1) / a(n, n)2 X" |& A2 i, x, l0 O1 Z4 _
For k = n - 1 To 1 Step -1 '开始回代$ ^, N7 S; T' `" t4 v5 D# K5 X
For j = k + 1 To n2 g0 M( ?, ?3 i8 {
m = m + a(k, j) * x(j)# ?. o/ P  T# X6 g. y! e
Next j6 M. }# i9 y$ ^
x(k) = (a(k, n + 1) - m) / a(k, k)
" R  P$ g0 m% l7 z1 D4 u- F3 N) Pm = 0# F, Z1 c" C4 F  P) _
Next k '结束回代
" B9 k% v0 V5 W7 c# J
- s& O) G' l" X: V: pPrint "--------------------------------"( p+ f6 S9 e& f6 m
Print "方程组的解如下:"( [$ V/ A( R" I9 K; M# k% o& W

9 @# _) ?8 t' W0 E6 L/ V* V8 kFor k = 1 To n8 i9 {7 [% U0 i
Print) R: c; S6 t7 _, ]8 B% m. }8 v
Print "X(" & k & ") = " & x(k)+ U- D3 j9 L, m- T' `# P) `: @
Next k( Q! q% p8 s, C0 {# ]
Print "--------------------------------"  `7 X7 n6 C' `
Print "其中各行Ax-b="* q/ g/ w/ @# B7 Y, W5 I
Print
; W$ P! e$ d& S- {% F  E( D5 m4 ?For i = 1 To n
& D9 _1 I8 ~! O' p; F9 S$ tt = 0
, {* E# {" [0 z0 h8 o2 vFor j = 1 To n
7 c, i8 B! l6 zt = t + a2(i, j) * x(j)
+ P. x. t9 X0 E) N& I1 X# K# ENext j
# i8 H2 x! Z( X. E1 p" Ot = t - a2(i, n + 1)  w- m7 l0 }1 w8 C' k
Print Spc(5); "第" & i & "行:"; t! P. d( ^; T; n0 R* `# l
Print
9 S5 s3 |# S7 W9 iNext i
) S' p; l( j- Y: o1 ^# d0 a8 ~
7 G3 V( l) x, F7 C, O" IEnd SubPrivate Sub gauss_Click() '高斯消去法% _9 B) i( }8 b/ P1 V
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single3 ^" J- E+ Z# D( v  T+ h) w
i = 1: j = 1. u1 g6 y/ M& i: P
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
' p+ b- a) n. {5 T, RReDim Preserve a(1 To n, 1 To n + 1)
1 v. c( v% h; z' Z6 ~; s2 MReDim Preserve l(1 To n, 1 To n + 1)
0 K! j' O8 h" A2 X! k& |Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
4 v) q& u6 B# {4 EReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()+ R5 o8 p' }0 A' x
For i = 1 To n
, A+ \4 Z1 z5 I0 ^0 ~+ i3 ?! wFor j = 1 To n
7 @. P% t5 w* ba2(i, j) = a(i, j)5 g- n: T6 f' ~- O1 |
Next6 u, v1 ^1 h" b* x* P( u" u1 |
Next '将a()的值全部赋给a2()/ |" n, N5 \& C# P
m = 0
( G3 ]0 C+ f, i# F  c" d4 j9 U" m5 sD = 1$ l7 Q4 C/ C( B7 e! p) e
ReDim x(1 To n)8 s( c9 [2 E6 R. r
Print "--------------------------------"
, D6 \  B! `. V) A+ Y* a4 s. ]1 SPrint "您输入的增广矩阵如下:": D- r; j) z3 d7 F# d# C
For i = 1 To n
' C8 h' B1 m# ]* `1 L8 v  E# f* `s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))$ B4 e, C6 l0 n, L, d
For j = 1 To n
4 J1 x; q1 o5 c9 {% xa(i, j) = Val(Left(s, InStr(s, " ")))
* V& O4 V) i- K6 Rs = Trim(Right(s, (Len(s) - InStr(s, " "))))
! s4 c# L- ?8 S1 M1 q, t, DPrint a(i, j);  Y* e  S! K) B+ W7 o+ ]
Next
8 e* Q# n, \/ ]3 @5 n1 va(i, n + 1) = Val(s)
: V' x+ y9 q% zPrint a(i, n + 1);2 X* u2 E1 @$ p/ {2 S
Print
* t4 D9 w, X9 ?4 ZNext7 ?% T7 A* k  b# X: V. o% Y
  u' Y- H3 r7 f$ J+ W. `  H
For k = 1 To n - 1 '开始消元6 D% |8 w# X) q3 a$ y1 Y9 k  P+ E
If a(k, k) = 0 Then
5 o- x* |+ P4 Y) `MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
; O0 d; `1 d0 o% ]" b3 j6 MExit Sub
5 t3 o7 l8 {/ X! u  ^/ k6 lElse
* J0 ]4 h, c9 b1 C* N( O+ L  P: uFor i = k + 1 To n
# l" T0 s- n% U$ H5 b7 Z6 m1 Bl(i, k) = a(i, k) / a(k, k)' K9 m9 a: b4 _1 q3 b; u, n
For j = k + 1 To n + 1
' o: b0 h6 n) I) x" qa(i, j) = a(i, j) - l(i, k) * a(k, j)+ z4 \( a) a6 f! b
Next4 t! r: Q- L$ m+ O1 o/ i
Next
8 e& V& Y# |+ Z) Z% B: K8 w: uD = D * a(k, k)  r) d0 s; K& \: U: ~- I0 ~
End If3 r4 }3 d- O8 E: d! k& \& ~! G8 j
Next k '消元结束: z+ |$ S6 W) D$ Z4 x0 H8 X
If a(n, n) = 0 Then
  n* P; |: _- HMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"& ~9 e! W/ R$ A, w% e9 y
Exit Sub9 s6 u4 p7 g- b3 d
Else
$ T% P5 k8 j! b8 |% ]; SD = D * a(n, n)
. W# S0 l5 e& lEnd If
9 i7 j) _  G2 r: }* F& ZPrint "--------------------------------"
) V+ T( R, U. p+ }% D% Z2 s: CPrint "系数行列式的值是:"; D
% z) b5 D& z% V7 T% ]7 Z' Y8 xx(n) = a(n, n + 1) / a(n, n)
7 G+ ~/ l# u5 a4 {0 D  eFor k = n - 1 To 1 Step -1 '开始回代" I) S5 u5 |1 C/ n* c* A: i, y
For j = k + 1 To n4 L6 B( b( N* n5 P
m = m + a(k, j) * x(j): I& ?1 f1 d) K. C
Next j7 n/ B& }9 X" c2 A
x(k) = (a(k, n + 1) - m) / a(k, k), ^  f: `4 r" l* k8 x7 }
m = 0' |% T# F4 @# o1 r2 j4 C+ J
Next k '结束回代
# U2 k' J' P) k1 W" ~3 p0 h
  {7 @8 f2 d7 S; s) ~4 U+ o4 J& tPrint "--------------------------------"0 ^' W/ R, n- u- C) ?! V
Print "方程组的解如下:"
2 d( b& B. ]# A" \* o" g: l! F$ u1 B' J) s- l9 r
For k = 1 To n1 n/ Z, C7 }$ g" u8 g  N
Print
* W( V" {5 T7 HPrint "X(" & k & ") = " & x(k)$ ?7 |! y' O3 [; z" @$ D
Next k
" [% J: k  U5 I' ~! e/ [8 aPrint "--------------------------------"
- B% p6 f' C5 \+ U  FPrint "其中各行Ax-b="9 A) m8 x& `0 D+ W
Print
# s+ Q. T' X& H% M1 t. _* eFor i = 1 To n
8 O5 A( o2 i. f( I* tt = 0
# ]( |+ ]* E& D( R7 DFor j = 1 To n0 z* \& v/ p' r$ Y* P0 ^$ \8 y1 ?, ^
t = t + a2(i, j) * x(j)
1 A8 p5 [: e. x6 I) XNext j
; X, p1 {4 J7 }2 v$ _0 B$ I: G  xt = t - a2(i, n + 1)
3 G4 \7 Y0 u7 A  _: PPrint Spc(5); "第" & i & "行:"; t$ M1 I. h. E; ~# j1 L; h. C
Print
8 C  G5 G" H, W+ h8 g6 x1 hNext i
* t3 D1 S% I3 P) w3 s: s5 T) s. s! G' t. 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>
回复

使用道具 举报

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-7-14 20:59 , Processed in 0.521272 second(s), 68 queries .

    回顶部