Ważna uwaga : ponieważ to wyzwanie dotyczy tylko macierzy kwadratowych, za każdym razem, gdy używam terminu „macierz”, zakłada się, że mam na myśli macierz kwadratową. Ze względu na zwięzłość pomijam opis „kwadratowy”.
tło
Wiele operacji związanych z macierzą, takich jak obliczanie wyznacznika, rozwiązywanie układu liniowego lub rozszerzanie funkcji o wartości skalarnej na macierze, jest łatwiejsze dzięki zastosowaniu macierzy diagonalnej (tej, której elementy nie znajdują się na głównej przekątnej wynoszą 0), która jest podobna do pierwotnej macierzy (co oznacza, że dla macierzy wejściowej A
i macierzy diagonalnej D
istnieje pewna macierz odwracalna P
taka, że D = P^(-1) * A * P
; także, D
i A
mają pewne ważne właściwości, takie jak wartości własne, wyznacznik i ślad). Do matryc z różnych wartości własnych (korzeniach do osnowy charakterystycznej wielomianu danym w trakcie rozwiązywania det(A-λI) = 0
dla λ
gdzie I
macierz identyczności z tych samych wymiarach co A
) diagonalizacja jest prostaD
jest macierzą z wartościami własnymi na głównej przekątnej i P
jest macierzą utworzoną z wektorów własnych odpowiadających tym wartościom własnym (w tej samej kolejności). Ten proces nazywa się składem eigend .
Jednak matryc z powtarzanymi wartościami własnymi nie można diagonalizować w ten sposób. Na szczęście normalną postać Jordana dowolnej matrycy można dość łatwo obliczyć i nie jest to trudniejsze w użyciu niż zwykła macierz diagonalna. Ma także tę przyjemną właściwość, że jeśli wartości własne są unikalne, to rozkład Jordana jest identyczny z rozkładem eigend.
Wyjaśnienie rozkładu Jordana
W przypadku macierzy kwadratowej, A
której wszystkie wartości własne mają geometryczną krotność 1, proces rozkładu Jordana można opisać jako taki:
- Niech
λ = {λ_1, λ_2, ... λ_n}
będzie lista wartości własnychA
, z wielokrotnością, z powtarzającymi się wartościami własnymi pojawiającymi się kolejno. - Utwórz macierz diagonalną,
J
której elementy są elementamiλ
, w tej samej kolejności. - Dla każdej wartości własnej o wielokrotności większej niż 1, umieść a
1
po prawej stronie każdego z powtórzeń wartości własnej na głównej przekątnejJ
, z wyjątkiem ostatniej.
Powstała macierz J
jest postacią normalną Jordana A
(dla danej macierzy może być wiele postaci normalnych Jordana, w zależności od kolejności wartości własnych).
Sprawdzony przykład
Niech A
będzie następująca macierz:
Wartości własne A
, z wielością, są λ = {1, 2, 4, 4}
. Umieszczając je w macierzy diagonalnej, otrzymujemy ten wynik:
Następnie umieszczamy 1
s po prawej stronie wszystkich oprócz jednej z powtarzanych wartości własnych. Ponieważ 4
jest to jedyna powtarzana wartość własna, umieszczamy singiel 1
obok pierwszych 4:
Jest to normalna forma Jordana A
(pojedyncza matryca może potencjalnie mieć kilka prawidłowych form Jordan, ale w celu wyjaśnienia omawiam te szczegóły).
Zadanie
Biorąc pod uwagę kwadratową macierz A
jako dane wejściowe, wypisz prawidłową normalną postać Jordana A
.
- Dane wejściowe i wyjściowe mogą być w dowolnym rozsądnym formacie (tablica 2D / lista / cokolwiek, lista / tablica / cokolwiek z wektorów kolumn lub wierszy, wbudowany typ danych macierzy itp.).
- Elementami i wartościami własnymi
A
zawsze będą liczby całkowite z tego zakresu[-200, 200]
. - Dla uproszczenia wszystkie wartości własne będą miały geometryczną krotność 1 (a zatem powyższy proces obowiązuje).
A
będzie co najwyżej macierzą 10x10 i co najmniej macierzą 2x2.- Wbudowane funkcje, które obliczają wartości własne i / lub wektory własne lub wykonują skład eigend, rozkład Jordana lub inny rodzaj rozkładu / diagonalizacji, są niedozwolone. Dozwolone są arytmetyka macierzy, inwersja macierzy i inne wbudowane macierze.
Przypadki testowe
[[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@#&
? A może to oszustwo?