Per quelli con un piccolo background di algebra lineare, la sfida è semplice: determinare gli autovalori e gli autovettori di una data matrice 2x2 complessa. Puoi passare a The Challenge per i dettagli di I / O, ecc. Per coloro che hanno bisogno di un piccolo aggiornamento sugli eigensystem, continua a leggere.
sfondo
L' equazione caratteristica di una matrice A è definita da
det| A - λI | = 0
dove λ è un parametro complesso (scalare), I è la matrice identità e det | ... | è il determinante . Il lato sinistro restituisce un polinomio in λ , il polinomio caratteristico , che è quadratico nel caso di matrici 2x2. Le soluzioni di questa equazione caratteristica sono gli autovalori di A , che indicheremo come λ 1 e λ 2 .
Ora gli autovettori v i di A soddisfano
A vi = λi vi
Per ogni λ i , questo ti dà un sistema di due equazioni in due incognite (i componenti di v i ), che possono essere risolti abbastanza facilmente. Noterai che il sistema è in realtà non specificato e la grandezza degli autovettori non è determinata dalle equazioni. Vi solito è autovettori per essere normalizzati, cioè √ (| x | 2 + | y | 2 ) = 1 , dove x ed y sono le componenti del vettore, | x | 2 è x moltiplicato per il suo coniugato complesso.
Si noti che gli autovalori possono essere degenerati, ovvero λ 1 = λ 2 . In questo caso, potresti essere o meno in grado di soddisfare il singolo sistema di equazioni con due autovettori linearmente indipendenti.
La sfida
Data una matrice 2x2 con elementi complessi, determinare i suoi due autovalori (possibilmente identici) e un autovettore normalizzato per ciascun autovalore. I numeri risultanti devono essere precisi con almeno 3 cifre (decimali) significative. Puoi presumere che le parti reali e immaginarie di qualsiasi elemento matrice siano nell'intervallo [-1,1] .
È possibile scrivere una funzione o un programma, prendendo input tramite STDIN, argomento della riga di comando, prompt o argomento della funzione. È possibile generare il risultato su STDOUT, una finestra di dialogo o come valore di ritorno della funzione.
È possibile utilizzare qualsiasi formato di stringa o elenco conveniente (ma non ambiguo) per l'input e l'output. Puoi anche scegliere tra coppie di float o tipi complessi per rappresentare i singoli numeri.
Non è necessario utilizzare le funzioni integrate per risolvere gli eigensystem (come Mathematica Eigenvectors
o Eigensystem
) o i risolutori di equazioni.
Questo è il golf del codice, quindi vince la risposta più breve (in byte).
Esempi
Ogni esempio è composto da tre righe: input, autovalori e autovettori corrispondenti nello stesso ordine. Si noti che gli autovettori sono determinati solo fino alla loro fase e che nel caso di autovalori degeneri, gli autovettori possono effettivamente essere arbitrari (come nel primo esempio).
[[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]]