QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法( M  s+ ?  `! R3 y4 @  ^- Y
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
  O; x! z6 ]1 Bi = 1: j = 18 a! v# d/ o4 S( Q. {
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))7 s; R3 h) ]1 v* z# U# O  e  j
ReDim Preserve a(1 To n, 1 To n + 1)! `9 x% [& B; o; y2 v* s
ReDim Preserve l(1 To n, 1 To n + 1)( g9 Z. a! j- h/ s# ]# |1 ~
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
. A1 [$ n, t2 kReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a(); g8 f! S9 Z& O0 V# i5 s! [
For i = 1 To n( b# t$ k& k2 Z# Q' l( V
For j = 1 To n
" V4 Z" b+ R4 ?' ga2(i, j) = a(i, j)/ B0 g* u9 y" s: y" D0 z8 L
Next
( B& v) L$ b$ |9 lNext '将a()的值全部赋给a2()
; o2 r! W2 @2 hm = 0
, m7 A1 r6 I. y6 v! W4 M- m$ eD = 1
3 B) e) L7 r, f! cReDim x(1 To n)/ F! Q" U9 p' R8 G
Print "--------------------------------"
  u! E6 K4 ]% \: x8 CPrint "您输入的增广矩阵如下:"
+ ~: h7 k# k$ H% U6 i. Q3 O& c/ ]For i = 1 To n
! P& q4 f+ c2 g" {9 v" Rs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))# T8 c8 f, h7 a' n
For j = 1 To n
6 N0 B' R3 a# U: K8 v) Ya(i, j) = Val(Left(s, InStr(s, " ")))- Z# ?( b- u1 k
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
6 b3 T( v' U! f) P+ S3 _% cPrint a(i, j);
4 ?/ x7 }, ]' ^5 k6 `4 e# _Next  w/ x( z. e2 B, J7 B5 f( A6 ]; S
a(i, n + 1) = Val(s)  A$ q' T1 o" y1 B& q; g
Print a(i, n + 1);2 W, @) {4 u: [& K4 P3 r5 e
Print& E' M$ T/ L+ B+ g* X* ~
Next
( G4 m& w- v) }6 Z: n* S) P; e4 a1 e4 U" ?- K# Y' Z
For k = 1 To n - 1 '开始消元
4 {3 l4 u9 G0 H+ N, g% TIf a(k, k) = 0 Then
/ P  G! p7 _1 @5 S5 ?MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
$ `' Z* G( t7 FExit Sub
3 \$ i' u& W- k2 D: N; z: r  tElse
, P: k) S8 t2 Z& p: a" j7 h1 U5 dFor i = k + 1 To n5 I# I& u. e: b5 [% S+ e
l(i, k) = a(i, k) / a(k, k)8 `& F' ^9 a+ W# ]8 V
For j = k + 1 To n + 1
/ R8 O2 t# ]8 G  \a(i, j) = a(i, j) - l(i, k) * a(k, j)
  H: `4 d% B( J( ]3 s. vNext. L, X& L6 v8 e7 B: q; C
Next6 d* D( n0 b# j8 H; I8 u
D = D * a(k, k), Q* H' r( g2 E' c  Q
End If
4 `2 D, h$ [0 A) ]. a3 ~: {+ Z7 \Next k '消元结束
$ _/ H' r; e% w% D2 X7 kIf a(n, n) = 0 Then
" Z  R( S" w2 [. J6 }MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
% Q  M6 s6 o5 N, |8 j$ fExit Sub3 W8 W% t+ C; s0 U* O! n0 _3 Z. _
Else
* A) b! \2 J; r! \  {7 aD = D * a(n, n)2 B# b. `, _: \, ?/ T
End If* g  H3 g% z% g
Print "--------------------------------"
3 j: ^+ f; l% V" g1 a/ ^Print "系数行列式的值是:"; D
* K3 {- T4 [1 V, [x(n) = a(n, n + 1) / a(n, n)
. A/ j) ?* k8 Z' p6 JFor k = n - 1 To 1 Step -1 '开始回代3 P2 L0 G) a, C9 m5 L
For j = k + 1 To n* r  I9 _2 @/ O# b4 J$ V5 x
m = m + a(k, j) * x(j)
( T( D" n' A9 j0 A' MNext j8 y/ Q* k4 ?3 H4 L
x(k) = (a(k, n + 1) - m) / a(k, k)
# P% l6 U# t; Z8 Z/ S6 z* Cm = 0. ]: g6 y5 T5 X, O  q  H3 m2 S1 W
Next k '结束回代
& n# T5 K4 p; J! W
8 O; y9 k/ p5 b/ {Print "--------------------------------"0 r' Z1 n4 \# E2 z, Y6 z  Q
Print "方程组的解如下:"4 x) u1 \) v( d1 s( t
8 p( J, ~- S, J0 u: `5 D7 e
For k = 1 To n
( I- L7 ?& B- X) E. lPrint
# a" v4 U6 w3 V& qPrint "X(" & k & ") = " & x(k)
. `+ e& t8 f3 n$ k, ANext k
; p; `) @  x) ~% ?: B* PPrint "--------------------------------". h$ l3 X! C  T
Print "其中各行Ax-b="
& N4 z) ?5 x6 S# U2 ^; DPrint- L& L  g8 X  C) X
For i = 1 To n3 q  h0 F$ E+ h4 d
t = 0( F3 Y0 Z) h6 m2 R5 |1 s
For j = 1 To n
4 o; }! n. r# A& u0 I$ O) e7 \t = t + a2(i, j) * x(j)
0 N/ U3 C6 S! J7 p0 iNext j: b7 K, a5 f- c
t = t - a2(i, n + 1)2 M" y. {; N$ h* U: [& o$ l1 j
Print Spc(5); "第" & i & "行:"; t% J. y) J/ R, m
Print! `' `' @) w6 _5 m, ?$ j6 O4 D
Next i5 C. ]4 E. G. B
9 E: z0 {4 e/ C
End SubPrivate Sub gauss_Click() '高斯消去法7 }+ f: ~1 @4 `7 h* Z) [' s
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
0 a' x+ I" ~) n7 o; C! Bi = 1: j = 19 V  G8 e$ m9 C. L& M% k+ \
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
3 f4 q0 U2 J! A" _ReDim Preserve a(1 To n, 1 To n + 1)
1 b. [- Z" H% R4 @0 iReDim Preserve l(1 To n, 1 To n + 1)
* o* C1 _- }9 O5 W  HDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single# Q3 B. Z% G  d0 F' {
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
- J  F- _* X- ]$ _2 m4 mFor i = 1 To n. N. X: q  y* a2 L7 E$ Y, d; N3 [" U8 O
For j = 1 To n
& F7 S* V$ ~/ \$ w, e) L2 Aa2(i, j) = a(i, j)) L9 z4 X5 ]* {2 c, Y- i
Next
7 }  {" Y7 ~6 r7 w) F5 W6 [Next '将a()的值全部赋给a2()
8 B/ K1 d# _' Y- ^' @' }9 v- L" f" Ym = 0" Z& f( i6 N) x7 c; V
D = 1
, s( }" x+ L/ bReDim x(1 To n)
+ O* u2 F. e( A9 R0 f' SPrint "--------------------------------"! N( K* c8 x0 _$ s/ t
Print "您输入的增广矩阵如下:"1 I: J; L( T& I; M0 m$ Q
For i = 1 To n) u; F2 t/ R& r5 S& q5 F
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))1 _" R3 u- S2 L; J/ U
For j = 1 To n* }/ a! s0 S7 [1 p' s
a(i, j) = Val(Left(s, InStr(s, " ")))
% h) m; k6 Q, v9 G: o' js = Trim(Right(s, (Len(s) - InStr(s, " ")))). L2 ~  k/ z' b% Z! h/ y& z
Print a(i, j);1 m* o7 g6 M+ \  p3 M% ]! G
Next
7 ?! C9 `  o: k& \2 ra(i, n + 1) = Val(s)4 J* N1 q( c& \( M8 C
Print a(i, n + 1);( l4 ]6 m  m6 \# y
Print
6 \9 U& H& w6 i+ g+ MNext
" C& R" b" I- q6 y8 ^/ k" n5 y9 f& R. U% h3 |# b- X
For k = 1 To n - 1 '开始消元. Z0 o& m! _$ j! F9 h6 l2 M# \
If a(k, k) = 0 Then
$ t+ R% @3 L, W, z1 A+ Z5 q# a2 _2 tMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"% O; N" ]1 L1 T5 {$ a
Exit Sub2 Y! r* M# h4 J# W5 t( _/ t
Else6 n8 p2 Z/ E) Q$ V6 Q
For i = k + 1 To n
- r# Z  N. A8 V6 X. a! ^0 j( _1 @l(i, k) = a(i, k) / a(k, k)
1 S3 o9 z7 t$ w& ~$ \6 @For j = k + 1 To n + 1
) v' o4 g! Z) z7 j- T5 ha(i, j) = a(i, j) - l(i, k) * a(k, j); Q$ F) n/ e$ ^/ V
Next& o; l$ _1 v7 J' ]
Next
/ ]4 @4 J4 M$ w7 _: q# N4 nD = D * a(k, k)
9 x7 o% a+ y3 C9 \/ [9 NEnd If! a0 J( T3 H; c" V6 f1 @* {1 r. d
Next k '消元结束
" a$ p' u4 D( [If a(n, n) = 0 Then5 d/ T6 B0 P% o/ @
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
: h! N' z  U9 O! S: ^+ BExit Sub+ `- E* h# C3 @, j2 q
Else6 q8 C1 F" B& K, i" K3 p
D = D * a(n, n)
9 p! U: P7 m% n2 B! ~End If3 @) q% |9 ?6 h+ S( \' D1 {' E
Print "--------------------------------"0 D1 |* C$ ]* }) i
Print "系数行列式的值是:"; D
& Z' d7 `/ B6 ?9 cx(n) = a(n, n + 1) / a(n, n)% _% n* W  f! j2 @, B6 B
For k = n - 1 To 1 Step -1 '开始回代
6 v' X& x; Y& _# i8 z9 V+ tFor j = k + 1 To n
! a3 C$ A1 ]5 b! u, Z- qm = m + a(k, j) * x(j); m. z/ ~2 L. S# {, ]7 N4 L
Next j2 e' c6 T- k& T& s) O/ G
x(k) = (a(k, n + 1) - m) / a(k, k)1 {* {$ X: v: u( d" }% ~
m = 05 U- ]% L# c% E2 K0 |5 y4 d
Next k '结束回代
/ {# A- b3 Q0 K# F) [* A
/ W2 i" x& \+ l! u: l4 B+ L. g. zPrint "--------------------------------"' m( l( J( ~+ C: d0 l
Print "方程组的解如下:"% \' k7 _8 @- f$ @% Z4 e
3 ]- }) v9 |# S9 c
For k = 1 To n2 L/ W8 F4 x  A3 O; P
Print# n  x7 O0 g1 J+ K7 ]8 c! ~
Print "X(" & k & ") = " & x(k)
! v; n0 Y1 j# s9 o# `  KNext k# S, p5 p+ |. ^' ?, b) v: ^" L
Print "--------------------------------"
2 v) S" S7 Z3 }2 o  S) bPrint "其中各行Ax-b="& v$ j& N) O9 z
Print
! V6 ^2 Y# ~! KFor i = 1 To n
& w0 Z+ v- X+ z! @5 C3 ~5 ut = 0/ E/ _) S2 y: ~8 a# ?
For j = 1 To n' }7 K6 v8 A! _$ f: e$ u3 C. W
t = t + a2(i, j) * x(j)2 Z2 J" A, b4 h% I) W
Next j8 ^% `1 j" n, X8 U9 T
t = t - a2(i, n + 1)' q/ _" y) m  J
Print Spc(5); "第" & i & "行:"; t3 `# M/ `# H9 U5 U( \2 o
Print; _* w% Y! p* w9 g& E: ]
Next i, G5 O% w& n' d- G0 D

0 o: t; D$ X' ~3 R2 f) VEnd 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 06:43 , Processed in 0.335665 second(s), 68 queries .

    回顶部