Сначала предположим, что все собственные значения равны 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
s на диагонали.Следовательно, I-A
является верхним треугольником со всеми 0
s по диагонали.Следовательно, все собственные значения 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, потому что оно включает только умножение матриц, и вы даже можете использовать трюки, чтобы ускорить это, поскольку вам нужны только полномочия одной матрицы.Однако это может не помочь, если перевести матрицу в форму Джордана очень дорого.