QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
#
发表于 2005-1-19 17:03 |只看该作者 |正序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
! d9 O0 G! A/ c3 Y% K" VDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
8 d/ [+ O1 H2 I* N  ei = 1: j = 1* A$ L+ ?/ h1 e
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))7 \, z& x  S! [' ^" }% W
ReDim Preserve a(1 To n, 1 To n + 1)" P6 x' \& r9 F5 ]: R, b# `4 r" M
ReDim Preserve l(1 To n, 1 To n + 1)( R& V# y: f0 B) p, e; u
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single2 m8 u& k* t& b/ ~3 Z& U( J
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
0 w6 b$ j+ H2 H' d# a3 g% FFor i = 1 To n; a1 \) _7 N) z; X% Q$ `
For j = 1 To n1 {  F: {5 s% v* @# G6 P# t" ]
a2(i, j) = a(i, j)+ e. j( z5 T5 R# A
Next
. U% ~6 O% u$ u; w6 ^, ?6 [Next '将a()的值全部赋给a2()) n+ C! d* V' `
m = 0
' Z5 n& P! f3 b4 r/ m! o% nD = 1, V9 q; ?# E( R5 e
ReDim x(1 To n)
4 X0 [3 U/ k) X, iPrint "--------------------------------"& b8 [2 J  c# p" [# N
Print "您输入的增广矩阵如下:"8 C$ m, M1 p2 x2 j6 T9 G
For i = 1 To n: k& J2 S, k. {% e5 o" f. V
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))0 K5 W: ?9 X+ y1 t# c9 [( a
For j = 1 To n5 k, z; i0 m0 }
a(i, j) = Val(Left(s, InStr(s, " ")))" [9 ^7 [% B' @" _4 d) q
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
; k7 m0 [8 N7 r, ?* g5 WPrint a(i, j);0 Z4 x- x, t2 N3 m' p; a" ]% \
Next
6 R0 x! c8 ^- P+ t. za(i, n + 1) = Val(s)
& }% h% R( d( z; r' J/ cPrint a(i, n + 1);9 x2 i% Z6 T1 q2 J  m
Print" r( ^9 A  H/ Y% S/ n& Z
Next
8 `5 Y  K8 ]3 Z1 ^  ^, w- X5 C
' W  q! b$ {" F3 k; w9 D2 ]For k = 1 To n - 1 '开始消元* I' g7 t) B0 ?; T& L
If a(k, k) = 0 Then
& Q  T% C! O, t. F: g4 z& eMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"  A4 o; m; e* F" E- f( e/ e
Exit Sub# y- ^/ A, i5 `* Z- P4 N
Else
4 A9 T2 O# @  q% ?4 f! x$ ?For i = k + 1 To n
2 O3 ^- K6 t% V* T! ]8 el(i, k) = a(i, k) / a(k, k)3 r# W0 _0 m* J1 b
For j = k + 1 To n + 1: ?0 W+ R5 W, _* _% U, p" d
a(i, j) = a(i, j) - l(i, k) * a(k, j)  j" n  i0 ^. B/ {: Z
Next
; v! b; @2 U9 D* g- n- P% RNext! `% h% b) H% D7 U9 R6 u
D = D * a(k, k)" u& s6 U5 W9 J$ G# T/ e. ~  D# Y, V
End If. t& i; p5 K) o) `8 c2 f
Next k '消元结束
5 y6 `5 U' l" Z  ], aIf a(n, n) = 0 Then, W# ~- S1 G0 p+ c2 g% e# Y
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!", a8 R: w. G% i( P1 Z/ E/ x
Exit Sub8 L( q2 C- e" ]1 B9 V' j
Else5 D4 `7 L6 g2 J6 l. M
D = D * a(n, n)$ Q# @$ F; {: _5 V. G
End If  W& T& L8 x1 ~- `6 y' ?; a
Print "--------------------------------"7 K! i- \. s4 c3 u3 T7 s
Print "系数行列式的值是:"; D3 k" P* l1 q$ p7 X" g. |9 ^2 Q# w
x(n) = a(n, n + 1) / a(n, n)
$ }8 o  M0 Y$ a8 M9 \9 ~For k = n - 1 To 1 Step -1 '开始回代$ B1 m2 z+ l& O2 b$ O+ m
For j = k + 1 To n* `$ O/ ?0 {/ U. q' O
m = m + a(k, j) * x(j)- L  s( h$ u" r4 {8 r5 E
Next j2 K% G4 w- |+ O/ _1 r/ k5 ^* P
x(k) = (a(k, n + 1) - m) / a(k, k)
, g' C- b: m4 ?8 [! P* \; q. Em = 0
# Y4 F. ]( v! v  M8 i3 d8 nNext k '结束回代
4 c- c% F/ }9 I8 A/ p- A" ]" j( V& J2 l! T  Y$ ?
Print "--------------------------------"
+ d6 {5 g! Y. c' o( ^- GPrint "方程组的解如下:"+ d+ z/ ?: x. s# B+ Z; E1 s
4 b2 X" R- x9 U. ]
For k = 1 To n
8 f. {8 o7 u  OPrint
( p. A/ u! W. N/ h4 ZPrint "X(" & k & ") = " & x(k)
" x0 F( Y, Y( `/ @5 v' o" D" C7 fNext k
* k1 s3 n+ c$ q" YPrint "--------------------------------"
1 ~0 N3 H' `3 wPrint "其中各行Ax-b="
' U" f7 o8 o* t) X8 BPrint
' l/ ~: a+ {8 K* P& w* b, NFor i = 1 To n( `4 c: a! X" v$ ^! M0 e5 N* w' M# ~
t = 0$ J  a8 m& n4 i, n
For j = 1 To n7 ~7 S3 J0 i6 f0 ]: w
t = t + a2(i, j) * x(j)
! b7 w6 l. U' H% Y# r* W% ?9 JNext j
) X9 i- H& E5 U2 [  Z: q1 G" `t = t - a2(i, n + 1)
" i' ~5 D4 k; _: N4 fPrint Spc(5); "第" & i & "行:"; t
) K% L$ ]4 L5 O3 x9 sPrint
1 _6 Y, H. N9 J3 N7 \  FNext i
2 F( u; v+ f) g
& S5 N: h, T) k. B8 qEnd SubPrivate Sub gauss_Click() '高斯消去法
: }2 n$ u4 y! S9 jDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single: p+ v( {) l1 J+ P
i = 1: j = 1
+ ~/ D8 O0 ^2 K$ H! u1 i" on = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))7 P0 d/ p) h3 U8 e
ReDim Preserve a(1 To n, 1 To n + 1)2 v, L% O' U( E2 I- _8 v% `
ReDim Preserve l(1 To n, 1 To n + 1). k" V  L+ X( @
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single; X+ ~0 d/ W3 z/ H# b* i' T9 v* w
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
+ O% @5 @9 I& J* E% T9 ]For i = 1 To n9 Q/ \+ F$ P2 i- v9 v. k. @
For j = 1 To n$ w1 }7 ?3 X, ~" M% j2 F
a2(i, j) = a(i, j)
+ Q* B3 Y# P$ @9 D# iNext" }" m4 q6 E$ w
Next '将a()的值全部赋给a2()
: n( a* {: U2 m# O5 G) Wm = 0
& n( P3 x" j9 s4 x- G, l: U' BD = 1$ c  c9 I6 a" G" ~/ @
ReDim x(1 To n)# n: _5 X: b! A
Print "--------------------------------"" q  F: }) o5 Q/ X$ V
Print "您输入的增广矩阵如下:"
3 [7 D) I( A1 X0 q- E: MFor i = 1 To n. U4 \, Z. s. z. `3 I& S, r
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
' \; A* k( e. u( j# H1 d% xFor j = 1 To n' L7 X5 d9 i' P. z9 V! m
a(i, j) = Val(Left(s, InStr(s, " ")))
$ n# U0 e5 t3 N& T6 I$ `! ]; C" Ps = Trim(Right(s, (Len(s) - InStr(s, " "))))
% j; ~$ o& a% Q9 g2 l) {! RPrint a(i, j);9 {, N6 _) Z# v% l
Next
" w  L* N9 f) ha(i, n + 1) = Val(s)' j- B" C, ?' d: g3 W! V4 Q6 A
Print a(i, n + 1);
  V3 i1 k8 A" K0 RPrint
" t; ?) k7 Z9 M2 P1 }Next
6 n! r5 L: q! o* V8 E7 k% u, w8 p! y
, I" r& ?7 M- s. u  f3 V+ Z% sFor k = 1 To n - 1 '开始消元
8 u% g+ [  I+ e) A2 h# ~If a(k, k) = 0 Then
% |! U9 a* D' g% ?* _MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
4 a# s5 m3 a$ R+ h6 F  C# D8 O# }Exit Sub2 W6 D# i6 G% A, ?9 a
Else+ R( Y) O) S% m) D9 p* ^
For i = k + 1 To n
* V! a5 t: A, q- _l(i, k) = a(i, k) / a(k, k)
$ `; |% U" i0 m1 E. j9 H/ GFor j = k + 1 To n + 10 q) t6 h1 r9 V+ [0 R
a(i, j) = a(i, j) - l(i, k) * a(k, j)
9 n& X- @1 e: |3 x7 g" X) yNext2 ]1 S8 @9 t% D
Next2 U7 u4 `" A) f
D = D * a(k, k)
! ]" M. D. Q. x" y$ v9 IEnd If& M4 h9 D# N4 F) x! u
Next k '消元结束
% Z4 T" U" @9 C8 a: c3 bIf a(n, n) = 0 Then5 a$ v! O8 ]( e8 o' Q& a
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"7 {' D, T; i, s& P! r% Q& x/ I$ m
Exit Sub" }% a$ z* q8 E& A8 p. U: a4 v
Else4 y4 y& V  ^- I3 v, b
D = D * a(n, n)7 \  T' \9 A& `
End If5 q6 U1 J( l- `5 W; c8 r7 Q
Print "--------------------------------"
+ I, B/ i* i5 S! yPrint "系数行列式的值是:"; D/ ~( [& i; S. [, E: f% P- V6 Q: B
x(n) = a(n, n + 1) / a(n, n)! \2 f* f. j* B3 U  e9 x# U8 q
For k = n - 1 To 1 Step -1 '开始回代5 p; S7 O6 ?4 C7 w+ T
For j = k + 1 To n/ a$ s1 r$ i) t* z& t; _
m = m + a(k, j) * x(j)
( B) L9 ]1 j' @Next j
) A1 w: v* _: H) A: J4 w4 Y1 Zx(k) = (a(k, n + 1) - m) / a(k, k)
/ j( f8 }* I& }' N( E& }* fm = 0. E+ V1 i7 {# r* X. K
Next k '结束回代
' l; k4 k' @) H% S, a  c. s+ M* j: U' z7 ]! ]2 S: x& R
Print "--------------------------------". U1 p3 q% m5 P
Print "方程组的解如下:"8 C. X1 y) ?8 c; k* ?

; R3 u" q, X3 v0 G5 H2 dFor k = 1 To n
) _: u7 S6 }1 s+ T( h: K% I: uPrint
6 `& J$ c# |4 f& _$ Q2 _Print "X(" & k & ") = " & x(k)
3 `/ L8 ^/ o4 v3 cNext k: U. f) y( O$ S
Print "--------------------------------"
  n4 e- E$ ^* J" TPrint "其中各行Ax-b=": S* m- M8 R) ?
Print
3 ]% v+ L8 Y9 WFor i = 1 To n
" J( s# S; H+ F: ?9 j& ht = 0
2 {. i/ }1 C5 r1 TFor j = 1 To n
8 t3 i, K7 d5 W, t4 _% @t = t + a2(i, j) * x(j)
0 \, ~% v! ~! P+ S, f* _Next j8 x% R7 S  |! U6 }
t = t - a2(i, n + 1)9 F0 _! N' c! x
Print Spc(5); "第" & i & "行:"; t
* \% \* n7 [( g) XPrint
4 g1 U! n% H$ CNext i
$ d6 x4 Y6 O/ i* o0 S- T5 A( f0 H
0 `" u. R6 S4 lEnd Sub
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
如果我没给你翅膀,你要学会用理想去飞翔!!!
zqyzixin 实名认证       

1

主题

5

听众

1818

积分

升级  81.8%

  • TA的每日心情
    难过
    2013-10-14 10:21
  • 签到天数: 78 天

    [LV.6]常住居民II

    社区QQ达人

    群组小草的客厅

    回复

    使用道具 举报

    0

    主题

    3

    听众

    24

    积分

    升级  20%

    该用户从未签到

    新人进步奖

    <p>您的程序我没看&nbsp; 但是我用FORTRAN 90 编过 </p><p>唯一注意的是高斯消法是有局限的 </p><p>1计算量大</p><p>2不能克服病态方程问题。</p><p>不知道您注意没有 </p><p>另我有FORTRAN 90&nbsp;的选主元高斯消去法的程序。</p>
    回复

    使用道具 举报

    0

    主题

    3

    听众

    22

    积分

    升级  17.89%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-12 00:40 , Processed in 0.434386 second(s), 68 queries .

    回顶部