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