Pour ceux qui ont un petit fond d'algèbre linéaire, le défi est aussi simple que cela: déterminer les valeurs propres et les vecteurs propres d'une matrice 2x2 complexe donnée. Vous pouvez passer directement au défi pour les détails des E / S, etc.
Contexte
L' équation caractéristique d'une matrice A est définie par
det| A - λI | = 0
où λ est un paramètre complexe (scalaire), I est la matrice d'identité et det | ... | est le déterminant . Le côté gauche correspond à un polynôme en λ , le polynôme caractéristique , qui est quadratique dans le cas de matrices 2x2. Les solutions de cette équation caractéristique sont les valeurs propres de A , que nous désignerons comme λ 1 et λ 2 .
Maintenant, les vecteurs propres v i de A satisfont
A vi = λi vi
Pour chaque λ i , cela vous donne un système de deux équations à deux inconnues (les composantes de v i ), qui peuvent être résolues assez facilement. Vous remarquerez que le système est en fait sous-spécifié et que la magnitude des vecteurs propres n'est pas déterminée par les équations. Nous voulons généralement que les vecteurs propres soient normalisés, c'est-à-dire √ (| x | 2 + | y | 2 ) = 1 , où x et y sont les composantes vectorielles, | x | 2 est x multiplié par son conjugué complexe.
Notez que les valeurs propres peuvent être dégénérées, c'est-à-dire λ 1 = λ 2 . Dans ce cas, vous pouvez ou non être en mesure de satisfaire le système unique d'équations avec deux vecteurs propres linéairement indépendants.
Le défi
Étant donné une matrice 2x2 avec des éléments complexes, déterminez ses deux valeurs propres (éventuellement identiques) et un vecteur propre normalisé pour chaque valeur propre. Les nombres résultants doivent être précis à au moins 3 chiffres décimaux (décimaux). Vous pouvez supposer que les parties réelles et imaginaires de n'importe quel élément de matrice sont dans la plage [-1,1] .
Vous pouvez écrire une fonction ou un programme, en prenant une entrée via STDIN, un argument de ligne de commande, une invite ou un argument de fonction. Vous pouvez exporter le résultat vers STDOUT, une boîte de dialogue ou comme valeur de retour de fonction.
Vous pouvez utiliser n'importe quelle chaîne ou format de liste pratique (mais sans ambiguïté) pour l'entrée et la sortie. Vous pouvez également choisir entre des paires de flotteurs ou des types complexes pour représenter les nombres individuels.
Vous ne devez pas utiliser de fonctions intégrées pour résoudre des systèmes électroniques (comme Mathematica Eigenvectors
ou Eigensystem
) ou des solveurs d'équations.
Il s'agit du code golf, donc la réponse la plus courte (en octets) l'emporte.
Exemples
Chaque exemple est composé de trois lignes: l'entrée, les valeurs propres et les vecteurs propres correspondants dans le même ordre. Notez que les vecteurs propres ne sont déterminés que jusqu'à leur phase, et que dans le cas de valeurs propres dégénérées, les vecteurs propres peuvent en fait être arbitraires (comme dans le premier exemple).
[[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]]
la source