Inversa de una matriz NxN con C++

En este enlace:

INVERSA.zip

se propone código C++ para calcular la inversa de una matriz NxN. El cálculo del determinante se usa para decidir si se ejecuta o no dicho código porque si el determinante es cero la matriz  no es invertible.

En Linux, desempaqueten, muevánse al directorio INVERSA, compilen y ejecuten (también pueden usar geany) con:

g++ inversa.c++ -o inversa
./inversa

El resultado será:

Imprime la matriz de origen

1 2 3 4
2 1 5 6
3 5 1 7
4 6 7 1

Imprime la matriz inversa

-1.205426   0.507752   0.236434   0.120155
 0.507752  -0.368217   0.019380   0.042636
 0.236434   0.019380  -0.158915   0.050388
 0.120155   0.042636   0.050388  -0.089147

Ahora, modifiquen la última fila del archivo datos.in

por esta:

3 5 1 7

para tener un sistema linealmente dependiente. El resultado será:

Imprime la matriz de origen

1 2 3 4
2 1 5 6
3 5 1 7
3 5 1 7

La matriz no tiene inversa

Este código es portable; tanto en Linux como en Windows. Para que pueda visualizarse el resultado en Windows es necesario colocar antes de:

return 0;

las instrucciones siguientes:

cout << “Pulse cualquier tecla para continuar…\n”;
cin.get();

Con el Dev-C++ (para Windows), simplemente abran el archivo inversa.c++ y modifíquenlo tal como se señala anteriormente. Este se compila y ejecuta en el Dev-C++ con F9.

Esta entrada fue publicada en Código C++. Guarda el enlace permanente.

12 Respuestas a Inversa de una matriz NxN con C++

  1. Jhon Ochoa dijo:

    Funciona de maravilla, mil y mil gracias.

  2. Entonces el cin.get(); cámbialo por:

    system (“pause”);

    Debería compilar.

  3. Sara dijo:

    estoy teniendo problemas con el programa, ya que en ocasiones se utiliza por ejemplo L[n], pero si el tamaño de la matriz es n, lo indices solo pueden ir de 0 a n-1. He sustituido todas las n, por n-1 y mas o menos funciona, de hecho el determinante lo calcula bien, pero a la hora de hacer la inversa, no sale. Agradeceria muchisimo tu contestacion

  4. Sara dijo:

    si, pero aun asi, si pongo que X[n-2] = a[n-2][n-1]/a[n-2][n-2] en vez de X[n-1] = a[n-1][n]/a[n-1][n-1] que es lo que viene en el codigo, para solucionar lo del indice que he comentado antes, entonces el determinante, en este caso de 5×5 lo genera bien, pero deja la ultima columna y la ultima fila a 0, es decir, me faltan esos valores

    • No sé si entiendo lo que quieres hacer pero si estás modificando mi código para que los índices comiencen desde 1 y no desde cero entonces es a tu riesgo los resultados que obtengas. Yo lo programé en C++ y si lo quieres para cualquier otro lenguaje tendrás que buscarte un libro de análisis numérico; tal como hice yo. El determinante te da bien porque la complejidad de la programación es baja. Pero la inversa requiere un mayor esfuerzo de programación pero si tienes mi código como referencia no te será difícil encontrar por tu cuenta el resultado correcto. Plánteate una matriz más pequeña (3×3, por ejemplo) y ejecútala manualmente en pseudo código y verás que encuentras como tienen que variar los índices.

      Saludos

  5. Sara dijo:

    Al contrario, al restarles 1 los indices van de 0 a n-1. Solo he cambiado las matrices de punteros por vectores de n elementos. Si compilo el codigo tal cual (sin restar 1 a las n’s) me da error al intentar aceder al elemento n. Se que es dificil de explicar… Te agradezco enormemente tu ayuda, y por supuesto tu codigo

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s