exponenta event banner

inv

Матрица обратная

Синтаксис

Описание

пример

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.0119

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

err_inv = norm(y-x)
err_inv = 4.7546e-06
res_inv = norm(A*y-b)
res_inv = 4.8705e-07

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

tic
z = A\b;
t1 = toc
t1 = 0.0074
err_bs = norm(z-x)
err_bs = 3.9765e-06
res_bs = norm(A*z-b)
res_bs = 3.5785e-15

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

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

Входные аргументы

свернуть все

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

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

Подробнее

свернуть все

Обратная матрица

Матрица X является обратимым, если существует матрица Y такого же размера, что XY = YX = In, где In - nоколо-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