Matriz Inversa c++

Iniciado por TewsDR, 5 Mayo 2012, 01:35 AM

0 Miembros y 1 Visitante están viendo este tema.

TewsDR

Por favor necesito ideas de como poder hallar la matriz inversa,
Se como hallar manualmente, pero mi problema esta en 
como hacer para que mi programa haga las operaciones elementales
para poder hallar la inversa. Ayudenme please :D

exel

#1
Hola

Basandonos en la forma de obtener la matriz inversa de A:

Ainversa = (1/Det(A)) * (Adj(A)trans)

Entendiendo que es primordial:

1.- La matriz A es cuadrada; de lo contrario es imposible obtener un determinante
2.- El determinante de A no debe ser igual a cero


La primera condicion se puede solucionar directamente con el codigo. Ahora, la solucion a la segunda condicion no es tan sencilla. Podemos aplicar el algoritmo base para calcular un determinante de orden superior (mayor a 3) como:

Cita de: WikipediaEl determinante de orden n, puede desarrollarse a partir de una fila o columna, reduciendo el problema al cálculo de un determinante de orden n-1. Para ello se toma una fila o columna cualquiera, multiplicando cada elemento por su cofactor (es decir, el determinante de la matriz que se obtiene eliminando la fila y columna correspondiente a dicho elemento, multiplicado por (-1)i+j donde i es el número de fila y j el número de columna). La suma de todos los productos es igual al determinante.

... esto lo puedes aplicar directamente, sin embargo esta solucion implica tener que elegir una fila o columna cuyos elementos nos reduzca el tiempo de calculo; para eso puedes aplicar otro algoritmo que se encargue. Puedes reducir el determinante superior hasta llegar al determinante de orden 3 en el que puedes aplicar la regla de Sarrus (comunmente conocida como la regla de triangulacion).


Hasta aqui, con el codigo desarrollado podras comprobar si la matriz A tiene inversa o no, y ademas ya tendras calculado uno de los elementos de la formula.

Los pasos siguientes son:

3.- obtener la matriz adjunta de A, osea Adj(A)
4.- obtener la matriz transpuesta de Adj(A), osea Adj(A)trans


*OBSERVACION: por una propiedad de la matriz adjunta, sabemos que Adj(A)trans=Adj(Atrans); osea que es lo mismo si primero realizas la transpuesta de A y luego obtienes la matriz adjunta.

Codificar el paso cuatro es sencillo ya que solo debes intercambiar los elementos de la matriz (arreglo de dos dimensiones) cuyos subindices sean ij e ji. La resolucion del tercer paso tiene mas labor porque tienes que calcular el cofactor (tambien denominado adjunto) por cada elemento de la matriz A.

Las ultimas lineas del codigo consisten en:

5.-  Dividir cada elemento de la matriz obenida en el paso 4, por el valor del determinante obtenido en el paso 3.

Con esto finalmente obtendras la matriz inversa.

Osea que tendras que arreglartelas para dar solucion a las situaciones 1 y 3 que son las complicadas, aunque si analizas un poco el tercer paso te daras cuenta de que utiliza como base los determinantes, que precisamente los debiste haber tratado en el primer paso. Las otras practicamente ya estan hechas.

Saludos

TewsDR

gracias por el aporte, me sirvio bastante :D