Сначала предположим, что все собственные значения 1
. Пусть A
будет жордановой канонической формой вашей матрицы. Затем вы можете вычислить A^{-1}
, используя только матричное умножение и сложение на
A^{-1} = I + (I-A) + (I-A)^2 + ... + (I-A)^k
где k < dim(A)
. Почему это работает? Потому что генерирующие функции - это здорово. Напомним расширение
(1-x)^{-1} = 1/(1-x) = 1 + x + x^2 + ...
Это означает, что мы можем инвертировать (1-x)
, используя бесконечную сумму. Вы хотите инвертировать матрицу A
, поэтому вы хотите взять
A = I - X
Решение для X
дает X = I-A
. Следовательно, путем подстановки имеем
A^{-1} = (I - (I-A))^{-1} = 1 + (I-A) + (I-A)^2 + ...
Здесь я использовал единичную матрицу I
вместо числа 1
. Теперь у нас есть проблема конвергенции, но на самом деле это не проблема. Исходя из предположения, что A
находится в жордановой форме и имеет все собственные значения, равные 1
, мы знаем, что A
является верхним треугольником со всеми 1
на диагонали. Следовательно, I-A
является верхним треугольником со всеми 0
по диагонали. Следовательно, все собственные значения I-A
равны 0
, поэтому его характеристический полином равен x^dim(A)
, а его минимальный полином равен x^{k+1}
для некоторого k < dim(A)
. Поскольку матрица удовлетворяет своему минимальному (и характеристическому) многочлену, это означает, что (I-A)^{k+1} = 0
. Следовательно, приведенный выше ряд конечен с самым большим ненулевым членом (I-A)^k
. Так что сходится.
Теперь для общего случая поместите свою матрицу в форму Жордана, чтобы у вас была блочно-треугольная матрица, например:
A 0 0
0 B 0
0 0 C
Где каждый блок имеет одно значение по диагонали. Если это значение равно a
для A
, используйте описанный выше трюк, чтобы инвертировать 1/a * A
, а затем умножить a
обратно. Поскольку полная матрица блочно-треугольная, обратная матрица будет
A^{-1} 0 0
0 B^{-1} 0
0 0 C^{-1}
В наличии трех блоков нет ничего особенного, так что это работает независимо от того, сколько у вас есть.
Обратите внимание, что этот трюк работает всякий раз, когда у вас есть матрица в жордановой форме. Вычисление обратного в этом случае будет очень быстрым в Matlab, потому что оно включает только умножение матриц, и вы даже можете использовать уловки, чтобы ускорить это, поскольку вам нужны только степени одной матрицы. Однако это может не помочь вам, если преобразование матрицы в форму Джордана действительно дорого.
person
PengOne
schedule
28.06.2011