QQ登录

只需要一步,快速开始

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

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

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
#
发表于 2005-1-19 17:03 |只看该作者 |正序浏览
|招呼Ta 关注Ta
Private Sub gauss_Click() '高斯消去法' s* }/ X. G$ S6 I' l* J1 F1 p
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single
+ R, w# K& l; a' `- Oi = 1: j = 1
7 K- j  H4 j2 t: i: z$ j% s$ Rn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)). l7 t  y7 i) c& h: z5 _# P
ReDim Preserve a(1 To n, 1 To n + 1)
- {! M1 [3 `# V/ Q; V1 A" w$ ]ReDim Preserve l(1 To n, 1 To n + 1)
' D4 [% r7 p( t8 IDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
$ A! G! E/ t" O( R$ KReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()+ s4 s& Y9 h7 K
For i = 1 To n
( B5 U& A: |' b  d0 F4 }1 Z# X1 dFor j = 1 To n5 U& G9 U' g) k) c
a2(i, j) = a(i, j)
; x7 w5 z% ?' c$ YNext
, L) z- H1 a4 |, ENext '将a()的值全部赋给a2()7 K; ^$ W5 ]% W! J! {* A' P' N
m = 0
9 O7 @* F& W, U% {: z" DD = 1
* U' S4 A+ [' w' G8 H3 A& GReDim x(1 To n)
8 ^; `) w9 y3 R' [Print "--------------------------------"- X  N+ J( Q& N" V9 h: K) d
Print "您输入的增广矩阵如下:"2 q) a: d6 k/ Z8 m/ j# _7 {
For i = 1 To n9 R4 s" q# i8 L0 U2 O& e
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))' o) p0 ~! c2 _
For j = 1 To n
9 Q1 A) X0 R# z" a: ea(i, j) = Val(Left(s, InStr(s, " ")))
+ [' f: K8 C. K3 us = Trim(Right(s, (Len(s) - InStr(s, " "))))  X6 ]0 d0 c' _* h$ o
Print a(i, j);
, X. D6 F6 b# S/ P! M# `+ SNext% K* D* C$ \3 k) r8 j' K" F! S. Y
a(i, n + 1) = Val(s)" f4 a+ R8 [( P) G; a
Print a(i, n + 1);( r) B8 W5 F2 o, Z" @- J
Print
) u+ \0 N% {+ ?. n/ Z& FNext; J$ F) S! b# z) ]

