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
Поддержка комплексного числа: Да

Больше о

свернуть все

Обращение матриц

Матрица A 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