Private Sub gauss_Click() '高斯消去法 / s! Q5 E0 I! U% g8 fDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single6 P( O! e; f4 F
i = 1: j = 17 v1 F8 b* N+ H
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))! g1 j" n3 a7 M' F; x" d1 Y
ReDim Preserve a(1 To n, 1 To n + 1) 6 Y- H$ U4 r- w% vReDim Preserve l(1 To n, 1 To n + 1) 7 O/ ~! d2 W% J# ZDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single; T) M7 V+ _8 c$ x6 e3 c2 N7 R7 Q
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()' P0 E) [7 g$ e6 D1 A( i3 ?' t& K
For i = 1 To n0 i+ U( Y$ l, L2 b3 P! _6 Q
For j = 1 To n8 ?. `3 S8 M/ T% C. b; _' J" i
a2(i, j) = a(i, j)2 r6 Z- x+ j9 S9 J0 N5 i& N5 c w
Next 3 u) L. i- Z1 o+ O; oNext '将a()的值全部赋给a2()- M6 T X# R. G3 V* l
m = 0 6 ]: W+ Y/ K9 LD = 15 r4 @0 [2 A- r) A
ReDim x(1 To n) & W) k& w2 ]* y! o4 K, bPrint "--------------------------------" : Y% Z4 P9 J7 V0 XPrint "您输入的增广矩阵如下:"7 P: d. L/ v$ k( s0 f0 x+ p# J
For i = 1 To n ' f! p1 G" N) n& q* f/ }- F9 N8 O. ^s = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) $ O" I3 u! r# X% KFor j = 1 To n $ i' F' D" x0 q, \5 sa(i, j) = Val(Left(s, InStr(s, " "))) & I: r" L/ D3 s& ?% v$ S1 t [s = Trim(Right(s, (Len(s) - InStr(s, " ")))). n3 v _+ Y2 {2 K/ `
Print a(i, j);- I2 }6 D' }& v- N
Next: k" a( x) ~8 r% L
a(i, n + 1) = Val(s) # b k% ^7 V5 |Print a(i, n + 1);, b. _, [' f5 F. H8 [& K6 l; V
Print7 J2 } h4 H5 ~: v; x
Next 4 i5 O: m3 r% {) `8 w$ w2 Q6 `7 b" }- e: ^' i$ S0 e6 d3 E& M
For k = 1 To n - 1 '开始消元2 F g. @ N$ x5 }
If a(k, k) = 0 Then 5 k, Q1 n2 P: C. Y( u& c4 O0 CMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" - ?3 t1 {& c7 t% E) i- OExit Sub " ]" }8 k4 N ?+ VElse 8 f/ Y' e. |/ I7 x4 n9 Y) H' B4 b5 ~For i = k + 1 To n# H8 G( n2 k# J( M
l(i, k) = a(i, k) / a(k, k) 4 X6 m% C1 d4 vFor j = k + 1 To n + 1 3 g3 t$ u* [7 Y' S2 n# R( Ca(i, j) = a(i, j) - l(i, k) * a(k, j)7 W2 q0 g: L$ Y, c) \6 ?+ \
Next 2 t, N4 O& I6 v% o6 RNext 5 O5 m3 ~/ s- ] c2 A$ K5 h! QD = D * a(k, k) # i4 k$ ^* d% Z4 ~5 U: A( x; p+ ~6 tEnd If / n2 @( {- b: e0 Q/ [& ? nNext k '消元结束1 w* v( [2 w4 l3 `* h8 l) K: D
If a(n, n) = 0 Then, H& z5 [7 u5 a) i; i( e
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!", U) E' u* N- s7 k, J8 ~
Exit Sub 9 ^' W: ?7 V. N* T' c3 @8 qElse " S& Q* b( ?( K8 h& W2 DD = D * a(n, n) : M, \+ t) K x+ w' `End If 9 T- c: \; T7 C4 k4 DPrint "--------------------------------" 6 w7 I5 M" Z' L9 [# sPrint "系数行列式的值是:"; D / t; Q0 l2 C. A, U% J# u2 _x(n) = a(n, n + 1) / a(n, n)* D& W1 `) ]6 d6 _2 X( h( _9 s
For k = n - 1 To 1 Step -1 '开始回代 1 E3 Z( a7 S8 r- X0 S& O; [For j = k + 1 To n 8 g- J" y1 m. I1 F3 D" ~. o qm = m + a(k, j) * x(j)1 c5 Y' G( [$ h. n r9 q. m R
Next j ; V+ u" M, q2 c2 _+ i3 Ux(k) = (a(k, n + 1) - m) / a(k, k)! \) ?* q' o% ^
m = 0 : H2 l" Q6 k; F( Q8 w$ ]5 j5 h" z4 ^Next k '结束回代 ! e3 d; W9 R8 ^7 p9 i6 w, Q2 p& Z4 J2 `+ q# p) E G
Print "--------------------------------"& }0 F5 Y h; E: T p* q" @% `
Print "方程组的解如下:"6 W$ e( @0 e/ q' \0 ~8 F7 p
7 I$ n0 [. w0 L4 c/ `. J# DFor k = 1 To n 0 B# n& W& {5 O" s8 T, {0 nPrint - R: ?# r9 a; g4 b I: N+ J( uPrint "X(" & k & ") = " & x(k): X* W4 h7 M4 ?( i
Next k# C9 E; ^1 @0 o* y5 P; ?
Print "--------------------------------"3 B1 p& r& t/ ~% |/ m2 }5 m
Print "其中各行Ax-b="( B9 U+ w6 T& C, a
Print - n8 `0 N3 D5 |' {* k2 k) XFor i = 1 To n % q; N6 l4 b8 v7 u8 M+ s# I- et = 09 Q( j, |3 F' i6 j; X5 a: @$ D
For j = 1 To n 3 f+ [) X( n O0 Wt = t + a2(i, j) * x(j)8 S! `2 I; U& O" o7 k
Next j % K' O C. T" k* v. d5 t+ ^t = t - a2(i, n + 1)6 [4 W+ c) o) _
Print Spc(5); "第" & i & "行:"; t; m7 _5 N( ~8 D6 c1 p7 F( C M
Print R7 x# }/ N G* o
Next i% B- {1 x& W8 P0 t1 `8 r: P* W9 A
# v9 G! R2 x6 C' c7 W3 dEnd SubPrivate Sub gauss_Click() '高斯消去法4 o) s' r) s, L9 p* b( p
Dim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single - L* j" M" K) j: Y; j! xi = 1: j = 1% o* z: Z+ q9 o3 d" L
n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3)) 5 u0 B8 @+ Z% z$ d8 B; J% }, QReDim Preserve a(1 To n, 1 To n + 1) ( z* Z* w R3 [8 h4 f$ nReDim Preserve l(1 To n, 1 To n + 1)/ c. R! S8 k! H" g, x
Dim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single C0 P4 E( N! }/ J' z. p
ReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a() / l0 g+ z7 j" B2 m- {9 p1 jFor i = 1 To n3 Y w \8 n1 Y: }
For j = 1 To n6 q$ s/ K7 s# c3 u; p% u- A
a2(i, j) = a(i, j)3 o/ S3 T. L3 A# G4 A
Next# O* `, s( V1 c! G8 Y f6 N2 L: _
Next '将a()的值全部赋给a2()& C' L, x! m/ J3 |- t. N; f
m = 0 0 }7 t/ z- K3 R4 \1 TD = 1$ k4 O, G: E7 g. H
ReDim x(1 To n)' i) }/ o/ D" g
Print "--------------------------------" 5 @; f `- r& {+ ?Print "您输入的增广矩阵如下:" / g% {# {; m: j" B7 t. {For i = 1 To n ( _8 Y! x1 b! X) is = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入")) " \# {: Q! ~' i [For j = 1 To n & Q+ q% e7 m, F% `/ ^+ J" C4 la(i, j) = Val(Left(s, InStr(s, " "))) 3 ~; d% ^ C2 Y: x. a6 gs = Trim(Right(s, (Len(s) - InStr(s, " ")))) ! {. `5 A! U$ }9 _8 u7 SPrint a(i, j);( O2 B$ C9 z4 c% r x# \; P; c
Next 9 N2 D! f. H7 \% c* Za(i, n + 1) = Val(s)9 t3 Y' e9 |( G0 z8 r, M, M, B
Print a(i, n + 1); & J c* \; H$ f( }. OPrint 2 @. [: @5 X4 H! ^+ F9 XNext# R0 @3 \4 t% Z& J
/ ]& }4 k6 b" q4 S9 H- d0 r
For k = 1 To n - 1 '开始消元. B! ?- J* I9 C
If a(k, k) = 0 Then 4 N- ^( p E& kMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!" " k: _- _( h- ZExit Sub: J( C( d+ a: n' n3 D: q
Else5 Z% y$ f0 w: q3 ]2 @* b' E
For i = k + 1 To n 2 ~3 F! E. k7 e; p1 t' hl(i, k) = a(i, k) / a(k, k)+ x: }* j9 S! F8 o, N
For j = k + 1 To n + 1 7 @8 t/ [: P) Wa(i, j) = a(i, j) - l(i, k) * a(k, j)& D; x1 g, L$ X, g! i& a
Next % \5 Y: A6 ^) q* j- H" @Next$ t1 H- U* y8 N- g7 y
D = D * a(k, k)" g _ ^0 T3 g' S
End If 9 @- \ Z2 ?( NNext k '消元结束: `+ e% B! o, Z
If a(n, n) = 0 Then9 [ K; E- J/ G2 o/ r
MsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" # @" F7 D) G# P3 L+ `0 Y* \9 AExit Sub 4 i0 B, S" N$ E( |Else$ A& W$ c" d; v! b( h; h
D = D * a(n, n) ! O0 n+ `/ M/ Y" I- f, ^" tEnd If 2 Q* y1 R. ?# R& t G0 c2 j9 @Print "--------------------------------"( X: f$ P$ ~/ \' b) \1 w
Print "系数行列式的值是:"; D$ J4 g( E5 y0 W) O
x(n) = a(n, n + 1) / a(n, n) 4 A Y' |. s( Q6 c0 z3 ~, UFor k = n - 1 To 1 Step -1 '开始回代 . a: H, R. w( u7 k2 q$ r& bFor j = k + 1 To n 3 o1 q! [! p6 Fm = m + a(k, j) * x(j)' T- \- a3 O$ A9 r8 N( F& o. q
Next j 8 ]# l a4 _0 q! Q# nx(k) = (a(k, n + 1) - m) / a(k, k) . [5 n# W x/ L+ cm = 0! F$ L ?; \" D1 K9 _: o, v$ c* v
Next k '结束回代 1 H, ?; r( l' a0 G3 C5 C. W, P6 y; A. ]3 \
Print "--------------------------------"- V" M6 ^( O0 m1 ]/ I/ U
Print "方程组的解如下:"* l& K5 T; p5 ^5 }: U c: k
( D% [2 @5 j: `( M" [- n( pFor k = 1 To n 4 c" t3 a) F% hPrint + B% u' L5 O$ l9 g+ j; h1 I+ f, KPrint "X(" & k & ") = " & x(k) 9 s$ h g/ x+ }" y% ONext k $ ^% [0 p; a1 |& J8 C, ~Print "--------------------------------" ' Z( s$ Z7 W, @$ k; A" uPrint "其中各行Ax-b=" U3 e+ h A" K- z
Print5 D. Z6 n9 _1 v5 F. g5 H V0 N
For i = 1 To n5 r5 q9 {+ v% k; b+ @1 {. Y
t = 0 % t6 ]/ X" }, @2 F+ sFor j = 1 To n2 W- R F6 i, Y8 H
t = t + a2(i, j) * x(j) " G7 `1 X& Z+ R! S6 XNext j3 @# M* g6 q7 @% t E" H
t = t - a2(i, n + 1)" e! ]% ]6 k0 {
Print Spc(5); "第" & i & "行:"; t; E7 T6 Y9 h% x1 ?; \; S# K; [
Print( A2 ?7 t/ c3 {
Next i 0 y/ {7 M* Z! Y+ U- v: E s3 A' h( w2 x8 c: x
End Sub