. Z  C# ?4 C& p* w2 G1 Z' d1 f- ZFor k = 1 To n - 1 '开始消元
% r$ C9 z- X$ G" A! J: nIf a(k, k) = 0 Then8 A8 k3 h+ q; s; {0 ?; y
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
2 ~. P) A; |8 H4 |7 C- @Exit Sub3 }4 r4 [. f# A) I4 e6 P2 L
Else/ i2 j" {- i7 \# f  h/ W: j3 f
For i = k + 1 To n7 T+ i$ {+ t8 P" Y7 A
l(i, k) = a(i, k) / a(k, k): g4 U# q' Y. i
For j = k + 1 To n + 1: Z$ j% l. D0 p; t/ |$ D. q
a(i, j) = a(i, j) - l(i, k) * a(k, j)
! |" }4 O0 Z! W' m! P6 PNext2 g5 B2 [% w/ _* @, Q4 Q% p
Next4 T9 J& c4 ~) {! r( U! G: |
D = D * a(k, k)
5 d9 V8 ?6 [( x: B. o6 F5 YEnd If' ?; ?2 ]- Z& q) ?* G- w  y
Next k '消元结束" v" D+ j% e' G' U3 w# T
If a(n, n) = 0 Then
. i& f5 y  Z. V: @MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
6 u7 j% ]" `5 \# N8 H+ I+ IExit Sub
" P% m/ l0 e' c% f, ~  H' TElse
" X9 X) K* ^1 b1 ZD = D * a(n, n)
3 L7 x" K9 U- U: f( YEnd If
" @, ~' h" o. \0 R& _  g% S  w0 pPrint "--------------------------------"
7 b7 h3 K# p- m( l6 f7 h+ @5 i, s# t$ fPrint "系数行列式的值是:"; D
+ C9 _+ ^+ `( V( C! A5 Tx(n) = a(n, n + 1) / a(n, n)! T; a$ `6 o# R+ O3 T
For k = n - 1 To 1 Step -1 '开始回代+ x/ E) y! t; v& [& \
For j = k + 1 To n5 K( r+ I2 J) u: V# _* _+ y6 N  y9 u& W) U
m = m + a(k, j) * x(j)8 }: n8 x* p; u4 n
Next j
! X+ q; T: A0 h8 Sx(k) = (a(k, n + 1) - m) / a(k, k)
, N' P7 _. b  T1 s% W9 d& Xm = 0$ B# l2 A) ?. V# j
Next k '结束回代
" E; U$ c$ y# C" W# _( d& s- A0 m4 j( Y2 e! X9 m5 R7 x) g
Print "--------------------------------"
) ]8 t9 A* [0 N5 |Print "方程组的解如下:"& e* P/ G2 I1 x$ i' n

9 o6 L5 `& g1 ~6 I9 G' jFor k = 1 To n
" Q4 a3 T% P! |( }/ m5 M* uPrint
% }2 v$ r. ~9 v5 T" K# C$ _, tPrint "X(" & k & ") = " & x(k)3 n0 h* m4 f' l# W! `5 ]' @/ m
Next k" j: |' C, h; g2 j% e% ]" B4 G
Print "--------------------------------"
1 h4 {' s* @6 t. g: l1 o0 R* @6 J9 [6 NPrint "其中各行Ax-b="! V) W! p, N% ]/ x/ ?3 Q; Z
Print
) e6 W* {6 H9 g" h. j3 w- C( `% u) LFor i = 1 To n
3 b  Z0 N) I% r+ U: l( Q9 ct = 0. z2 r; j. ^- r
For j = 1 To n8 E& b9 p/ W2 p1 ^: \9 R# }) B
t = t + a2(i, j) * x(j)2 @/ B2 G8 o& P7 }% |8 x
Next j
) f" E2 h6 c) R. z& K7 Pt = t - a2(i, n + 1)0 [3 j  v* c# b
Print Spc(5); "第" & i & "行:"; t
3 x( V+ d6 ^- Q; F9 ^  W- }Print
  ^6 r6 F9 L. K' _# _8 c! g, MNext i8 i8 I$ ~' y  N5 R; c8 Q) B

