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 Ae a matriz diagonal D, existe alguma matriz invertível Pque D = P^(-1) * A * P, Dalém de Acompartilhar 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) = 0de λ, 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 Acujos 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
Jcujos elementos são os elementos deλ, na mesma ordem. - Para cada valor próprio com multiplicidade maior que 1, coloque
1a à 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 ASer 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 1s à direita de todos, exceto um de cada um dos autovalores repetidos. Como 4é o único valor próprio repetido, colocamos um único 1pró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 Acomo 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
Asempre 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).
Aserá 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?