QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法$ F1 S9 o& I) }$ K$ z" c4 H! w- z$ Z
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
* s* d4 b+ \; \i = 1: j = 1
) D8 c) m2 Q' B* ^. ln = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# R3 T- L1 e, l; a: Q
ReDim Preserve a(1 To n, 1 To n + 1)
+ R9 N. y1 L& a. [/ U$ j: b2 ]ReDim Preserve l(1 To n, 1 To n + 1)
! U# W) K- v$ i. S1 V( ZDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single5 c( m# S4 x) ^; F+ y! F, s7 d
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()( r6 q; J8 Q# o0 R1 l. s- n# B
For i = 1 To n
" ~, U/ f# [8 z% o' v* NFor j = 1 To n1 m0 I2 S+ l; M8 s  H4 F
a2(i, j) = a(i, j)
. `8 n2 I! O. A2 MNext3 n  k# W8 A  p. s
Next '将a()的值全部赋给a2()# ]; N5 P# m' f& }' a5 v6 d
m = 0- v! R* s, p& n% Z" ~! v
D = 1
( d6 r) T1 k8 yReDim x(1 To n)
% g2 w0 C* k0 J; Z' e. oPrint "--------------------------------"
' l! }7 r, K9 o5 x) qPrint "您输入的增广矩阵如下:"
6 E, z' h! @( O4 n: \2 hFor i = 1 To n5 b) t) L; Q9 }* R" Y- P8 D
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
: D: a  A/ C% @- j3 {For j = 1 To n3 Z$ F9 V9 y. ^9 @
a(i, j) = Val(Left(s, InStr(s, " ")))
( y7 X5 [% L) s% Z6 Us = Trim(Right(s, (Len(s) - InStr(s, " "))))
* Y0 j& w2 ]0 `) c9 k( ?; t, q1 JPrint a(i, j);
& X# z; U/ @; K0 C1 Q( ^Next
1 D+ {' [% D0 B% D" [% Ta(i, n + 1) = Val(s)
  K% T; u' Q/ P" A. R3 k; [Print a(i, n + 1);2 x& H8 _, p( ~, w( }: _% N
Print8 l; H5 b5 |8 L: j" `+ j! I& q
Next
2 k% s( S: U, Z, x
& g) Q) ?- D7 W1 D: I8 D, WFor k = 1 To n - 1 '开始消元
% V7 f. d3 g8 z' t9 G( \. RIf a(k, k) = 0 Then& d. M2 |& p7 A+ T* `0 D
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
0 X- `  ~( s/ sExit Sub
% N0 j5 v! Z+ F$ c4 DElse
% L% v* j6 v8 ?- \For i = k + 1 To n1 a* ]. ?1 W$ c, |/ H: y
l(i, k) = a(i, k) / a(k, k)$ z7 v! q- b% u2 l( b
For j = k + 1 To n + 1
6 ?. D& T2 `/ ?) J7 |$ Ea(i, j) = a(i, j) - l(i, k) * a(k, j)7 A2 i- T7 o2 ?4 B. [' U
Next
8 a% u2 ~. w" p/ Q9 n' B' Y& {" iNext& i8 M( o; [; t. G4 ]: |
D = D * a(k, k)
0 a) o( J, W0 REnd If
: y" x0 I% M6 @; b, v% hNext k '消元结束0 [: @, H" Q( J$ I1 h& d' n% i
If a(n, n) = 0 Then- i  T  u# Q7 b3 t2 a
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
: m0 n& L9 t" s& m$ S& W+ aExit Sub1 N! M1 {+ N' p0 w
Else
1 @% `/ x: z+ s* ^3 AD = D * a(n, n)
- t% s5 H0 D; r* g( h. g# EEnd If( X( H. Z) n) M6 e
Print "--------------------------------"
9 t9 I" l" _/ i2 D( XPrint "系数行列式的值是:"; D
: c" `0 q1 D) O( {9 gx(n) = a(n, n + 1) / a(n, n). |" E, o$ s7 y/ A! t
For k = n - 1 To 1 Step -1 '开始回代
8 W' R2 |. T( I  lFor j = k + 1 To n
& g0 u4 C8 v8 |$ }m = m + a(k, j) * x(j)
+ k$ e) }2 ^) XNext j/ o8 _* ]  r5 J8 \5 m
x(k) = (a(k, n + 1) - m) / a(k, k)
  Y) @" N% P$ e  Wm = 0
