QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
#
发表于 2005-1-19 17:03 |只看该作者 |正序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法! E% M+ n1 W5 j6 J
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single8 c2 E' O! b2 {- n) U4 z$ a) O
i = 1: j = 1
) f' d( Q2 o" R. Q* Zn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))3 a6 x' u( k8 k/ J+ K1 F2 d: {
ReDim Preserve a(1 To n, 1 To n + 1)
: j2 L1 q3 x! \+ z8 }  q. n+ s$ nReDim Preserve l(1 To n, 1 To n + 1)
, i& G! i3 [, y, bDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single2 @) T- w4 o6 d  j0 C7 x
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
3 `/ m; v7 h& y* d! pFor i = 1 To n
# _% L; E2 c1 V. @6 }0 S+ p. uFor j = 1 To n. E" y. G+ m! D' E, t: R
a2(i, j) = a(i, j)1 j2 S3 t# u+ ^) S8 x; `
Next
) R/ R" f8 g- F7 A' \Next '将a()的值全部赋给a2()
/ A- \# F6 k2 Sm = 04 _* [, Q) Q" m: M' ^
D = 18 N5 X( f6 [( n( Y8 r
ReDim x(1 To n)8 k% Q4 x1 l+ i# Y
Print "--------------------------------"
! T6 U9 m) h; \5 s5 z0 iPrint "您输入的增广矩阵如下:"
% `/ R' @. A' ^+ x# OFor i = 1 To n
* g- A# M4 w. E( Cs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
; ^3 d7 v8 [3 {5 e! `# W1 DFor j = 1 To n* q& I) ]0 R4 W( d) S7 g/ `: @
a(i, j) = Val(Left(s, InStr(s, " ")))' ?. ?6 n/ m0 q8 _/ z, }, a9 a
s = Trim(Right(s, (Len(s) - InStr(s, " "))))+ B  D) Q# w: A& N6 i
Print a(i, j);9 @4 [: l: Q/ i+ v8 q& Z: G( E2 e
Next0 S0 a0 o8 h+ e
a(i, n + 1) = Val(s)
/ ?" V% K: E! z2 z9 k! BPrint a(i, n + 1);# H, g$ R8 Y( k1 m( h  o9 N
Print# t5 E* \. [# J' @; U) j8 f
Next9 x8 [/ x" \+ o0 V- h* B, V
' T4 |: N+ l! J7 \
For k = 1 To n - 1 '开始消元
( @9 c& R& \6 F/ R( ZIf a(k, k) = 0 Then$ b1 i$ }4 U( z5 Y
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
0 w; t5 U( k! y+ S, cExit Sub
# s2 Z2 G# {" |4 y; _, o) s% \Else
# D: Z; {* X! h! @8 NFor i = k + 1 To n
6 c' i) G+ W: \5 V$ @! Tl(i, k) = a(i, k) / a(k, k), f( m, l1 e8 `/ Y, a! {
For j = k + 1 To n + 1
8 R* F) x) `* q. F) Na(i, j) = a(i, j) - l(i, k) * a(k, j)
* o' c; W: B9 ?( ONext
7 m- M+ ?0 B( M5 ONext, K( J/ H" G! L# O" s; N8 A
D = D * a(k, k); ~/ V; n6 O) Q7 A
End If
% C! o: f' B3 m9 o4 ^  jNext k '消元结束
. x" e  x& Z. `8 r0 eIf a(n, n) = 0 Then4 N+ A- b, J1 k' Y
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"+ Z# x# B# m5 d3 ?' f
Exit Sub1 o- w  C9 o7 q4 i, z9 Z0 {9 J
Else
: n2 F! J/ _, s$ m% L, w, d+ A+ @4 HD = D * a(n, n)
: U6 f; G& K4 W$ {3 }End If6 C9 H% C5 G7 t3 [. E
Print "--------------------------------"
" i9 Q1 H8 {$ y. V6 I, m1 K6 RPrint "系数行列式的值是:"; D
1 w4 Y$ U, ~) u( U' D% Zx(n) = a(n, n + 1) / a(n, n)
9 J+ f" i) _; V. g$ o& Z4 zFor k = n - 1 To 1 Step -1 '开始回代
% ]  ~" Z, w6 c: y  EFor j = k + 1 To n
. s0 x8 A8 M; z/ o3 Qm = m + a(k, j) * x(j)
8 V0 e/ t9 Z2 Z( k8 f- _Next j
' r4 w& A$ f$ m, h; Zx(k) = (a(k, n + 1) - m) / a(k, k), ?( q  O3 R8 o; @4 ^% U
m = 0
  w) A" ^' E$ B/ A# mNext k '结束回代7 |7 z/ X1 T  h7 C5 h

2 S+ t; S0 g  d# t, l7 u' SPrint "--------------------------------"
& [0 s9 U0 D! x6 E  b0 _: SPrint "方程组的解如下:"
6 F8 j4 C/ n! Y* r  @, Y4 Y
' u9 S) U9 Z' W' E0 A0 WFor k = 1 To n
; b  O/ t* @% X' \7 o; mPrint
8 ^! O* @" p  E# V8 ZPrint "X(" & k & ") = " & x(k)
9 t7 Z. }. N/ E# INext k
% L- d. u1 x5 g5 D9 e" C7 WPrint "--------------------------------"# a0 A$ m: ?1 R7 _
Print "其中各行Ax-b="; [$ d2 x/ s5 Y
Print) W6 L% f: b3 h- d  E. \
For i = 1 To n2 b* p" ?, C% t5 S  M
t = 0& [, |0 U4 I( z' z9 C- i' {
For j = 1 To n/ y6 O. K' ?! w! A8 h
t = t + a2(i, j) * x(j)
1 [4 o7 k; z: v" ^1 h0 c9 y- {Next j
1 N+ l& `+ E& Y6 w) et = t - a2(i, n + 1)3 g0 J, @7 _6 H2 i! m6 X2 _8 ~  @
Print Spc(5); "第" & i & "行:"; t
2 K' y% Z' y$ o& u; \$ SPrint
( @2 z, |& k! T2 _1 ANext i
* M3 H, @$ W+ q  @5 c9 B& ?
4 [# B( ]# a! tEnd SubPrivate Sub gauss_Click() '高斯消去法
4 x) F$ H7 Q5 b6 r0 f4 ]  eDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
0 M6 S' o- i" |7 Q+ n& fi = 1: j = 1
" S1 l& t9 B( Y; {' B+ d2 un = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)): s3 T3 g6 A) a& v
ReDim Preserve a(1 To n, 1 To n + 1)/ _7 Z  F  Q7 `4 n7 k/ b( Q
ReDim Preserve l(1 To n, 1 To n + 1)
& N; h, Y% s& j" {/ Y$ o) ?0 ~Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single  v, u/ ]' v0 A  y0 _9 i$ p
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
, v5 n3 I: L3 k$ dFor i = 1 To n
! }# l2 S1 O9 N6 @$ R: U: xFor j = 1 To n! w- n! Q  \% u3 m( W
a2(i, j) = a(i, j)
9 E" H0 Z( y; [* [8 A. W1 A0 P4 {$ GNext
, k4 K# z2 a4 ~' kNext '将a()的值全部赋给a2()+ p$ N: W7 U9 l8 m6 e
m = 0
1 Z( H0 n# I0 \' W# g/ ^+ }D = 1/ w5 C* _& u/ {  a
ReDim x(1 To n)2 `) m8 \7 t- `$ v7 ^# D3 s
Print "--------------------------------"
- ]1 B* D! O! }# qPrint "您输入的增广矩阵如下:") T9 y8 ]* Y' n+ O: `
For i = 1 To n
* R4 P* n: m: y3 y& Zs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
5 g$ ^$ H, n0 `2 E2 a1 sFor j = 1 To n
5 _: K4 ?  d6 f8 Ka(i, j) = Val(Left(s, InStr(s, " ")))! |& i. C8 ?# U  y) G) r% j
s = Trim(Right(s, (Len(s) - InStr(s, " "))))/ ^* D+ J6 q; m
Print a(i, j);  g4 h! f6 F/ ~7 u- m
Next
" ?" y" B& D1 c3 \* l8 xa(i, n + 1) = Val(s)
/ l& `8 h0 h* ~% ~4 m! NPrint a(i, n + 1);# d8 d' b9 q: s3 Y
Print- v8 p* ^& s' r& f9 M% X/ I
Next
6 ?' c& o( j7 T& f5 M+ f5 U2 e- z) B0 B! d( Y4 c' O' L% E1 M; a4 ~
For k = 1 To n - 1 '开始消元& ^* W6 l" S2 P) M! e& v1 C
If a(k, k) = 0 Then
( ?6 n, {" m, }2 ^" lMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
/ d4 R, f" }1 |( T! n* b& M$ p, L, \Exit Sub
8 c5 f# G8 H3 LElse
+ m+ i: T, |2 ?; h) IFor i = k + 1 To n
0 l, ^( {" f3 y8 u( c" ol(i, k) = a(i, k) / a(k, k): G2 Y: N" W# D% d  y
For j = k + 1 To n + 1$ O7 E& c8 O5 l' A4 s
a(i, j) = a(i, j) - l(i, k) * a(k, j)
) N( c. P0 \5 c9 y3 |Next2 N% _0 M# P) M/ T" z0 H
Next; P( b# o3 |+ t' e
D = D * a(k, k), K, j' Q/ D( I; O& N% e* E
End If. e9 e2 f2 e( a0 {7 `0 n7 o
Next k '消元结束5 t2 W! U4 H8 A8 t# j: f; T/ r
If a(n, n) = 0 Then2 m1 A+ p* t. I, P% K
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
2 B( G0 T. q% x, w# u$ E7 }Exit Sub8 z" d! j( r) A$ D: W
Else; B' a& o8 L! j
D = D * a(n, n)' i6 f# [; m" @9 z! {2 }
End If
, l, I5 j" S/ k: _  \) a9 _9 BPrint "--------------------------------"
5 u# y" ~6 C: h; NPrint "系数行列式的值是:"; D3 `& c. w% @8 e) U0 x; W% a  c
x(n) = a(n, n + 1) / a(n, n)
& z( u4 U+ u" f% AFor k = n - 1 To 1 Step -1 '开始回代
) n6 W  x8 Y4 y6 j& d# y4 KFor j = k + 1 To n
3 d; ^/ A& C6 \& Em = m + a(k, j) * x(j)" V6 |) P, S0 }. e2 d4 V  p( c
Next j. ~' P# |2 ]: H  o6 D
x(k) = (a(k, n + 1) - m) / a(k, k). Q7 Q6 a5 n) G/ z/ R
m = 09 y& F- b& F' g2 P
Next k '结束回代
8 Z* |% @+ @/ H1 g2 U. G! m
8 M9 s6 l& c1 C8 IPrint "--------------------------------"
- }, J& U! w3 h% }4 n* T, k$ ^Print "方程组的解如下:"
$ x9 S; v4 b  e9 \3 }4 T2 z  D! u; r2 f6 M" ?
For k = 1 To n7 ~$ R; h) y' Q5 V  C/ J1 c' e( v; r
Print
5 s0 Y, |8 T# g9 x- @! CPrint "X(" & k & ") = " & x(k)
7 I# G* y' \/ s4 C1 b0 {2 ]Next k( ^3 t0 ]/ U+ @8 W
Print "--------------------------------"% b' |$ L, v2 K5 _; V
Print "其中各行Ax-b="5 @1 ~% O  n1 @0 i
Print* L' z1 m2 t9 v2 Y* G8 S
For i = 1 To n1 k. s& |3 N/ k& b9 E& r" k
t = 0; V1 c& t+ |- x7 ]; I/ J8 C
For j = 1 To n) z9 v1 E  S# b" X( Q: E  D
t = t + a2(i, j) * x(j)9 H4 c4 \0 Q: P/ U8 {% u
Next j2 B4 z1 c7 Y& _+ s
t = t - a2(i, n + 1)
3 ^% P- S# M0 HPrint Spc(5); "第" & i & "行:"; t; ^$ U5 \4 T# {9 ^8 E0 v
Print
8 [' p3 n; _; A( z) l1 j& ]Next i
9 ?7 N% E3 Q7 g" T1 W! h3 m' W1 {* g* R' b0 d- N( g; V3 l
End 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-9-19 18:57 , Processed in 0.640444 second(s), 68 queries .

    回顶部