QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
: z3 ^: q1 I9 N: K5 oDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
( O; R1 }# H0 ^. p! ]; Ji = 1: j = 1% N& |% L+ ~* U( I& L
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# x; U0 B7 b- n2 a
ReDim Preserve a(1 To n, 1 To n + 1); a7 w9 s/ e1 k" U* L( M
ReDim Preserve l(1 To n, 1 To n + 1)! y  t1 _8 o" M6 `6 A, k
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single: i% \: V/ c8 J! |5 R; _# N
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
6 n' A  D& @+ D( tFor i = 1 To n0 X6 c5 T6 \0 Q0 V- H6 n  n$ L8 {& \
For j = 1 To n- y. J' f/ n# ?7 i& H  }
a2(i, j) = a(i, j)
/ o0 \; s1 d; t3 V( qNext+ N0 k; N& |! \
Next '将a()的值全部赋给a2()" Y! G9 x( b" e' Y4 S+ Q2 S, {- V# L
m = 0
. V4 _! w* P# x0 S: e  m, zD = 1, `3 A. H. [9 g  T: K
ReDim x(1 To n)
; [! u# J9 X8 ]9 N3 zPrint "--------------------------------"' C3 u) X: w4 J' e
Print "您输入的增广矩阵如下:"6 A* [' l( }( D  z7 Z3 ^
For i = 1 To n/ \. {9 d2 P6 b6 l& e4 T
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))* r' Y& T$ x' {7 n& G0 g: _
For j = 1 To n
0 l$ y* s; z* d( N+ [0 [a(i, j) = Val(Left(s, InStr(s, " ")))8 h. i) m- D0 W( A$ m( B& b6 e
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
; Z" B( `, v# p1 i" NPrint a(i, j);
2 p" v* E& D% C4 @9 V3 k/ KNext
! v3 i/ h8 f+ b/ S) I- v' `a(i, n + 1) = Val(s)
7 h# u% j: [6 K% J5 [4 @5 d3 y7 PPrint a(i, n + 1);
, v3 I" l) v7 R. dPrint$ p+ P" W+ ^7 {1 E# J4 R
Next( W, Z/ \) P7 Y8 i  \+ q% T

' Q, Y4 x' |( H4 {+ L8 D2 k, d6 eFor k = 1 To n - 1 '开始消元
* Y1 O2 m& i; l5 k4 E/ @1 ?; q9 P, BIf a(k, k) = 0 Then7 P' }9 f  M* f4 ^$ ?. K3 t$ J
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
' o' i- M8 Y+ l9 ~' b+ fExit Sub1 |9 f9 S& V/ C6 x
Else
- Y8 C' t! O0 a" G7 x& {) GFor i = k + 1 To n6 W) }6 H/ ?- z0 o
l(i, k) = a(i, k) / a(k, k)
$ n  P' E, D& ^8 xFor j = k + 1 To n + 1# V! y1 M1 n; A5 P5 K
a(i, j) = a(i, j) - l(i, k) * a(k, j)
: J) L: a0 y3 n1 u1 ^( l4 nNext! x6 z+ x8 x1 V
Next
# S& u# h" c! |' pD = D * a(k, k). }( c& O4 [5 h+ `* C6 {* T
End If
9 P+ B1 ?' X: G7 l$ LNext k '消元结束
4 O: O: `. w# M5 d9 }" j0 AIf a(n, n) = 0 Then
' U+ P* A2 A) t4 C7 e8 h1 eMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"/ U( g: ]' W" c$ l1 H5 K
Exit Sub/ |* K3 q$ o- W7 c# f( ?0 X
Else- q6 ~* g2 U  c  ^7 Q7 q4 o8 U2 d8 j
D = D * a(n, n)" r% A$ k% j& `4 A1 v0 B
End If/ E* H: l/ V1 r* C
Print "--------------------------------"! D; o$ X+ Q4 S5 d2 j
Print "系数行列式的值是:"; D
- _! I6 l2 ]4 N+ rx(n) = a(n, n + 1) / a(n, n)
; t9 f$ J% [1 ]0 f1 p6 z  i0 wFor k = n - 1 To 1 Step -1 '开始回代
+ h% D% ]- y8 n# R: i: pFor j = k + 1 To n
/ a& R* s) P) e" R5 Rm = m + a(k, j) * x(j)
- E) a4 i7 M& I1 I/ E3 }* X- q6 W1 A" NNext j
% [- B0 a: w$ j$ A( O' K: jx(k) = (a(k, n + 1) - m) / a(k, k)$ e! n* j- u9 x% f0 P- Y5 ?
m = 0
# l' I2 j6 N, m8 k2 vNext k '结束回代
5 p- P. i! l  R
- B; V: _; \1 [; ePrint "--------------------------------"' w7 b" o  a; x2 d$ Z7 S" f  n& R
Print "方程组的解如下:"
5 I/ x) ~; P: |3 _7 t5 @* j: y: r6 Z! e4 G+ T: r
For k = 1 To n! _# H" T& h- _+ \% M- l. e$ _# a7 c
Print/ k2 B% Z- k( j. ~! d$ Z$ Q4 N
Print "X(" & k & ") = " & x(k)8 t0 w$ a' {. A8 u
Next k% X) e, K/ C0 r. B
Print "--------------------------------"
! c" k/ K5 V; m$ z$ ZPrint "其中各行Ax-b="
$ g+ M& h: W2 }+ v* tPrint
9 n' U9 F+ L, R1 fFor i = 1 To n
( ~6 D) j6 z4 A  @. M+ Tt = 0
: c4 z! ]7 Z" U) F8 @5 ?For j = 1 To n7 X/ ^* Z+ G3 n
t = t + a2(i, j) * x(j)
, K* R! a1 y/ H8 ONext j
' B1 ~% Z& u7 E( v* J3 [t = t - a2(i, n + 1)2 E* _3 b; S! h
Print Spc(5); "第" & i & "行:"; t/ w' R, ^3 w5 Y( D# n, ~! |# C
Print
' i2 A, `9 O7 vNext i/ B8 o; t& W$ _, W" a2 X

2 E& F2 ]  F% {5 g! rEnd SubPrivate Sub gauss_Click() '高斯消去法0 \* h, H# S% J) @9 N8 _
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single+ [! ]7 D. R" _6 a- e5 |! Q
i = 1: j = 1
$ T3 a) I- @. F' Kn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)): c2 @& L; ?# p) b' r. H; k
ReDim Preserve a(1 To n, 1 To n + 1)/ R9 ^7 j4 S7 O7 q% A, L
ReDim Preserve l(1 To n, 1 To n + 1)  n) Q$ {" E$ E' t4 Y
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single. f/ {' [# t# w, O
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
' ^7 m$ M0 G3 J/ O; \% [: kFor i = 1 To n+ S6 c$ Y7 M2 q. d. @
For j = 1 To n
" X; z. w" ^% z" Q  q+ @a2(i, j) = a(i, j)) N0 `( j5 z7 x: {: W4 p
Next* K7 ~8 Q* s- k- d4 T) M* D
Next '将a()的值全部赋给a2()
1 j$ ^. M- O6 @+ Z, s+ T" rm = 00 J3 F( k( t7 M1 h8 b: F
D = 1
5 {6 d* A6 I4 m' S& yReDim x(1 To n)
, f; ?5 S3 ]# x9 |% |7 ~Print "--------------------------------"/ R4 m* d. Y, I3 n
Print "您输入的增广矩阵如下:"
% Q/ V5 G0 h8 q' r% m7 q1 AFor i = 1 To n  C( e' b1 l8 z- o3 x  ~
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
( [" n- S, y/ \# u" _1 i1 \0 XFor j = 1 To n* y2 ~' `4 A! v* Q4 `0 l) m- D
a(i, j) = Val(Left(s, InStr(s, " ")))
3 N- O4 B8 D0 x# W% l' S( ws = Trim(Right(s, (Len(s) - InStr(s, " "))))+ e6 F' ]- T8 n; b- r: u# O
Print a(i, j);
" |3 K( I9 ]$ [: e, vNext8 V  q" @1 T1 q# l8 {
a(i, n + 1) = Val(s)
. P4 l- O: s" ~6 e, KPrint a(i, n + 1);
& Z5 ~, I$ r; y: q- ePrint
' `/ l7 X2 u8 X! k, \1 tNext
/ w1 r6 x' I& j2 f) k7 ~9 J/ O: F
! i% c4 H8 G3 n" qFor k = 1 To n - 1 '开始消元2 F5 J# v3 \7 |" g& u, \3 K- d
If a(k, k) = 0 Then
/ i) X8 N+ z. PMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"8 `. n, g: m1 y  n3 ^: N
Exit Sub6 A2 B- F1 U3 y8 u
Else
$ ^4 {: d5 I1 w% TFor i = k + 1 To n. h/ P3 l  N) Y4 `
l(i, k) = a(i, k) / a(k, k)
. q$ h: p' r, r2 _* DFor j = k + 1 To n + 1
5 U$ h& B! }, w: L8 u# b9 V6 ta(i, j) = a(i, j) - l(i, k) * a(k, j)
4 o5 c6 [2 W5 ]. |6 N: nNext$ W) ~5 p4 Q5 I- K: h  T( N! V* o6 {, O
Next
) h/ I+ F9 z7 z2 {% }$ w7 q5 D6 ED = D * a(k, k)- V0 c0 W  y$ w# ]: j
End If  a7 i% i/ v8 g; n
Next k '消元结束
# z6 h9 E" L1 D# V- gIf a(n, n) = 0 Then. }  P/ K9 u+ |" n: z2 O0 p2 R7 V
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"" N3 i2 e$ o7 S: I( g; A( I" {- O
Exit Sub
" y9 s! I. B" F# t  A6 dElse+ o, D* x  O) b! U
D = D * a(n, n)6 [2 i; K: w, N. }, E, `3 b
End If
8 Q7 w; x8 a( D! LPrint "--------------------------------"4 L6 \! p( {. n% r& e. M
Print "系数行列式的值是:"; D7 O- I( p6 j) Q
x(n) = a(n, n + 1) / a(n, n)
! c, H8 x0 A, X) |( k& vFor k = n - 1 To 1 Step -1 '开始回代, |4 L9 n+ O1 \6 o7 k  i, ~8 _
For j = k + 1 To n9 `0 ?9 I& l5 [% H
m = m + a(k, j) * x(j)) R. E/ m# d+ n+ u9 z
Next j
! z5 @; \+ r4 Dx(k) = (a(k, n + 1) - m) / a(k, k)/ ?& ?, ~2 V, r$ H
m = 06 i6 l0 ?* M0 m9 }) K8 x
Next k '结束回代
8 w( O3 F& G! O. t
( U+ Q1 b" ~6 ~4 e: vPrint "--------------------------------"
9 K) k5 o5 @+ i0 pPrint "方程组的解如下:"( t) ], L# r$ `, S2 j+ |
7 Y: c" f1 K( U" i2 t
For k = 1 To n
0 T# _' F+ t& N" ]5 \& f& hPrint
' y0 ]; ^" P: F7 DPrint "X(" & k & ") = " & x(k)* N+ n0 u, i9 |. O$ F
Next k
' t- [& B: O. @* S; iPrint "--------------------------------". D. d* j0 r9 ^+ P& I# L
Print "其中各行Ax-b=": Z1 I  _, r8 i! x- U8 g
Print' T- ~2 M) M. a
For i = 1 To n. O1 W* A, \; o* u% w
t = 0
# w. [/ ~& y. E4 RFor j = 1 To n1 ]) H, a9 p- Y2 |8 |
t = t + a2(i, j) * x(j)
! h# r3 a$ V3 w* g2 [Next j
- N- G: ~3 H# Z# x' kt = t - a2(i, n + 1)' C8 Z# S; X' k* [$ e, \+ C) a
Print Spc(5); "第" & i & "行:"; t: [% w" Z: p; i: i0 ^6 Y5 T3 C" O
Print, G2 s& X& n7 P! g; a3 w5 `2 H
Next i) W8 _8 k/ k  |. _

4 ~" f, I; y2 o0 |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-1-3 12:09 , Processed in 1.232771 second(s), 68 queries .

    回顶部