Допустим, мы хотим диагонализовать матрицу A размера 2x2 — и ищем её собственные вектора.
Вот мы нашли собственные значения, λ_1 и λ_2...
... и собираемся решить две системы, чтобы найти собственные вектора. А надо ли это делать?
... и собираемся решить две системы, чтобы найти собственные вектора. А надо ли это делать?
Нет!
Ведь (A-λ_1*Id)(A-λ_2*Id)=0 (aka теорема Гамильтона-Кэли).
Ведь (A-λ_1*Id)(A-λ_2*Id)=0 (aka теорема Гамильтона-Кэли).
Значит, собственный вектор с собственным значением λ_1 можно прочитать в (любом) столбце матрицы A-λ_2*Id. И наоборот, собственный вектор с собственным значением λ_2 — в любом столбце матрицы A-λ_1*Id.
С матрицами 3x3 такое тоже можно применять, но тут уже вопрос, что кому проще: перемножить две матрицы (A-λ_1*Id)(A-λ_2*Id), чтобы в столбце прочитать собственный вектор, или решить систему (A-λ_3*Id) v =0.
(Помнится, этому трюку нас в своё время научил И. А. Дынников. Давно это было!)
(Помнится, этому трюку нас в своё время научил И. А. Дынников. Давно это было!)
Второй трюк — а что, если мы хотим посчитать какую-то функцию от матрицы (скажем, сотую степень, или экспоненту) в исходном базисе. И матрица опять маленькая, 2x2 или 3x3.
Можно, конечно, найдя собственные значения, найти потом собственные вектора, вычислить функцию в собственном базисе (допустим, все собственные значения некратные — так что матрица диагонализуется — и тогда просто поэлементно применить к собственным значениям на диагонали), потом вернуться в исходный (включая обращение матрицы перехода и умножение матриц)...
Но можно — проще!
Пусть мы хотим найти F(A), где F — многочлен.
Пусть мы хотим найти F(A), где F — многочлен.
Поделим F(x) с остатком на характеристический многочлен P(x)=П_j (x-λ_j) матрицы A:
F(x)=P(x)Q(x)+R(x).
Но P(A)=0 (опять теорема Гамильтона-Кэли), значит, F(A)=R(A).
F(x)=P(x)Q(x)+R(x).
Но P(A)=0 (опять теорема Гамильтона-Кэли), значит, F(A)=R(A).
При этом остаток R(x) — штука "простая"; скажем, для матрицы размера 2x2 это просто линейный многочлен, R(x)=ax+b, и
F(A)=R(A)=a*A+b*Id.
F(A)=R(A)=a*A+b*Id.
Для матрицы 3x3 — многочлен второй степени, так что R(A) посчитать тоже не очень сложно, знать бы только R(x) как многочлен. Но вот как его найти?
А очень просто: если мы делим многочлен F с остатком на P, то значения остатка в корнях P совпадают со значениями F.
Поэтому остаток от деления F на P с некратными корнями — это единственный многочлен степени <= deg P -1, у которого в корнях те же значения, что и у F.
И вот получается алгоритм вычисления F(A): сначала построить интеполяционный многочлен R(x) по известным значениям F(λ_j) в корнях P(x) — собственных значениях λ_j. И потом подставить туда A.
Для матрицы A размера 2x2, нахождение R(x) это проведение прямой по двум точкам, что совсем быстро.
Для матрицы A размера 2x2, нахождение R(x) это проведение прямой по двум точкам, что совсем быстро.
Для матрицы размера 3x3 — работы чуть больше (возвести A в квадрат, найти квадратный трёхчлен по трём значениям), но тоже вполне обозримо.
А узнал я это в своё время из посвящённого многочленам Лагранжа курса Аскольда Георгиевича Хованского — https://www.mccme.ru/dubna/2006/courses/khovansky.html (а вот тут лежат его записки — https://www.mccme.ru/dubna/2006/notes/newlagrang.pdf )
Математические постеры, которые висят в коридорах факультета математики (https://math.u-bourgogne.fr/ ) в Дижоне:
Institut de Mathématiques de Bourgogne - UMR 5584
IMB - Institut de Mathématiques de Bourgogne - UMR 5584 - Accueil
L’Institut de Mathématiques de Bourgogne (IMB) est une Unité Mixte de Recherche (UMR 5584) commune au CNRS et à l’Université de Bourgogne.