Para aquellos con un poco de fondo de álgebra lineal, el desafío es tan simple como esto: determinar los valores propios y los vectores propios de una matriz compleja de 2x2 dada. Puede pasar al Reto para obtener detalles de E / S, etc. Para aquellos que necesitan un poco de actualización sobre eigensystems, siga leyendo.
Antecedentes
La ecuación característica de una matriz A se define por
det| A - λI | = 0
donde λ es un parámetro complejo (escalar), I es la matriz de identidad y det | ... | Es el determinante . El lado izquierdo se evalúa como un polinomio en λ , el polinomio característico , que es cuadrático en el caso de matrices de 2x2. Las soluciones de esta ecuación característica son los valores propios de A , que denotaremos como λ 1 y λ 2 .
Ahora los vectores propios v i de A satisfacen
A vi = λi vi
Para cada λ i , esto le proporciona un sistema de dos ecuaciones en dos incógnitas (los componentes de v i ), que se pueden resolver con bastante facilidad. Notará que el sistema está realmente subespecificado, y la magnitud de los vectores propios no está determinada por las ecuaciones. Por lo general, queremos que los vectores propios se normalicen, es decir √ (| x | 2 + | y | 2 ) = 1 , donde x e y son los componentes del vector, | x | 2 es x multiplicado por su complejo conjugado.
Tenga en cuenta que los valores propios pueden ser degenerados, es decir, λ 1 = λ 2 . En este caso, puede o no ser capaz de satisfacer el único sistema de ecuaciones con dos vectores propios linealmente independientes.
El reto
Dada una matriz de 2x2 con elementos complejos, determine sus dos valores propios (posiblemente idénticos) y un vector propio normalizado para cada valor propio. Los números resultantes deben tener una precisión de al menos 3 dígitos (decimales) significativos. Puede suponer que las partes reales e imaginarias de cualquier elemento de la matriz están en el rango [-1,1] .
Puede escribir una función o un programa, tomando datos a través de STDIN, argumento de línea de comando, indicador de solicitud o argumento de función. Puede enviar el resultado a STDOUT, un cuadro de diálogo o como el valor de retorno de la función.
Puede usar cualquier cadena conveniente (pero no ambigua) o formato de lista para entrada y salida. También puede elegir entre pares de flotadores o tipos complejos para representar los números individuales.
No debe usar funciones integradas para resolver sistemas propios (como Mathematica Eigenvectors
o Eigensystem
) o solucionadores de ecuaciones.
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
Ejemplos
Cada ejemplo tiene tres líneas: la entrada, los valores propios y los vectores propios correspondientes en el mismo orden. Tenga en cuenta que los vectores propios solo se determinan hasta su fase, y que en el caso de valores propios degenerados, los vectores propios pueden ser realmente arbitrarios (como en el primer ejemplo).
[[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]]