Важное примечание : поскольку этот вызов относится только к квадратным матрицам, каждый раз, когда я использую термин «матрица», предполагается, что я имею в виду квадратную матрицу. Для краткости я оставляю «квадратное» описание.
Фон
Многие связанные с матрицей операции, такие как вычисление определителя, решение линейной системы или расширение скалярных функций до матриц, упрощаются благодаря использованию диагональной матрицы (элемент которой не на главной диагонали равен 0), которая аналогична с оригинальной матрицы (то есть, для матрицы входного A
и диагональной матрицы D
, существует некоторая обратимая матрица P
таким образом, что D = P^(-1) * A * P
, кроме того , D
и A
имеют некоторые важные свойства, такие как собственные, определителя и следа). Для матриц с различными собственными значениями (корни характеристического полинома матрицы, заданные путем решения det(A-λI) = 0
для λ
, где I
единичная матрица с такими же размерами, что и A
), диагонализация проста:D
является матрицей с собственными значениями на главной диагонали и P
является матрицей, образованной из собственных векторов, соответствующих этим собственным значениям (в том же порядке). Этот процесс называется собственным разложением .
Однако матрицы с повторяющимися собственными значениями не могут быть диагонализированы таким образом. К счастью, нормальную жорданову форму любой матрицы можно вычислить довольно легко, и с ней не намного сложнее работать, чем с обычной диагональной матрицей. Он также обладает хорошим свойством, что, если собственные значения являются уникальными, то разложение Жордана идентично собственному разложению.
Объяснение разложения Джордана
Для квадратной матрицы A
, все собственные значения которой имеют геометрическую кратность 1, процесс разложения Джордана можно описать так:
- Позвольте
λ = {λ_1, λ_2, ... λ_n}
быть список собственных значенийA
, с кратностью, с повторяющимися собственными значениями, появляющимися последовательно. - Создайте диагональную матрицу
J
, элементами которой являются элементыλ
, в том же порядке. - Для каждого собственного значения с кратностью, большей 1, поместите a
1
справа от каждого из повторений собственного значения в главной диагоналиJ
, кроме последнего.
Результирующая матрица J
представляет собой нормальную жорданову форму A
(может быть несколько нормальных жордановых форм для данной матрицы в зависимости от порядка собственных значений).
Работающий пример
Позвольте A
быть следующей матрицы:
Собственные значения A
, с кратностью, являются λ = {1, 2, 4, 4}
. Поместив их в диагональную матрицу, мы получим такой результат:
Затем мы помещаем 1
s справа от всех, кроме одного, каждого из повторяющихся собственных значений. Поскольку 4
это единственное повторяемое собственное значение, мы помещаем единицу 1
рядом с первыми 4:
Это нормальная жорданова форма A
(одна матрица потенциально может иметь несколько допустимых нормальных жордановых форм, но я поясняю эту деталь для пояснения).
Задание
Учитывая квадратную матрицу в A
качестве входных данных, выведите правильную жорданову нормальную форму A
.
- Вход и выход могут быть в любом приемлемом формате (2D массив / список / что угодно, список / массив / что угодно из векторов столбцов или строк, тип данных встроенной матрицы и т. Д.).
- Элементы и собственные значения
A
всегда будут целыми числами в диапазоне[-200, 200]
. - Для простоты все собственные значения будут иметь геометрическую кратность 1 (и, следовательно, вышеописанный процесс выполняется).
A
будет не более 10х10 матрицы и не менее 2х2 матрицы.- Встроенные функции, которые вычисляют собственные значения и / или собственные векторы или выполняют собственное разложение, разложение Жордана или любой другой вид разложения / диагонализации, не допускаются. Матричная арифметика, матричная инверсия и другие встроенные матрицы допускаются.
Контрольные примеры
[[1, 0], [0, 1]] -> [[1, 1], [0, 1]]
[[3, 0], [0, 3]] -> [[1, 1], [0, 1]]
[[4, 2, 2], [1, 2, 2],[0, 3, 3]] -> [[6, 0, 0], [0, 3, 0], [0, 0, 0]]
[[42, 48, 40, 64, 64], [41, 47, 31, 58, 42], [-55, -47, -27, -74, -46], [-46, -58, -46, -70, -68], [30, 20, 12, 34, 18]] -> [[10, 0, 0, 0, 0], [0, -18, 0, 0, 0], [0, 0, 6, 1, 0], [0, 0, 0, 6, 1], [0, 0, 0, 0, 6]]
Last@JordanDecomposition@#&
? Или это обман?