Main Content

inv

Inversa de una matriz

Sintaxis

Descripción

Y = inv(X) calcula la inversa de la matriz cuadrada X.

  • X^(-1) equivale a inv(X).

  • x = A\b se calcula de forma diferente a x = inv(A)*b y se recomienda para resolver sistemas de ecuaciones lineales.

ejemplo

Ejemplos

contraer todo

Calcule la inversa de una matriz de 3 por 3.

X = [1 0 2; -1 5 0; 0 3 -9]
X = 3×3

     1     0     2
    -1     5     0
     0     3    -9

Y = inv(X)
Y = 3×3

    0.8824   -0.1176    0.1961
    0.1765    0.1765    0.0392
    0.0588    0.0588   -0.0980

Compruebe los resultados. En teoría, Y*X produce la matriz identidad. Dado que inv realiza la inversión de la matriz con cálculos de coma flotante, en la práctica Y*X se aproxima, aunque no es exactamente igual, a la matriz identidad eye(size(X)).

Y*X
ans = 3×3

    1.0000    0.0000   -0.0000
         0    1.0000   -0.0000
         0   -0.0000    1.0000

Examine por qué resolver un sistema lineal invirtiendo la matriz con inv(A)*b ofrece peores resultados que resolverlo directamente con el operador de barra invertida, x = A\b.

Cree una matriz aleatoria A de orden 500 construida de forma que su número de condición, cond(A), sea 1e10 y su norma, norm(A), sea 1. La solución exacta x es un vector aleatorio de longitud 500 y el lado derecho es b = A*x. De esta manera, el sistema de ecuaciones lineales está mal condicionado, pero es coherente.

n = 500; 
Q = orth(randn(n,n));
d = logspace(0,-10,n);
A = Q*diag(d)*Q';
x = randn(n,1);
b = A*x;

Resuelva el sistema lineal A*x = b invirtiendo la matriz de coeficientes A. Utilice tic y toc para obtener información sobre el tiempo.

tic
y = inv(A)*b; 
t = toc
t = 
0.0216

Encuentre el error absoluto y residual del cálculo.

err_inv = norm(y-x)
err_inv = 
4.8457e-06
res_inv = norm(A*y-b)
res_inv = 
4.8952e-07

Ahora, resuelva el mismo sistema lineal con el operador de barra invertida \.

tic
z = A\b;
t1 = toc
t1 = 
0.0056
err_bs = norm(z-x)
err_bs = 
3.7705e-06
res_bs = norm(A*z-b)
res_bs = 
3.7080e-15

El cálculo con la barra invertida es más rápido y ofrece un error residual muchísimo menor. El hecho de que err_inv y err_bs estén ambos en el orden de 1e-6 simplemente refleja el número de condición de la matriz.

El comportamiento de este ejemplo es típico. El uso de A\b en lugar de inv(A)*b es entre dos y tres veces más rápido y produce valores residuales que se aproximan a la precisión de la máquina en relación con la magnitud de los datos.

Argumentos de entrada

contraer todo

Matriz de entrada, especificada como matriz cuadrada. Si X se escala incorrectamente o es casi singular, el cálculo de inv pierde precisión numérica. Utilice rcond o cond para comprobar el número de condición de la matriz.

Tipos de datos: single | double
Soporte de números complejos:

Más acerca de

contraer todo

Inversa de la matriz

Una matriz X se puede invertir si existe una matriz Y del mismo tamaño tal que XY=YX=In, donde In es la matriz identidad de n por n. La matriz Y se denomina la inversa de X.

Una matriz sin inversa es singular. Una matriz cuadrada es singular solo cuando su determinante es exactamente cero.

Sugerencias

  • Rara vez es necesario formar la inversa explícita de una matriz. A la hora de resolver el sistema de ecuaciones lineales Ax = b, con frecuencia se utiliza erróneamente la función inv. Una forma de resolver la ecuación es con x = inv(A)*b. Una forma mejor, tanto desde el punto de vista del tiempo de ejecución como de la precisión numérica, es utilizar el operador de barra invertida de la matriz x = A\b. Esto produce la solución mediante eliminación gaussiana, sin formar explícitamente la inversa. Consulte mldivide para obtener más información.

Algoritmos

inv realiza una descomposición LU de la matriz de entrada (o una descomposición LDL si la matriz de entrada es hermítica). Después, utiliza los resultados para formar un sistema lineal cuya solución es la inversa de la matriz inv(X). Para los valores de entrada dispersos, inv(X) crea una matriz identidad dispersa y utiliza la barra invertida, X\speye(size(X)).

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a

expandir todo

Consulte también

| | |