You are on page 1of 3

Public Sub Gauss(N, B, InversaA)

N=N de columnas y N de Filas de la Matriz A y Matriz Inversa de A


Dim
Dim
Dim
Dim
Dim

pv As Integer, jc As Integer, I As Integer, J As Integer, k As Integer


nv As Integer, M As Integer, jr As Integer, kc As Integer
Eps As Double, Eps2 As Double, Det As Double, Tm As Double, R As Double
Temp As Double, va As Double
A(600, 1200)

'Matriz ampliada A(i,j)


k=0
For I = 1 To N
For J = 1 To N
A(I, J) = B(I, J)
'
k=k+1
Next J
A(I, I + N) = 1
Next I
'Inicializacin de inversa
For I = 1 To N
For J = 1 To N
InversaA(I, J) = 0
Next J
Next I
'Clculo
Eps = 1
Do While 1 + Eps > 1
Eps = Eps / 2
Loop
Eps = Eps * 2
Eps2 = Eps * 2
Det = 1
For I = 1 To N - 1
pv = I
For J = I + 1 To N
If Abs(A(pv, I)) < Abs(A(J, I)) Then pv = J
Next J
If pv <> I Then
For jc = 1 To N * 2

Tm = A(I, jc)
A(I, jc) = A(pv, jc)
A(pv, jc) = Tm
Next jc
Det = -Det
End If
If A(I, I) = 0 Then MsgBox ("La matriz es singular 1"): Exit Sub
'Eliminacin por debajo de la diagonal
For jr = I + 1 To N
If A(jr, I) <> 0 Then
R = A(jr, I) / A(I, I)
For kc = I + 1 To N * 2
Temp = A(jr, kc)
A(jr, kc) = A(jr, kc) - R * A(I, kc)
If Abs(A(jr, kc)) < Eps2 * Temp Then A(jr, kc) = 0
Next kc
End If
Next jr
Next I
For I = 1 To N
Det = Det * A(I, I)
Next I
'txtDeter.Text = Det
'MsgBox ("Determinante: " & Det)
'Sustitucin hacia atrs
If A(N, N) = 0 Then MsgBox ("La matriz es singular"): Exit Sub
For M = N + 1 To N * 2
A(N, M) = A(N, M) / A(N, N)
For nv = N - 1 To 1 Step -1
va = A(nv, M)
For k = nv + 1 To N
va = va - A(nv, k) * A(k, M)
Next k
A(nv, M) = va / A(nv, nv)
Next nv
Next M
k=0

For I = 1 To N
For J = N + 1 To N * 2
InversaA(I, J - N) = A(I, J)
' k=k+1
Next J
Next I
End Sub

You might also like