Nota importante : debido a que este desafío solo se aplica a las matrices cuadradas, cada vez que uso el término "matriz", se supone que me refiero a una matriz cuadrada. Estoy dejando la descripción "cuadrada" por razones de brevedad.
Antecedentes
Muchas operaciones relacionadas con la matriz, como calcular el determinante, resolver un sistema lineal o extender funciones de valores escalares a las matrices, se hacen más fáciles al usar una matriz diagonal (una cuyos elementos que no están en la diagonal principal son 0) que es similar a la matriz original (es decir, para la matriz de entrada A
y la matriz diagonal D
, existe una matriz invertible P
tal que D = P^(-1) * A * P
; también, D
y A
comparte algunas propiedades importantes, como valores propios, determinantes y trazas). Para matrices con valores propios distintos (la raíz hasta polinomio característico de la matriz, dado por la resolución det(A-λI) = 0
para λ
, donde I
es la matriz de identidad con las mismas dimensiones que A
), diagonalización es simple:D
es una matriz con los valores propios en la diagonal principal, y P
es una matriz formada por vectores propios correspondientes a esos valores propios (en el mismo orden). Este proceso se llama descomposición propia .
Sin embargo, las matrices con valores propios repetidos no se pueden diagonalizar de esta manera. Afortunadamente, la forma normal de Jordan de cualquier matriz se puede calcular con bastante facilidad, y no es mucho más difícil de trabajar que una matriz diagonal regular. También tiene la buena propiedad de que, si los valores propios son únicos, entonces la descomposición de Jordan es idéntica a la descomposición propia.
Descomposición de Jordan explicada
Para una matriz cuadrada A
cuyos valores propios tienen una multiplicidad geométrica de 1, el proceso de descomposición de Jordan se puede describir como tal:
- Sea
λ = {λ_1, λ_2, ... λ_n}
la lista de valores propios deA
, con multiplicidad, con valores propios repetidos que aparecen consecutivamente. - Cree una matriz diagonal
J
cuyos elementos son los elementos deλ
, en el mismo orden. - Para cada valor propio con multiplicidad mayor que 1, coloque a
1
a la derecha de cada una de las repeticiones del valor propio en la diagonal principal deJ
, excepto el último.
La matriz resultante J
es una forma normal de Jordan A
(puede haber múltiples formas normales de Jordan para una matriz dada, dependiendo del orden de los valores propios).
Un ejemplo trabajado
Sea A
la siguiente matriz:
Los valores propios de A
, con multiplicidad, son λ = {1, 2, 4, 4}
. Al ponerlos en una matriz diagonal, obtenemos este resultado:
A continuación, colocamos 1
s a la derecha de todos menos uno de cada uno de los valores propios repetidos. Como 4
es el único valor propio repetido, colocamos un solo al 1
lado de los primeros 4:
Esta es una forma normal de Jordan A
(una matriz simple puede tener varias formas normales de Jordan válidas, pero voy a pasar por alto ese detalle a efectos de explicación).
La tarea
Dada una matriz cuadrada A
como entrada, genera una forma normal válida de Jordan de A
.
- La entrada y la salida pueden estar en cualquier formato razonable (matriz 2D / lista / lo que sea, lista / matriz / lo que sea de vectores de columna o fila, un tipo de datos de matriz incorporado, etc.).
- Los elementos y valores propios de
A
siempre serán enteros en el rango[-200, 200]
. - En aras de la simplicidad, todos los valores propios tendrán una multiplicidad geométrica de 1 (y, por lo tanto, el proceso anterior se cumple).
A
como máximo será una matriz de 10x10 y al menos una matriz de 2x2.- No se permiten las unidades integradas que calculan valores propios y / o vectores propios o realizan descomposición propia, descomposición de Jordan o cualquier otro tipo de descomposición / diagonalización. La aritmética de la matriz, la inversión de la matriz y otras matrices incorporadas están permitidas.
Casos de prueba
[[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@#&
? ¿O es trampa?