QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
7 p5 [" _$ s( s  H6 U, f. eDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
( J; D! H7 x& n- `! `i = 1: j = 1+ c9 v8 B! d: v: O. I1 ]- l( w3 R$ ?, \
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
2 t  F1 U; }& i) c6 p2 QReDim Preserve a(1 To n, 1 To n + 1)" W/ s( `/ S8 O$ }* G1 A2 x& }
ReDim Preserve l(1 To n, 1 To n + 1)
) `  C' ]! E- ?% k( v7 yDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
6 T, r0 J/ z& @, ~, W4 z! jReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
9 Z! A; a; f: ~/ pFor i = 1 To n( ^, X! h* ?/ Y$ f5 ~
For j = 1 To n4 c! i; f3 u0 ^
a2(i, j) = a(i, j)) v9 S) ^9 L& b8 }. \. \6 l& Y
Next
4 a" Y' z' \9 B* ]: m& dNext '将a()的值全部赋给a2()2 b# ^, W) h8 |6 r9 j$ I+ M- K
m = 0
$ U9 h1 ^( X( B+ x. ND = 18 L2 M9 C# e: j. ]
ReDim x(1 To n)7 R. z" J2 O9 `% y2 I5 y
Print "--------------------------------"
5 M5 r, [' ^* \( A3 ~Print "您输入的增广矩阵如下:"
% O' z2 r: J. k- z( o4 b/ uFor i = 1 To n
0 G' N9 z: {# q, p, T1 W) ~3 vs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))" x' H* o) N+ ~3 c3 I% {
For j = 1 To n4 A2 }6 O$ A/ s3 P& S" ^/ M
a(i, j) = Val(Left(s, InStr(s, " ")))
! ]% X+ p: a7 a- P( j3 Z7 q' Vs = Trim(Right(s, (Len(s) - InStr(s, " "))))5 x5 u; Q& Y2 [/ i/ d$ z$ U1 U: u% B3 i
Print a(i, j);
* f8 T" e9 V% C! `# j6 p$ hNext7 u! H7 A5 [; r7 C2 v
a(i, n + 1) = Val(s)7 g# b$ w. u$ c3 C4 E6 p
Print a(i, n + 1);
+ Q3 c+ _, B1 u" gPrint7 v* C& L. c7 I& a/ H
Next& U7 z. W/ G" E

' }; Z$ \- n4 \: uFor k = 1 To n - 1 '开始消元3 Y2 Q; e" n! a
If a(k, k) = 0 Then3 J# t1 @9 o0 ]( }
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"1 c$ {) t+ k2 Y  L
Exit Sub
) p( `+ q% H0 A6 v1 H- y! j5 iElse% ?3 z9 s/ v& ]/ t' {" y
For i = k + 1 To n
% w7 x+ h4 p. q! b5 Q7 @l(i, k) = a(i, k) / a(k, k)* u3 n) k9 B% ^4 U8 v& H
For j = k + 1 To n + 13 ~& b" H( X2 s$ h
a(i, j) = a(i, j) - l(i, k) * a(k, j)
/ e/ x" W, R7 E& v1 x9 BNext% H4 @' l: {2 C* f
Next
  G9 b' x8 H! w$ e; V: gD = D * a(k, k)
  I) |3 l, E0 Q* ?0 h& M3 iEnd If
' b: z, \) i2 U' W4 M- I% KNext k '消元结束1 Y3 ]( {! s; }( P- L: g& A5 f
If a(n, n) = 0 Then
1 b7 i( G/ V2 j9 c, IMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!", `0 g$ G5 D5 K6 x5 t  U
Exit Sub
8 Z$ n  ?' ~0 n1 o% y5 P# kElse+ ?+ C  m+ N, m! e$ ^( |) \  h
D = D * a(n, n)% O( x) A, F6 [  w
End If
. ~3 v  A( _6 Y, W9 _9 w( uPrint "--------------------------------"2 {. H0 C3 d' A6 a7 I# V) G8 P
Print "系数行列式的值是:"; D  {# p1 y% z. P& w9 ]
x(n) = a(n, n + 1) / a(n, n)
, ~' @$ q0 R' B+ {' WFor k = n - 1 To 1 Step -1 '开始回代" F% N' D# X$ n# m" J: H) i
For j = k + 1 To n
; X* t5 n  o$ L% F# Vm = m + a(k, j) * x(j)
4 l$ H) a7 M. R$ C/ ]Next j
2 O; h2 \3 ^8 i# w' m. ix(k) = (a(k, n + 1) - m) / a(k, k)# c0 B& _" V# N& P: M0 m
m = 0
* H) v5 D% |: K% }5 v+ L7 \Next k '结束回代/ k8 b; n$ \+ k. }4 R0 W- \
' |. B- Y- Q2 N/ l5 m& F3 }8 m
Print "--------------------------------"
% e0 U; P& d' @0 t$ zPrint "方程组的解如下:"
3 {; i2 N  O& O# E; |3 Z* h# [5 o
/ l" z$ X! P8 G# O  c- OFor k = 1 To n1 U( X. S( ^7 t0 G  `* u, G! B9 c
Print9 Z& i6 j) N5 G+ t
Print "X(" & k & ") = " & x(k)
4 x. A, A1 o  T+ s( Z# xNext k
9 a+ H, s( B0 @/ a- c6 wPrint "--------------------------------"
# Y4 d: \8 e3 ]Print "其中各行Ax-b="
2 H" e0 e$ ]2 Z- P$ `Print
6 {9 w& @7 E( `( J7 [+ WFor i = 1 To n; e) ]8 R$ \2 O
t = 0
! g, R( M2 {1 q$ a& W7 z. JFor j = 1 To n
. W( Y: d. ?7 I3 M  O2 \; ?t = t + a2(i, j) * x(j)
( k5 z8 j* ?. i7 A. V$ c" O8 QNext j
/ g& J' y; G1 C% J' T9 Pt = t - a2(i, n + 1)! T3 A" l2 W0 p2 t2 R4 S
Print Spc(5); "第" & i & "行:"; t* z: |3 S2 |7 u. l# i: v) r
Print
+ u8 e2 I, L+ I- O. Y* FNext i7 _- N: n) d& c- G8 x, G

/ T  D: T6 W: W& d# X' \End SubPrivate Sub gauss_Click() '高斯消去法
# P. q  I2 X5 F4 J/ |Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
5 n, `' R; t5 m  L4 ki = 1: j = 1
( `# W# G  y2 O) H* ?' W" j1 sn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))+ m, w" i: L. L* _! e
ReDim Preserve a(1 To n, 1 To n + 1)
0 E6 g$ ~' {! c! T  u  JReDim Preserve l(1 To n, 1 To n + 1)
" M/ {' o1 w7 N+ XDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
( B! ~1 i. B, S* p, }ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
8 ]( D+ q. X7 }/ TFor i = 1 To n
1 z" R- R2 }* u7 E) C: m5 FFor j = 1 To n
# K; E7 ]$ F+ |# S3 U3 j( J' `; ~a2(i, j) = a(i, j)
$ C: I/ d* h& e5 UNext
% M' _4 S( @9 V9 n7 ^9 m% f& mNext '将a()的值全部赋给a2()
& D3 X5 p/ o6 ^& Bm = 0
' _* [  K  f5 X, i3 AD = 1
9 Y# K/ X( ^: N' I8 GReDim x(1 To n)
- ]% o% O( B. z4 I0 t% M0 KPrint "--------------------------------"
4 F1 G. P; M$ f5 w2 ^" p3 k+ F$ {' UPrint "您输入的增广矩阵如下:": M. `' v/ ?0 r9 G8 F. |2 w9 S+ J
For i = 1 To n
7 q) _6 H; R1 V! p8 Bs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
5 P/ g- {+ U3 b  SFor j = 1 To n
% u6 z% x% s3 ra(i, j) = Val(Left(s, InStr(s, " ")))7 k. A  L$ s/ ?4 d
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
* e3 c, ^& R3 p* }& a. p- UPrint a(i, j);
( Q3 k! k! z" q' i7 gNext
1 H0 Y$ C$ O# E" \$ Ka(i, n + 1) = Val(s)0 g( C( M% S' u! Q
Print a(i, n + 1);. e2 I( S0 o$ q8 E
Print. j6 P# q' ^; z2 [+ l# n8 r% |/ K
Next) f6 X' q" x0 s  i

, Z4 q9 P7 |+ ^  o% @4 {2 q' m' hFor k = 1 To n - 1 '开始消元' R( a& Y* ^$ r5 ]2 _0 C
If a(k, k) = 0 Then
* w3 O: ~1 _1 y+ q7 ~" [MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"# U# h1 n% l( n  V- `% {/ P$ j
Exit Sub
7 i, F* h2 @' R  z; a" i$ uElse* i4 H/ Q2 P. }
For i = k + 1 To n1 `% x3 u- [2 S3 h  ?2 A0 g: f
l(i, k) = a(i, k) / a(k, k)+ n- j4 t' w' H# |# j& H
For j = k + 1 To n + 11 w: G- E6 a& ~! f% ?9 t; n
a(i, j) = a(i, j) - l(i, k) * a(k, j)
2 h! R7 ~' u2 h* o$ q$ b% cNext
8 {4 o  `0 ?" e1 A2 |" A- p: YNext. }8 r# e, C+ o8 T4 B- n  @) m
D = D * a(k, k)# i8 a" D9 _1 x% ~( j
End If. J3 |$ Y+ h2 N6 n
Next k '消元结束
4 R6 ]4 B8 n/ s8 M/ G: b5 RIf a(n, n) = 0 Then; m7 ~1 o, ]# ]) f( B- s$ n
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"" U; V2 Z' v: y/ d7 g6 T, H
Exit Sub0 n9 a3 T2 T- G" X, {3 f
Else: D7 ^( F, N0 W4 D; n' Y* K' o
D = D * a(n, n)- z+ `4 K7 }- q
End If" T. i: g: L, g/ {5 j& L
Print "--------------------------------") a: A5 ]! u% u4 a: m7 i' E2 M
Print "系数行列式的值是:"; D4 T0 A( H0 |8 r1 z- G
x(n) = a(n, n + 1) / a(n, n)
$ _1 g1 v: [1 T' h/ {# lFor k = n - 1 To 1 Step -1 '开始回代6 y9 L6 ~% n0 s) Q( |: v1 N% }' {
For j = k + 1 To n" I6 w/ ?0 F1 ^! g7 G3 P
m = m + a(k, j) * x(j)7 K; q1 h1 J& S' C3 M5 x5 {
Next j3 v8 y5 `) r9 ~
x(k) = (a(k, n + 1) - m) / a(k, k)8 A% {! x9 J  Z9 ?9 S
m = 07 o0 a( O8 u$ j2 O  d( w( z* a7 j
Next k '结束回代) A, l) K2 z# `/ h8 H# F
6 H3 U* ~& ?8 O, T- }1 x# K) p
Print "--------------------------------"
& W( E- \2 _/ G! ]" g  z, GPrint "方程组的解如下:"2 \+ P4 C9 U0 m' D( e# F- g

+ o, h' X$ k$ X! HFor k = 1 To n; x7 t5 I; x* O+ C
Print
! F4 H2 s+ \- J) T4 z6 k6 ?- y/ h! @Print "X(" & k & ") = " & x(k)
7 b" d- J, @( UNext k
+ W6 J7 W* A3 @+ U# LPrint "--------------------------------"$ T% l5 H' s% I$ u) U+ u4 n% U
Print "其中各行Ax-b="
/ C- A. }1 C) ]! ]& K6 I& LPrint
4 X0 X% v3 ^7 p' c1 P5 a7 PFor i = 1 To n! A  e5 `; n9 N& z4 c7 w! I8 ?  U; @
t = 0
) k0 Y5 r# h2 DFor j = 1 To n0 Y$ e$ l' m3 w% c  J* ^% _9 @
t = t + a2(i, j) * x(j)9 p& X1 L7 a/ J* R4 X
Next j6 X- z2 b* h" ~
t = t - a2(i, n + 1)
& |& G7 z8 ?# IPrint Spc(5); "第" & i & "行:"; t, I( Y; A7 u: w: d# k' o. C7 X
Print
' Z4 h2 Z+ p( r; X$ qNext i; j: V4 A3 I5 ~+ u

0 \+ x: d3 h1 ~5 _5 @6 V! [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-5-31 03:51 , Processed in 0.601382 second(s), 67 queries .

    回顶部