$ M6 _( u1 ^: L; F" s. C  Z5 p! g$ bEnd SubPrivate Sub gauss_Click() '高斯消去法, U) F/ t: k- C
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single" i. w+ k# C6 w! x+ F
i = 1: j = 1
4 ^. F; g5 T5 y* v; S* K- fn = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# R) v+ y; K  b" l
ReDim Preserve a(1 To n, 1 To n + 1)
$ U7 K( S1 Y5 sReDim Preserve l(1 To n, 1 To n + 1)2 r5 K) ]/ _' o- J
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single
- W! U3 `! w, d4 [" AReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()
5 }' t, U, \0 }% yFor i = 1 To n0 C4 k6 V) H3 v2 F* I( [
For j = 1 To n" G6 U4 V1 {9 h3 d" Z
a2(i, j) = a(i, j)
$ _2 K/ v9 N. b. M, C, T$ INext. O0 C9 Z1 M& ~( e, U% Q5 V
Next '将a()的值全部赋给a2()& e" F0 k/ J3 c) v$ P
m = 0
) Y1 U( E# A4 f% B' J  @& d1 L& HD = 1( _$ |: o  t% g
ReDim x(1 To n)
4 n. V$ C& L3 j3 l9 i& yPrint "--------------------------------"+ J0 p0 J/ b2 U* ]# i; u
Print "您输入的增广矩阵如下:"
! P# {' q5 F3 YFor i = 1 To n. v* T- i0 E) y" z  X
s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))
: G6 Y% D7 e+ U! a7 I& j3 z* fFor j = 1 To n6 l( f8 A+ c6 ]" B3 g, {8 s. t! y, N
a(i, j) = Val(Left(s, InStr(s, " ")))
2 A' D8 F4 y; D# as = Trim(Right(s, (Len(s) - InStr(s, " "))))" ]3 U# X2 s) M( c
Print a(i, j);
/ ^! j$ ^) `3 N$ K0 ~0 ]# l5 ]Next# N5 R9 z7 o" j* M0 t
a(i, n + 1) = Val(s)
) W) j5 W8 s/ tPrint a(i, n + 1);
# V* u% ?' M% l; NPrint! ?9 S( s: ]5 ~+ W4 n& Q. o8 ~
Next+ Q7 n0 H% i3 M# L$ X( u% a/ d
0 V$ u, k' k- a0 {
For k = 1 To n - 1 '开始消元
2 x1 M+ h; j0 LIf a(k, k) = 0 Then" {/ e% f% f: K& C
MsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"
* ^2 I6 Q" H* |9 G" R) l+ j$ fExit Sub
) `, b% t& d* s6 v2 TElse+ }' f: f/ V8 j9 Z$ X" W
For i = k + 1 To n
* G3 x6 l* I7 p: P0 o# ~l(i, k) = a(i, k) / a(k, k)& I5 t6 C- K, j9 v2 a
For j = k + 1 To n + 12 H7 @8 \1 S5 q/ q6 Q; ?# {
a(i, j) = a(i, j) - l(i, k) * a(k, j)
( O+ W+ q) v6 KNext
; X, W' a$ i5 i7 H8 L# hNext
* ^4 J' m2 u) R$ q3 \4 R! o6 UD = D * a(k, k)
" O+ `" ^+ d0 |+ N& o( h6 XEnd If
& d/ `9 x9 u# G+ a. P7 G& g9 tNext k '消元结束
4 }- f3 b# g' D! kIf a(n, n) = 0 Then
5 R! p1 X& Q; o7 B% [5 o% pMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!"
$ ?# R  q% \' R0 b' ^Exit Sub
$ b, _, X, e0 @/ F5 ^Else
8 r7 ?  J8 O) a1 p* t9 B, ^& h+ fD = D * a(n, n)5 X9 D- g: l% M' `% i3 g
End If
9 V6 m8 t5 M9 [/ |Print "--------------------------------"
7 g' `# @6 A- gPrint "系数行列式的值是:"; D5 \$ r$ |4 d. t8 f9 x3 z& E
x(n) = a(n, n + 1) / a(n, n)9 k4 K6 S' f- \( K' v: q
For k = n - 1 To 1 Step -1 '开始回代. C1 y& O7 F6 s
For j = k + 1 To n
' u* T1 w  K  K2 i& ~% J  Om = m + a(k, j) * x(j)' _# S9 f2 q' p! o/ e
Next j; }' A! a8 w# r  W! U. |
x(k) = (a(k, n + 1) - m) / a(k, k)
+ k* \* E! e7 ^# ?. F3 K4 _/ jm = 07 i1 g+ ~, m1 N) s
Next k '结束回代9 G5 w" J5 ?& u. D* a
4 e3 e9 k& P- z: a+ \
Print "--------------------------------"
: M) T% b5 b7 zPrint "方程组的解如下:"5 B; n& {. D7 \+ L4 H6 s2 o
1 \$ ]! F2 j$ d
For k = 1 To n( A; g5 L2 ?- q9 N! h
Print
; W7 {! Z2 C) ^$ [/ ]9 LPrint "X(" & k & ") = " & x(k)2 ~( W- k) I. w# W
Next k
) \" U0 ^/ G+ ~4 p! Z% V7 u- dPrint "--------------------------------"
5 n3 g" m- u: x0 Y/ S/ O8 xPrint "其中各行Ax-b="
+ @/ N4 t: j( k: K: iPrint
! ~! _$ k  |7 EFor i = 1 To n* C' d9 K/ x' _8 B
t = 0
4 Y) F0 q; M0 T9 y* ^: a4 f* IFor j = 1 To n
5 S3 f; j9 q9 ^t = t + a2(i, j) * x(j)
5 h: t& a  [7 HNext j
: ]) I+ {8 Y& K- Wt = t - a2(i, n + 1)4 F. I. Y' ^: \: n. j& p
Print Spc(5); "第" & i & "行:"; t
6 [9 J$ [% T. t' Y, hPrint; q9 j- X" l" d' g8 ]
Next i
4 w/ M  d$ p2 g+ K! ~  g# G2 t0 [5 [% B; `& N
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-7-18 12:33 , Processed in 0.441449 second(s), 69 queries .

    回顶部