Dla osób z niewielkim tłem algebry liniowej wyzwanie jest tak proste: określić wartości własne i wektory własne danej złożonej macierzy 2x2. Możesz przejść do szczegółów wyzwania dla We / Wy itp. Dla tych, którzy potrzebują trochę odświeżenia na systemach eigensystem, czytaj dalej.
tło
Charakterystyczne równanie macierzy A jest określona
det| A - λI | = 0
gdzie λ jest parametrem złożonym (skalarnym), I jest macierzą tożsamości i det | ... | jest wyznacznikiem . Lewa strona ma postać wielomianu w λ , charakterystycznego wielomianu , który jest kwadratowy w przypadku macierzy 2x2. Rozwiązania tego charakterystycznego równania są wartości własne z A , które oznaczymy jako λ 1 i λ 2 .
Teraz wektory własne v I od A zaspokoić
A vi = λi vi
Dla każdego λ i daje to układ dwóch równań w dwóch niewiadomych (składowych v i ), które można rozwiązać dość łatwo. Zauważysz, że układ jest w rzeczywistości nieokreślony, a wielkość wektorów własnych nie jest określona przez równania. Zwykle chcemy, aby wektory własne były znormalizowane, to znaczy √ (| x | 2 + | y | 2 ) = 1 , gdzie x i y są składowymi wektorowymi, | x | 2 jest x pomnożone przez jego złożony koniugat.
Zauważ, że wartości własne mogą być zdegenerowane, tj. Λ 1 = λ 2 . W takim przypadku możesz spełnić pojedynczy układ równań za pomocą dwóch liniowo niezależnych wektorów własnych.
Wyzwanie
Biorąc pod uwagę macierz 2x2 ze złożonymi elementami, określ jej dwie (prawdopodobnie identyczne) wartości własne i znormalizowany wektor własny dla każdej wartości własnej. Wynikowe liczby muszą być dokładne co najmniej 3 (dziesiętne) cyfry znaczące. Możesz założyć, że rzeczywiste i urojone części dowolnego elementu macierzy mieszczą się w przedziale [-1,1] .
Możesz napisać funkcję lub program, przyjmując dane wejściowe przez STDIN, argument wiersza poleceń, monit lub argument funkcji. Możesz wyprowadzić wynik do STDOUT, okna dialogowego lub jako wartość zwracaną przez funkcję.
Możesz użyć dowolnego dogodnego (ale jednoznacznego) formatu ciągu lub listy dla danych wejściowych i wyjściowych. Możesz także wybierać między parami liczb zmiennoprzecinkowych lub typami złożonymi, które reprezentują poszczególne liczby.
Nie wolno używać wbudowanych funkcji do rozwiązywania układów elektronicznych (takich jak Mathematica Eigenvectors
lub Eigensystem
) lub rozwiązywania równań.
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).
Przykłady
Każdy przykład składa się z trzech linii: danych wejściowych, wartości własnych i odpowiadających im wektorów własnych w tej samej kolejności. Zauważ, że wektory własne są określane tylko do ich fazy, i że w przypadku zdegenerowanych wartości własnych, wektory własne mogą faktycznie być dowolne (jak w pierwszym przykładzie).
[[1.0, 0.0], [0.0, 1.0]]
[1.0, 1.0]
[[1.0, 0.0], [0.0, 1.0]]
[[0.0, 0.4], [-0.1, -0.4]]
[-0.2, -0.2]
[[0.894427, -0.447214], [0.894427, -0.447214]]
[[0.3, 0.1], [0.4, -0.9]]
[-0.932456, 0.332456]
[[-0.0808731, 0.996724], [0.951158, 0.308703]]
[[0.5, -1.0], [0.8, -0.5]]
[0.74162i, - 0.74162i]
[[0.745356, 0.372678 - 0.552771i], [0.745356, 0.372678 + 0.552771i]]
[[-0.0539222 + 0.654836i, -0.016102 + 0.221334i], [0.739514 - 0.17735i, -0.0849216 + 0.77977i]]
[0.238781 + 0.984333i, -0.377625 + 0.450273i]
[[0.313668 + 0.322289i, 0.893164], [-0.236405 - 0.442194i, 0.865204]]
[[-0.703107 - 0.331792i, 0.286719 - 0.587305i], [-0.418476 + 0.396347i, -0.885934 + 0.50534i]]
[-1.13654 - 0.32678i, -0.4525 + 0.500329i]
[[0.833367, -0.248208 - 0.493855i], [-0.441133 - 0.408236i, 0.799215]]
[[-0.156312 + 0.788441i, 0.045056 - 0.579167i], [0.130741 - 0.97017i, 0.049183 - 0.590768i]]
[-0.181759 + 1.11738i, 0.0746298 - 0.919707i]
[[0.86955, -0.493846 + 0.000213145i], [0.318856 - 0.0181135i, 0.94763]]