1 t& {: E# K) v0 p0 X) \/ v4 sNext k '结束回代% X+ \5 H  n" e- c

+ d! o" S8 _5 G. c# t, pPrint "--------------------------------"
. K5 [6 X( D9 W1 V9 M3 B# w- S1 APrint "方程组的解如下:"
. s: L, E5 \4 Q3 R/ i* {2 d- D
' U! ~4 E& ?8 e) u# E! W3 wFor k = 1 To n9 r* m  B- p2 i# t
Print
) z, W" U& t" K/ \1 j1 u8 s3 {Print "X(" & k & ") = " & x(k)
4 c/ w0 x5 ?/ X+ X& sNext k
2 G. I8 M" Z5 r$ o5 V, gPrint "--------------------------------"
% h4 d/ Y9 W5 ]  Z; hPrint "其中各行Ax-b="# ]& p# w6 k& m* H
Print3 t+ y: U1 ~4 `" G4 R2 k
For i = 1 To n! C% ?/ R" s& d$ {$ N
t = 0
' s# n* [6 S2 G9 bFor j = 1 To n
( M4 X! Z$ b/ h' u7 b/ Pt = t + a2(i, j) * x(j)
9 j4 q1 d5 j, q' {) k/ mNext j
+ Q' b  p' k  e, [* Xt = t - a2(i, n + 1)
+ |; I0 ^! d2 @  u7 {' kPrint Spc(5); "第" & i & "行:"; t
: I5 G. C) r" U4 L* d+ }Print
- r4 z) }' I8 p# h: v) i0 k, aNext i
7 {2 i# d) y; K  C7 }& n9 f# X2 M) w8 c2 j
End SubPrivate Sub gauss_Click() '高斯消去法
$ }+ G. Z# m5 A: A5 c! V2 }Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
1 W0 e) e3 T4 u, Y" s' mi = 1: j = 1
- E4 t7 }" [5 O- x, n, P6 Kn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))( t0 ^8 t7 L7 ~( z- j+ \  V+ \1 T
ReDim Preserve a(1 To n, 1 To n + 1)
! `. Y0 E: `! F$ T( eReDim Preserve l(1 To n, 1 To n + 1)' N' N- r, }7 B. j! ^2 a7 n
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single' B. D4 I6 H# G" i2 V7 z0 j& o/ {/ h
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
4 v, j+ G0 p4 v; d8 s. BFor i = 1 To n
, A2 ~" A: H* j4 p  t( SFor j = 1 To n& t9 p/ R3 S7 y; n
a2(i, j) = a(i, j)' n- v* R. @3 U* q  Q. P- v- K
Next
9 w% O; z2 G$ @% M" V0 VNext '将a()的值全部赋给a2()
/ \2 p- }, {* h, R$ Km = 03 y3 Q5 f; r. e
D = 1
! I3 {0 b% a* vReDim x(1 To n)
9 g3 v. F3 x! r5 [5 zPrint "--------------------------------"
' _; N; O5 D5 m6 cPrint "您输入的增广矩阵如下:"
* U; L' i2 W$ CFor i = 1 To n- `7 y6 }) X2 e9 d+ S& ?3 ~$ N, W
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
7 W3 h! h4 g, l$ fFor j = 1 To n% \, ]3 M; t; l
a(i, j) = Val(Left(s, InStr(s, " ")))' k& t- t7 N. b  `" Q8 q# [( X
s = Trim(Right(s, (Len(s) - InStr(s, " "))))# @, i3 x1 O2 ?$ T+ ~
Print a(i, j);
6 ^3 K- ^) R# dNext
5 L: {" g+ J. @& v8 M6 w8 Wa(i, n + 1) = Val(s)
% ^3 z8 \  O. t0 e* E, `+ cPrint a(i, n + 1);8 K* X' q- M. w4 R
Print2 N9 ^: Y/ {' ^4 w/ X* r1 R
Next
  \# q! O% m1 c# _) o4 G: |
8 I. o+ A( j" x9 a+ XFor k = 1 To n - 1 '开始消元
, L# F! |5 L1 oIf a(k, k) = 0 Then
5 m" o7 L$ |  ~7 ^MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
( p, [* S7 ]) e2 X" EExit Sub
/ _/ ?7 `. z" Z8 M' BElse
& W' y6 _  S) vFor i = k + 1 To n$ \! f8 m" x4 `% C, j" i# g
l(i, k) = a(i, k) / a(k, k)0 g6 `- g+ e/ |- q$ a
For j = k + 1 To n + 19 t8 ^! \; }3 v+ |$ P4 o# O# {
a(i, j) = a(i, j) - l(i, k) * a(k, j)0 r! J; W9 m1 ]' M+ l
Next
# W- s! ], t8 d* SNext
  x6 L9 P8 U8 ^/ ~1 e; r6 |0 S' N. M9 uD = D * a(k, k)
' `% Y' E% B3 r7 @( q) O5 aEnd If7 {; t* A2 ?; v5 E  _
Next k '消元结束
, \$ v/ `$ j6 pIf a(n, n) = 0 Then/ ~; e" J- M  ]% q- _" f2 d! n
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"* E6 j6 B/ y2 M, u
Exit Sub7 a, P( d* Q$ T3 w, X* |
Else
- ]3 u; }) O7 PD = D * a(n, n)
, l; ]3 @" r/ u0 `& A" {& _2 sEnd If
+ e5 S5 x* }5 f& |4 s' n8 kPrint "--------------------------------"( ?* |0 O5 F5 x& U$ _; f
Print "系数行列式的值是:"; D
$ E. U0 R& n/ `+ l- r" Ax(n) = a(n, n + 1) / a(n, n)
% U0 K; ?; T6 h1 W' j/ l8 VFor k = n - 1 To 1 Step -1 '开始回代
" w9 E6 R: m+ r% S& BFor j = k + 1 To n
8 \  x! \6 l) H7 q- mm = m + a(k, j) * x(j)& _; g0 M$ G) V, Z
Next j+ B" [- Y$ H9 \4 G+ G! r
x(k) = (a(k, n + 1) - m) / a(k, k)
! m- X9 W5 g/ nm = 0
" h% l9 f0 N' y5 R- }( SNext k '结束回代  T! j/ N  e" o1 a" w* Y' w. f7 ?
: z( Q  n) S3 E1 A# Z# d; j
Print "--------------------------------"
! u; @+ F, d7 w' O. xPrint "方程组的解如下:"
' e" T( U7 N8 B) a& f
+ e4 T. t; h. T, h, L" X$ y- s% U6 wFor k = 1 To n
3 ]* j5 s. [& O. O, PPrint6 w; O" \  y3 H" D, A" N( B( V
Print "X(" & k & ") = " & x(k)
) N' D( N3 T8 `& sNext k
/ T- t0 N& x% L+ `Print "--------------------------------"" P9 @4 t1 }) x
Print "其中各行Ax-b="
+ E! z' u& _! w0 ], t1 ^Print
3 p7 p. ^$ O4 WFor i = 1 To n/ i. m5 i5 G8 g/ p
t = 08 }! @4 C- d# X6 Q
For j = 1 To n; U# J# k9 Q# k
t = t + a2(i, j) * x(j), l9 [- y* }* ^# F8 t
Next j
2 b3 r. v$ @/ [. V2 ^t = t - a2(i, n + 1)4 v, l- G' K+ n/ c  U
Print Spc(5); "第" & i & "行:"; t
# r% M5 n& `) f$ \* pPrint! i' e8 |1 l4 r) C
Next i
' n. y# T' X! b
+ U# x! p! |. _% F# S! mEnd 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 21:44 , Processed in 0.519805 second(s), 67 queries .

    回顶部