Nota importante : Como esse desafio se aplica apenas a matrizes quadradas, sempre que eu uso o termo "matriz", presume-se que estou me referindo a uma matriz quadrada. Estou deixando de fora a descrição "quadrada" por uma questão de brevidade.
fundo
Muitas operações relacionadas à matriz, como calcular o determinante, resolver um sistema linear ou estender funções com valor escalar para matrizes são facilitadas usando uma matriz diagonal (uma cujos elementos que não estão na diagonal principal são 0) que é semelhante para a matriz original (ou seja, para a matriz de entrada A
e a matriz diagonal D
, existe alguma matriz invertível P
que D = P^(-1) * A * P
, D
além de A
compartilhar algumas propriedades importantes, como autovalores, determinantes e traços). Para matrizes com valores próprios distintos (as raízes do polinômio característico da matriz, dadas pela resolução det(A-λI) = 0
de λ
, onde I
é a matriz de identidade com as mesmas dimensões A
), a diagonalização é simples:D
é uma matriz com os autovalores na diagonal principal e P
é uma matriz formada a partir de autovetores correspondentes a esses autovalores (na mesma ordem). Esse processo é chamado de composição automática .
No entanto, matrizes com valores próprios repetidos não podem ser diagonalizadas dessa maneira. Felizmente, a forma normal de qualquer matriz de Jordan pode ser calculada com bastante facilidade e não é muito mais difícil de trabalhar do que uma matriz diagonal regular. Ele também possui a propriedade legal de que, se os autovalores forem únicos, a decomposição de Jordan será idêntica à autocomposição.
Decomposição da Jordânia explicada
Para uma matriz quadrada A
cujos valores próprios têm uma multiplicidade geométrica de 1, o processo de decomposição de Jordan pode ser descrito da seguinte forma:
- Seja
λ = {λ_1, λ_2, ... λ_n}
a lista de autovalores deA
, com multiplicidade, com autovalores repetidos aparecendo consecutivamente. - Crie uma matriz diagonal
J
cujos elementos são os elementos deλ
, na mesma ordem. - Para cada valor próprio com multiplicidade maior que 1, coloque
1
a à direita de cada uma das repetições do valor próprio na diagonal principal deJ
, exceto a última.
A matriz resultante J
é uma forma normal de Jordan A
(pode haver várias formas normais de Jordan para uma determinada matriz, dependendo da ordem dos valores próprios).
Um exemplo trabalhado
Let A
Ser a seguinte matriz:
Os autovalores de A
, com multiplicidade, são λ = {1, 2, 4, 4}
. Ao colocá-los em uma matriz diagonal, obtemos o resultado:
Em seguida, colocamos 1
s à direita de todos, exceto um de cada um dos autovalores repetidos. Como 4
é o único valor próprio repetido, colocamos um único 1
próximo aos 4 primeiros:
Esta é uma forma normal do Jordan A
(uma única matriz pode potencialmente ter vários formulários normais do Jordan válidos, mas estou examinando esses detalhes para fins de explicação).
A tarefa
Dada uma matriz quadrada A
como entrada, produza uma forma normal válida de Jordan de A
.
- A entrada e a saída podem estar em qualquer formato razoável (matriz / lista 2D / qualquer que seja, lista / matriz / qualquer que seja o vetor de colunas ou linhas, um tipo de dados de matriz incorporado, etc.).
- Os elementos e valores próprios
A
sempre serão números inteiros no intervalo[-200, 200]
. - Por uma questão de simplicidade, todos os autovalores terão uma multiplicidade geométrica de 1 (e, portanto, o processo acima é válido).
A
será no máximo uma matriz 10x10 e pelo menos uma matriz 2x2.- Construções que calculam valores próprios e / ou vetores próprios ou executam composição automática, decomposição de Jordan ou qualquer outro tipo de decomposição / diagonalização não são permitidos. Aritmética de matriz, inversão de matriz e outras incorporadas à matriz são permitidas.
Casos de teste
[[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@#&
? Ou é trapaça?