Podemos calcular una matriz de 2x2 y de 3x3 en VBA con una subrutina a partir de la regla
$$A^{-1}=\dfrac {1} {det\left( A\right) }adj\left( A\right)$$
a continuación se muestran los códigos, para que esta subrutina corra de forma correcta la matriz a invertir debe encontrarse emplazada en el rango de celdas "B3:D5" y los resultados serán desplegados en el rango de celdas "F3:H5" como se muestra en la figura
Private Sub inv3x3()
'invertir una matriz A = [a b;c d]
'recordando que la la inversa de esta matriz es:
'1/det(A).*[d -b;-c a]
Dim A(1 To 2, 1 To 2) As Double
For i = 1 To 2
For j = 1 To 2
A(i, j) = Cells(2 + i, 1 + j)
Next j
Next i
'determinante de la matriz
det = A(1, 1) * A(2, 2) - A(1, 2) * A(2, 1)
'si el determinate de la matriz es 0 => inversa de la matriz no existe
If det = 0 Then
MsgBox ("La matriz no es invertible")
Exit Sub
End If
'reordenando los terminos y multiplicando por el reciproco del determinate
Cells(3, 5) = det ^ -1 * A(2, 2)
Cells(3, 6) = det ^ -1 * -A(1, 2)
Cells(4, 5) = det ^ -1 * -A(2, 1)
Cells(4, 6) = det ^ -1 * A(1, 1)
End Sub
para invertir una matriz de 2x2 se ocupa el siguiente código, para que esta subrutina se ejecute de forma optima la matriz a invertir debe ubicarse en el rango "B3:C4" y los resultados serán arrojados en rango de celdas "E3:F4" como se muestra en la siguiente imagen
Private Sub inv2x2()
'invertir una matriz A = [a b;c d]
'recordando que la la inversa de esta matriz es:
'1/det(A).*[d -b;-c a]
Dim A(1 To 2, 1 To 2) As Double
For i = 1 To 2
For j = 1 To 2
A(i, j) = Cells(2 + i, 1 + j)
Next j
Next i
'determinante de la matriz
det = A(1, 1) * A(2, 2) - A(1, 2) * A(2, 1)
'si el determinate de la matriz es 0 => inversa de la matriz no existe
If det = 0 Then
MsgBox ("La matriz no es invertible")
Exit Sub
End If
'reordenando los terminos y multiplicando por el reciproco del determinate
Cells(3, 5) = det ^ -1 * A(2, 2)
Cells(3, 6) = det ^ -1 * -A(1, 2)
Cells(4, 5) = det ^ -1 * -A(2, 1)
Cells(4, 6) = det ^ -1 * A(1, 1)
End Sub
dios mio...
ResponderEliminarsi lo hubiera hecho a mano, seria mas rapido que con este pseudomacro...
si tienes que invertir 1000 matrices es más rápido hacerlo con algún tipo de código que invertirlas a mano, también tengo un código para invertir matrices de n x n, más adelante puede que lo suba.
Eliminarsaludos
te amo con todo <3
ResponderEliminarUna falta de respeto invertir matrices tan simples con semejante código tan maluco :')
ResponderEliminarPero la de tres matrices esta mal :c pusiste la de dos!! D: podrías pasarme mejor la de nxn please!!!!!
ResponderEliminar