MATRIZ INVERSA A TRAVÉS DE GAUSS
CURSO: Métodos Numéricos
DISEÑO DE UN ALGORITMO EN MATLAB PARA HALLAR LA
INVERSA DE UNA MATRIZ CUADRADA. EN CASO QUE LA
MATRIZ NO SEA INVERTIBLE
1. OBJETIVOS:
Diseñar un algoritmo en el programa de Matlab que nos permita hallar la
inversa de una matriz cuadrada.
Utilizar el algoritmo para resolver una matriz inversa en Matlab
Resolver un sistema de ecuaciones utilizando el algoritmo adecuado.
2. MARCO TEORICO:
MATRIZ INVERSA A TRAVÉS DE GAUSS
El método de Gauss-Jordan nos permite calcular la inversa de una matriz, realizando
operaciones elementales entre sus filas.
En una misma matriz divida en dos partes, en la parte izquierda se coloca la matriz a la
que queremos calcular su inversa y en la parte derecha, se coloca la matriz identidad
Realizando operaciones elementales entre las filas de esta matriz, tenemos que
conseguir que en la parte izquierda nos quede la matriz identidad. Una vez lo
consigamos, la matriz que nos queda en la parte derecha, será la matriz inversa:
3. PROCEDIMIENTO:
DISEÑO DEL ALGORITMO:
Entonces, el algoritmo que utilizaremos será:
function inversa=inv2(A)
n=length(A);
B=[A ,eye(n)];
det=A(1,1);
for k=1:n-1
a=k+1;
for i=a:n
for j=a:n
A(i,j)=(A(k,k)*A(i,j)-A(k,j)*A(i,k))/A(k,k);
end
end
det=det*A(k+1,k+1);
end
if det~=0
for i=1:n
if B(i,i)~=1
B(i,:)= B(i,:)./B(i,i);
end
for k=1:n
if k~=i
B(k,:)=-B(k,i).*B(i,:)+B(k,:);
end
end
end
inversa=B(:,n+1:2*n);
else
inversa='INF';
end
Con esto, podemos comprobar que el script se ejecuta correctamente y su resultado es
igual al que arroja la función “inversa” original de Matlab.
DESCRIBIENDO INTERFAZ:
Para poder analizar la correcta ejecución de la función, agregamos la función display
en los argumentos de nuestro script, específicamente en los bucles “if”, luego de las
líneas 17 y 21, para poder visualizar los parámetros de entrada y de salida y su papel
en la ejecución del script. Con lo que la función quedaría así:
function inversa=inv2(A)
n=length(A);
B=[A ,eye(n)];
det=A(1,1);
for k=1:n-1
a=k+1;
for i=a:n
for j=a:n
A(i,j)=(A(k,k)*A(i,j)-A(k,j)*A(i,k))/A(k,k);
end
end
det=det*A(k+1,k+1);
end
if det~=0
for i=1:n
if B(i,i)~=1
B(i,:)= B(i,:)./B(i,i);
disp(B);
end
end
for k=1:n
if k~=i
B(k,:)=-B(k,i).*B(i,:)+B(k,:);
disp(B);
end
end
end
inversa=B(:,n+1:2*n);
else
inversa='INF';
end
EJECUCION DE PLAN:
Utilizaremos la misma matriz de prueba, para poder observar el proceso de obtención
de la matriz inversa:
>> inv2([7 2 10 2 ;3 7 9 8 ;2 3 2 10 ;4 1 2 3])
1.0000 0.2857 1.4286 0.2857 0.1429 0 0 0
3.0000 7.0000 9.0000 8.0000 0 1.0000 0 0
2.0000 3.0000 2.0000 10.000 0 0 1.0000 0
4.0000 1.0000 2.0000 3.0000 0 0 0 1.0000
1.0000 0.2857 1.4286 0.2857 0.1429 0 0 0
0 6.1429 4.7143 7.1429 -0.4286 1.0000 0 0
2.0000 3.0000 2.0000 10.0000 0 0 1.0000 0
4.0000 1.0000 2.0000 3.0000 0 0 0 1.0000
1.0000 0.2857 1.4286 0.2857 0.1429 0 0 0
0 6.1429 4.7143 7.1429 -0.4286 1.0000 0 0
0 2.4286 -0.8571 9.4286 -0.2857 0 1.0000 0
4.0000 1.0000 2.0000 3.0000 0 0 0 1.0000
1.0000 0.2857 1.4286 0.2857 0.1429 0 0 0
0 6.1429 4.7143 7.1429 -0.4286 1.0000 0 0
0 2.4286 -0.8571 9.4286 -0.2857 0 1.0000 0
0 -0.1429 -3.7143 1.8571 -0.5714 0 0 1.0000
1.0000 0.2857 1.4286 0.2857 0.1429 0 0 0
0 1.0000 0.7674 1.1628 -0.0698 0.1628 0 0
0 2.4286 -0.8571 9.4286 -0.2857 0 1.0000 0
0 -0.1429 -3.7143 1.8571 -0.5714 0 0 1.0000
1.0000 0 1.2093 -0.0465 0.1628 -0.0465 0 0
0 1.0000 0.7674 1.1628 -0.0698 0.1628 0 0
0 2.4286 -0.8571 9.4286 -0.2857 0 1.0000 0
0 -0.1429 -3.7143 1.8571 -0.5714 0 0 1.0000
1.0000 0 1.2093 -0.0465 0.1628 -0.0465 0 0
0 1.0000 0.7674 1.1628 -0.0698 0.1628 0 0
0 0 -2.7209 6.6047 -0.1163 -0.3953 1.0000 0
0 -0.1429 -3.7143 1.8571 -0.5714 0 0 1.0000
1.0000 0 1.2093 -0.0465 0.1628 -0.0465 0 0
0 1.0000 0.7674 1.1628 -0.0698 0.1628 0 0
0 0 -2.7209 6.6047 -0.1163 -0.3953 1.0000 0
0 0 -3.6047 2.0233 -0.5814 0.0233 0 1.0000
1.0000 0 1.2093 -0.0465 0.1628 -0.0465 0 0
0 1.0000 0.7674 1.1628 -0.0698 0.1628 0 0
0 0 1.0000 -2.4274 0.0427 0.1453 -0.3675 0
0 0 -3.6047 2.0233 -0.5814 0.0233 0 1.0000
1.0000 0 0 2.8889 0.1111 -0.2222 0.4444 0
0 1.0000 0.7674 1.1628 -0.0698 0.1628 0 0
0 0 1.0000 -2.4274 0.0427 0.1453 -0.3675 0
0 0 -3.6047 2.0233 -0.5814 0.0233 0 1.0000
1.0000 0 0 2.8889 0.1111 -0.2222 0.4444 0
0 1.0000 0 3.0256 -0.1026 0.0513 0.2821 0
0 0 1.0000 -2.4274 0.0427 0.1453 -0.3675 0
0 0 -3.6047 2.0233 -0.5814 0.0233 0 1.0000
1.0000 0 0 2.8889 0.1111 -0.2222 0.4444 0
0 1.0000 0 3.0256 -0.1026 0.0513 0.2821 0
0 0 1.0000 -2.4274 0.0427 0.1453 -0.3675 0
0 0 0 -6.7265 -0.4274 0.5470 -1.3248 1.0000
1.0000 0 0 2.8889 0.1111 -0.2222 0.4444 0
0 1.0000 0 3.0256 -0.1026 0.0513 0.2821 0
0 0 1.0000 -2.4274 0.0427 0.1453 -0.3675 0
0 0 0 1.0000 0.0635 -0.0813 0.1970 -0.1487
1.0000 0 0 0 -0.0724 0.0127 -0.1245 0.4295
0 1.0000 0 3.0256 -0.1026 0.0513 0.2821 0
0 0 1.0000 -2.4274 0.0427 0.1453 -0.3675 0
0 0 0 1.0000 0.0635 -0.0813 0.1970 -0.1487
1.0000 0 0 0 -0.0724 0.0127 -0.1245 0.4295
0 1.0000 0 0 -0.2948 0.2973 -0.3139 0.4498
0 0 1.0000 -2.4274 0.0427 0.1453 -0.3675 0
0 0 0 1.0000 0.0635 -0.0813 0.1970 -0.1487
1.0000 0 0 0 -0.0724 0.0127 -0.1245 0.4295
0 1.0000 0 0 -0.2948 0.2973 -0.3139 0.4498
0 0 1.0000 0 0.1970 -0.0521 0.1105 -0.3609
0 0 0 1.0000 0.0635 -0.0813 0.1970 -0.1487
ans =
-0.0724 0.0127 -0.1245 0.4295
-0.2948 0.2973 -0.3139 0.4498
0.1970 -0.0521 0.1105 -0.3609
0.0635 -0.0813 0.1970 -0.1487
Pudimos observar la ejecución de la función paso a paso y comprobar los cambios de
los parámetros de entrada y salida, hasta llegar al resultado deseado.
PARA UNA MATRIZ NO INVERTIBLE:
Insertamos lo siguiente en Matlab:
>> inv2([7 2 10 2 ;3 7 9 8 ;2 3 2 10 ;2 3 2 10])
ans =
INF
Podemos observar que esta matriz es no invertible, también llamada singular o
degenerada. Esto lo podemos comprobar al sacar su determinante, el cual nos dará
como resultado cero, como podemos observar:
RESOLVIENDO UN SISTEMA DE ECUACIONES:
RESOLVIENDO EL SISTEMA:
>> inversaA=inv2([2 1 3;5 -4 1;1 -1 -4])
1.0000 0.5000 1.5000 0.5000 0 0
5.0000 -4.0000 1.0000 0 1.0000 0
1.0000 -1.0000 -4.0000 0 0 1.0000
1.0000 0.5000 1.5000 0.5000 0 0
0 -6.5000 -6.5000 -2.5000 1.0000 0
1.0000 -1.0000 -4.0000 0 0 1.0000
1.0000 0.5000 1.5000 0.5000 0 0
0 -6.5000 -6.5000 -2.5000 1.0000 0
0 -1.5000 -5.5000 -0.5000 0 1.0000
1.0000 0.5000 1.5000 0.5000 0 0
0 1.0000 1.0000 0.3846 -0.1538 0
0 -1.5000 -5.5000 -0.5000 0 1.0000
1.0000 0 1.0000 0.3077 0.0769 0
0 1.0000 1.0000 0.3846 -0.1538 0
0 -1.5000 -5.5000 -0.5000 0 1.0000
1.0000 0 1.0000 0.3077 0.0769 0
0 1.0000 1.0000 0.3846 -0.1538 0
0 0 -4.0000 0.0769 -0.2308 1.0000
1.0000 0 1.0000 0.3077 0.0769 0
0 1.0000 1.0000 0.3846 -0.1538 0
0 0 1.0000 -0.0192 0.0577 -0.2500
1.0000 0 0 0.3269 0.0192 0.2500
0 1.0000 1.0000 0.3846 -0.1538 0
0 0 1.0000 -0.0192 0.0577 -0.2500
1.0000 0 0 0.3269 0.0192 0.2500
0 1.0000 0 0.4038 -0.2115 0.2500
0 0 1.0000 -0.0192 0.0577 -0.2500
Entonces los resultados obtenidos son:
InversaA =
0.3269 0.0192 0.2500
0.4038 -0.2115 0.2500
-0.0192 0.0577 -0.2500
>> b=[7;-19;4];
>> y=inversaA*b
y=
2.9231
-2.2308
7.8462
>>
SOLUCIONES
A=2.9231
B=7.8462
C= -2.2308
4. CONCLUSIONES:
Se observó la ejecución de la función paso a paso y se comprobó los cambios de
los parámetros de entrada y salida, hasta llegar al resultado deseado.
Para una matriz no invertible se observó que al comprobar sacando su
determinante nos dará como resultado cero.
Como resultado de resolver el sistema de ecuaciones obtenemos los valores de
A, B, C, siendo estos A=2.9231, B=7.8462 C= -2.2308