inv

Матричная инверсия

Синтаксис

Y = inv(X)

Описание

пример

Y = inv(X) вычисляет инверсию квадратной матрицы X.

  • X^(-1) эквивалентен inv(X).

  • x = A\b вычисляется по-другому, чем x = inv(A)*b и рекомендуется для решения систем линейных уравнений.

Примеры

свернуть все

Вычислите инверсию 3 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

Проверьте результаты. Идеально, Y*X производит единичную матрицу. Поскольку inv выполняет матричную инверсию с помощью вычислений с плавающей точкой в практике, Y*X близко к, но не точно равен, единичная матрица eye(size(X)).

Y*X
ans = 3×3

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

Исследуйте, почему решение линейной системы путем инвертирования матрицы с помощью inv(A)*b является нижним к решению его непосредственно использование оператора наклонной черты влево, x = A\b.

Создайте случайный матричный A порядка 500, который создается так, чтобы его номером условия, cond(A), был 1e10, и его нормой, norm(A), является 1. Точным решением x является случайным вектором длины 500, и правая сторона, является b = A*x. Таким образом система линейных уравнений плохо обусловливается, но сопоставимая.

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

Решите линейную систему A*x = b путем инвертирования матрицы коэффициентов A. Используйте tic и toc, чтобы получить информацию синхронизации.

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

Найдите абсолютную погрешность и остаточную ошибку вычисления.

err_inv = norm(y-x)
err_inv = 4.7057e-06
res_inv = norm(A*y-b)
res_inv = 5.6745e-07

Теперь, решите ту же линейную систему с помощью оператора наклонной черты влево \.

tic
z = A\b;
t1 = toc
t1 = 0.0527
err_bs = norm(z-x)
err_bs = 3.7267e-06
res_bs = norm(A*z-b)
res_bs = 3.3063e-15

Вычисление наклонной черты влево более быстро и имеет меньше остаточной ошибки несколькими порядками величины. То, что err_inv и err_bs находятся оба на порядке 1e-6 просто, отражает количество условия матрицы.

Поведение этого примера типично. Используя A\b вместо inv(A)*b в два - три раза быстрее, и производит невязки на порядке точности машины относительно значения данных.

Входные параметры

свернуть все

Введите матрицу, заданную как квадратная матрица. Если X плохо масштабируется или почти сингулярный, то вычисление inv теряет числовую точность. Используйте rcond или cond, чтобы проверить количество условия матрицы.

Типы данных: single | double
Поддержка комплексного числа: Да

Больше о

свернуть все

Матричная инверсия

Матричный X является обратимым, если там существует матричный Y, одного размера таким образом, что XY=YX=In, где В n-by-n единичная матрица. Матричный Y называется инверсией X.

Матрица, которая не имеет никакой инверсии, сингулярна. Квадратная матрица сингулярна только, когда ее детерминант является точно нулем.

Советы

  • Редко необходимо сформировать явную инверсию матрицы. Частое неправильное употребление inv возникает при решении системы линейных уравнений Ax = b. Один способ решить уравнение с x = inv(A)*b. Лучший путь, с точки зрения и времени выполнения и числовой точности, состоит в том, чтобы использовать матричный оператор наклонной черты влево x = A\b. Это производит решение с помощью Исключения Гаусса, явным образом не формируя инверсию. Смотрите mldivide для получения дополнительной информации.

Алгоритмы

inv выполняет разложение LU входной матрицы (или разложение LDL, если входная матрица является Эрмитовой). Это затем использует результаты сформировать линейную систему, решением которой является матричный обратный inv(X). Для разреженных входных параметров inv(X) создает разреженную единичную матрицу и использует наклонную черту влево, X\speye(size(X)).

Расширенные возможности

Смотрите также

| | |

Представлено до R2006a

Была ли эта тема полезной?