QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-1-19 17:03 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法
9 x$ u: y; F9 c' A, ~4 Q- p( TDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
! F% l6 w% O9 i. T  Ni = 1: j = 11 }* D9 A6 l2 x( }
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
, P, `9 V- S4 J- s! E# aReDim Preserve a(1 To n, 1 To n + 1)
( y& S2 |1 f+ Y  eReDim Preserve l(1 To n, 1 To n + 1)% H. ]" P; l0 G3 I; H0 x( P
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single9 E* b8 M5 [6 S: A$ }0 h) b
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
2 X% ]$ F8 M7 o; l0 GFor i = 1 To n
5 B8 k$ K, Z# n# qFor j = 1 To n
/ _3 V. M0 d) s0 |a2(i, j) = a(i, j)
! J- R% z8 w# F/ INext
  L) ~5 {2 b' v) Z% eNext '将a()的值全部赋给a2()4 f7 y! d  @2 G8 P* @5 Z) t
m = 0
  v" c" m# D& c0 q! T# PD = 1
1 d. b6 p3 s  ^( c. w' W5 iReDim x(1 To n)
6 t4 B4 x" l% `Print "--------------------------------"
6 k) f4 {  F) m2 q8 ~7 D4 ZPrint "您输入的增广矩阵如下:"3 ?# p# p% i+ X
For i = 1 To n
; V! z; M( W0 F7 zs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))5 {: a. W$ Y, @5 Q! Q/ p! e# E7 N
For j = 1 To n
9 r' \6 N+ q. e' ]a(i, j) = Val(Left(s, InStr(s, " ")))1 o, e: C# O( H3 I0 d. x5 u+ j
s = Trim(Right(s, (Len(s) - InStr(s, " "))))
$ d5 w: t4 c6 YPrint a(i, j);
8 z3 Z- l9 F8 P/ n3 J, _Next
& K0 M' Z. i6 g/ |' ]1 Oa(i, n + 1) = Val(s)% ]; V% m" D+ F5 @
Print a(i, n + 1);
; Y! ~! c1 w2 A3 s: k% }( CPrint: ~; t* x+ e6 B1 G4 ~% y9 N
Next* v3 P/ A: T0 q% h9 c

4 |8 q7 L! R' @! s9 F' E  m; R: ~For k = 1 To n - 1 '开始消元1 L  F' N" M9 C: t# M- v( J" @' h
If a(k, k) = 0 Then. T4 [; f& b- s- y
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
$ {3 _4 g3 q! \( PExit Sub4 i  H! O# s4 P! A/ F! w4 z
Else& U: y$ P# `0 V" q% R1 w
For i = k + 1 To n4 ^3 E, M, x0 X- `
l(i, k) = a(i, k) / a(k, k)3 F) L1 W5 D3 M; \1 s
For j = k + 1 To n + 18 P# j; O1 U( g
a(i, j) = a(i, j) - l(i, k) * a(k, j)# O4 y& n( J* k; a
Next
' s" L; U0 I" V0 L8 SNext
5 j& i- E7 f% A* v) wD = D * a(k, k)
9 t  D5 M- `4 \' j/ [. X- nEnd If0 J2 D# j/ b1 c! S
Next k '消元结束
3 X( @% R3 n; d( f" \If a(n, n) = 0 Then
. v* y, L! D& ]# `) E# I" {' PMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
/ H# n5 n/ o3 \! D" ?1 Z9 BExit Sub
: ]: e9 Q5 ^+ b- Q; d; QElse4 E: Z8 \1 K" ^( c7 |+ P1 j' n* J
D = D * a(n, n)
$ W- w0 U- t! r- TEnd If
& J' |. x. R# D) _4 s# L4 G5 fPrint "--------------------------------"
  T+ K# B5 [6 I( c" L" }6 e0 nPrint "系数行列式的值是:"; D
0 e6 I9 y1 a' Bx(n) = a(n, n + 1) / a(n, n); ^; Z; }& M/ z9 t3 D  E  x0 Q) J3 _
For k = n - 1 To 1 Step -1 '开始回代& \. I! U0 S, g& ]  E; I
For j = k + 1 To n& U4 _: j' A$ P/ ^
m = m + a(k, j) * x(j)
' _- ^: ~3 C( Y1 c9 f3 rNext j
7 {6 ^" _) H( Mx(k) = (a(k, n + 1) - m) / a(k, k)( I* U/ }% d' d0 t9 l4 ~+ }
m = 0
: K% I0 z  K- H6 G) @5 z& ANext k '结束回代
- d/ }5 q+ _9 O5 n- [% L" I* R0 X8 E4 @) F4 d5 [
Print "--------------------------------"
, K3 Q& l  u" u5 {( U+ u9 JPrint "方程组的解如下:"
! b- }* d5 \3 F" }
9 L6 u8 n2 ]5 jFor k = 1 To n; g' D' M4 @$ f. x4 r
Print
+ u( p+ y, d1 j3 iPrint "X(" & k & ") = " & x(k)
* b  l4 h+ S5 w( J$ G/ ~+ dNext k; Q2 |( ]3 G7 K
Print "--------------------------------"% O0 k; Z5 h2 S! ?' r* D1 [
Print "其中各行Ax-b="
2 W/ v7 B2 {  I6 fPrint
$ H" |; W* }1 @) }0 t& l0 e: [For i = 1 To n4 J* W1 ~/ ?- [( I
t = 07 N" J) V$ ~9 Z
For j = 1 To n/ [( [$ e& R0 u; V0 w2 j6 m
t = t + a2(i, j) * x(j)0 F) @) O1 W7 H; q) M5 ^  e
Next j) n" n2 g. T5 U7 @6 [
t = t - a2(i, n + 1)
. j8 W: g. Z3 w/ b5 i$ [  CPrint Spc(5); "第" & i & "行:"; t
6 j% Y. g. p! E. d0 `Print
2 E$ w- {4 V  i! R. |$ lNext i
& p& w! @4 D8 ?% c/ |! F7 [$ ]! e2 {9 t) v! N9 L
End SubPrivate Sub gauss_Click() '高斯消去法
- W+ ^( H/ e5 A9 K5 cDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single% X$ C/ `$ e6 W
i = 1: j = 1
/ E1 K6 Z  x' ^- o0 on = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))
& v& m# e  z4 t/ q" rReDim Preserve a(1 To n, 1 To n + 1)9 p8 r$ Y# D9 Q7 d' }* q
ReDim Preserve l(1 To n, 1 To n + 1)7 B. K, k5 G& ]# K3 H2 s, ^7 B
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single2 P! ?1 n# F- U2 n- ^
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()$ Q9 R# ]* v1 B
For i = 1 To n7 w8 ^" l3 g0 m; j3 l7 a, ?
For j = 1 To n
/ g0 [4 ^+ Q4 f0 O( U% ?/ La2(i, j) = a(i, j)
# F& D9 ^# ^# x0 j+ c; O2 E0 hNext
  f4 O9 H' G( x# _: R, ^Next '将a()的值全部赋给a2()# f$ ~0 e% \+ K. m" c+ {' E
m = 0, p+ Y/ ?9 ?5 s0 e; y" j% \
D = 1
3 y& V, t2 i5 _. X. pReDim x(1 To n)
3 ]5 v3 ^4 f: D7 G$ H$ {, q. `Print "--------------------------------"
) C+ H: a3 H" I1 N: rPrint "您输入的增广矩阵如下:"+ k  r3 z  n5 G) f* q' a! u' V) t6 Z
For i = 1 To n
% D' l! I6 S3 O- R/ B; Ts = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))8 l: l) R% Z4 i8 p6 H7 |$ A. T
For j = 1 To n& g  s( v2 Y  [2 N# `: n# u% M; D
a(i, j) = Val(Left(s, InStr(s, " ")))
1 T! r! M4 X" vs = Trim(Right(s, (Len(s) - InStr(s, " "))))
4 _6 K* T5 z8 ~2 i' H/ e* FPrint a(i, j);$ J, Y$ M2 `; h" o, H& ~
Next, Z0 q! Z) E8 Y/ ^
a(i, n + 1) = Val(s)
, y1 r. U* V, q, K( H3 u3 |  NPrint a(i, n + 1);
5 F0 R# G, `) N  x: QPrint
9 b: ?* }( }9 U* H3 yNext% o6 t, j/ K# Y. R5 t2 L; P" R

( J( t9 j' F5 k  T9 b& ZFor k = 1 To n - 1 '开始消元! M9 K  w5 w. K; [  W9 d
If a(k, k) = 0 Then! R+ [0 ^  f  J
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
+ _: ?6 j1 e; Y1 dExit Sub! x8 a- m2 V  q& O# l3 N, K4 h
Else( e5 f  R: J+ ]
For i = k + 1 To n
  c6 t. H1 v: V0 J/ ?l(i, k) = a(i, k) / a(k, k)/ a6 c2 i1 ~- T3 i# \; `
For j = k + 1 To n + 1
1 K- l' i& C( o5 J" ~& g9 xa(i, j) = a(i, j) - l(i, k) * a(k, j)
& e& _; J. |3 c& l" G; P; X5 z' UNext
, o! w9 n1 U/ G! S$ DNext
* `+ n: ?9 v% BD = D * a(k, k)3 U, x4 h: E0 }7 [
End If. I! B( k' r" ?: R- w+ L
Next k '消元结束: ?+ f+ O  E, K7 N& A% T, \
If a(n, n) = 0 Then# }1 R* [! {4 f# _6 s4 Z
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
& e% I; B) l2 }Exit Sub& @% |  |% k; N
Else$ O3 q& Q# H8 V& R1 K/ X8 q9 G
D = D * a(n, n)4 I& n8 i2 N! Y0 {
End If
7 s3 C' }0 ^6 }" QPrint "--------------------------------"! q  U( C9 I  F1 P# D
Print "系数行列式的值是:"; D# t7 w% G% [4 V* D' Q) L
x(n) = a(n, n + 1) / a(n, n)
2 s; n9 I3 S: r3 k4 _For k = n - 1 To 1 Step -1 '开始回代
; T  A0 y+ }- x' kFor j = k + 1 To n+ d. I* _% L$ z0 S) u* x8 m) a# ]
m = m + a(k, j) * x(j)
- V9 ?, [) s9 x2 aNext j( d! f1 v% A$ K& K; Q. t* K# l6 H% [+ K
x(k) = (a(k, n + 1) - m) / a(k, k)
1 ~: g0 H4 J) Rm = 0
& A1 i& k% E; K3 C7 A$ s) g# n- dNext k '结束回代
1 Y+ Z6 Y( R" S9 b- j  E$ p
% P& b* j7 O0 l7 j" qPrint "--------------------------------"4 ~: ^! _' u2 S+ {$ i- h9 g: ]& p
Print "方程组的解如下:"
% [5 q3 p2 T% |4 B4 g; k$ ]! [6 l0 p: V: z) }
For k = 1 To n
5 a. K+ F: @6 a) P, vPrint8 X2 p& N6 e3 W4 H
Print "X(" & k & ") = " & x(k)3 k$ ~( R* A( U
Next k
! p7 n$ R. \6 s1 E1 O0 j$ P  bPrint "--------------------------------"( B4 i- U5 b* D0 p& f
Print "其中各行Ax-b="9 k: [' q: k  k* E2 p
Print9 H8 v+ }+ j; M- ~# E8 _
For i = 1 To n1 q- f0 ^0 s& N5 d) o' k
t = 0: A' g8 K9 \0 q6 X, ~0 G
For j = 1 To n6 q* W7 m- h% {
t = t + a2(i, j) * x(j)
% j7 M0 D9 S: h, h* LNext j
% S% U* ]3 h3 B+ L# w4 xt = t - a2(i, n + 1)
$ w! |3 U, r' h9 W4 M9 J- G- ]Print Spc(5); "第" & i & "行:"; t! k7 c9 ?4 `9 ~8 C/ N" O
Print
2 U9 x- {" g! ^Next i
* [+ K% P+ N7 P" Q0 b
0 o& Y0 h" Z8 m6 {3 k  {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>
回复

使用道具 举报

4#
无效楼层,该帖已经被删除
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-30 23:17 , Processed in 0.468056 second(s), 74 queries .

    回顶部