Private Sub gauss_Click() '高斯消去法 . q' y0 K- U- D9 c; YDim n As Integer, i As Integer, j As Integer, a() As Single, s As String, l() As Single & i* o7 U3 b" B! H# wi = 1: j = 1 3 @7 {6 ?5 {2 j/ R9 {n = Val(InputBox("请输入矩阵的阶数(即:方程组未知数个数)N", "方程的未知数个数n", 3))# }9 X x! V& ]5 e
ReDim Preserve a(1 To n, 1 To n + 1) 5 j _ r6 {- z; w) f5 C6 l% uReDim Preserve l(1 To n, 1 To n + 1) : H& ]8 W, a- k1 s, H% KDim k As Integer, D As Single, m As Single, x() As Single, t As Single, a2() As Single : T2 Q& h5 c3 H3 ]% X& XReDim Preserve a2(1 To n, 1 To n + 1) '为方便求Ax-b而设的a()! N O$ i% {" A9 P. Y
For i = 1 To n 8 C; N8 i% m( Z% |For j = 1 To n7 ^4 @1 m6 G. F% I' E* G
a2(i, j) = a(i, j)6 O% H' s( O# U, k4 S! p7 b0 n
Next ) k" W' ] r" j2 g9 h- H: z! ZNext '将a()的值全部赋给a2() ' D" E, J2 [$ x* Nm = 0: w7 d0 q0 E, \: d
D = 1/ d' z1 d* D( }( R3 H
ReDim x(1 To n) # H8 S: {5 Z7 H9 tPrint "--------------------------------" / J1 J- Y6 r4 G2 @+ cPrint "您输入的增广矩阵如下:" 7 u- }6 }2 K) l7 c2 p. E- j$ B VFor i = 1 To n . q9 m! T" E0 X* t. T% Hs = Trim(InputBox("请输入增广矩阵的第" & i & "行" + vbCrLf + "各元素之间请用空格分开", i & "行矩阵的输入"))' D7 m3 f% i3 @% o/ i7 u4 @' m; U7 X
For j = 1 To n S& L# P* k* r( m/ _2 ra(i, j) = Val(Left(s, InStr(s, " ")))0 H1 {: W u% l
s = Trim(Right(s, (Len(s) - InStr(s, " ")))) 8 v$ Y# B. G; m& H) {9 QPrint a(i, j); 9 F( q% h7 k) r! `) q/ LNext 8 s1 K [$ T& ea(i, n + 1) = Val(s) " Q/ ?' E* p% l! q) L; U% p( UPrint a(i, n + 1);6 U2 G# S; J. C1 A
Print5 w- u: ]0 t* ~3 b# n+ ]( C
Next # |' k8 r9 \5 v' A# V9 x6 ?8 J: H4 T8 O' ^- B, _4 h
For k = 1 To n - 1 '开始消元& {5 h# W r- A& T- J
If a(k, k) = 0 Then ( t6 A) H# @4 _/ SMsgBox " Sorry!解不出!" + vbCrLf + "原因是:a(" & k & "," & k & ")=0了!", vbExclamation, "解不出呀!"! T5 o: _$ P+ D/ r8 l% L
Exit Sub % m+ J0 |7 J ?+ cElse7 o5 c' F1 ^* f* A
For i = k + 1 To n6 M: r+ w0 ^( a1 H" Q: z
l(i, k) = a(i, k) / a(k, k)0 q& q( u, d! k/ k+ A
For j = k + 1 To n + 1 7 q) |0 r! ]: a$ C- R3 h/ sa(i, j) = a(i, j) - l(i, k) * a(k, j) w4 d$ I* g& l1 T" N4 HNext% A: n- f5 f& K% A
Next( k0 @( I& H* H$ {. a6 M! A: C- F$ I
D = D * a(k, k) + l1 d- l- ?! V+ w. EEnd If 6 {. x+ h. t8 X! e' x& ZNext k '消元结束 A/ S( G% ?, `3 qIf a(n, n) = 0 Then ; }% F: ]2 L: jMsgBox "Sorry!“高斯法”对此矩阵无能为力!" + vbCrLf + "原因是:a(n.n)=0了", vbExclamation, "解不出呀!" : c* U. b8 z2 \9 ~Exit Sub2 B( \- e X2 _) l
Else8 p0 b& x4 f1 W( Z2 b$ H. |) K
D = D * a(n, n) & F9 Q5 R8 Z5 J0 `End If( Z5 T; u/ [! F! M3 J
Print "--------------------------------"0 D- @5 G1 p2 c. ~$ B) G2 j
Print "系数行列式的值是:"; D" x- R4 R# L& j3 G
x(n) = a(n, n + 1) / a(n, n)4 z' _3 j# B! m/ v1 K
For k = n - 1 To 1 Step -1 '开始回代 ; j% q0 ]1 z7 M# A @1 O& ?# uFor j = k + 1 To n & K# O# ^6 W5 h% o9 s5 @ H0 im = m + a(k, j) * x(j) 4 p- G0 _% M' L0 _0 {, [Next j & L* M. V8 ~; ]. wx(k) = (a(k, n + 1) - m) / a(k, k) , p3 ?- S; S# O9 Y0 b0 sm = 0 : m4 z6 Y- _, U. r3 V" ^# Q/ s# ~Next k '结束回代0 W5 Z" T0 R' q) m