Le polynôme caractéristique d'une matrice carrée A est défini comme le polynôme p A (x) = det ( I x- A ) où I est la matrice d'identité et det le déterminant . Notez que cette définition nous donne toujours un polynôme monique tel que la solution est unique.
Votre tâche pour ce défi est de calculer les coefficients du polynôme caractéristique pour une matrice à valeurs entières, pour cela, vous pouvez utiliser des éléments intégrés mais cela est déconseillé.
Règles
- l'entrée est une matrice entière NxN (N ≥ 1) dans n'importe quel format pratique
- votre programme / fonction affichera / renverra les coefficients dans un ordre croissant ou décroissant (veuillez préciser lequel)
- les coefficients sont normés de telle sorte que le coefficient de x N est 1 (voir cas de test)
- vous n'avez pas besoin de gérer des entrées invalides
Cas de test
Les coefficients sont donnés par ordre décroissant (c'est-à-dire x N , x N-1 , ..., x 2 , x, 1):
[0] -> [1 0]
[1] -> [1 -1]
[1 1; 0 1] -> [1 -2 1]
[80 80; 57 71] -> [1 -151 1120]
[1 2 0; 2 -3 5; 0 1 1] -> [1 1 -14 12]
[4 2 1 3; 4 -3 9 0; -1 1 0 3; 20 -4 5 20] -> [1 -21 -83 559 -1987]
[0 5 0 12 -3 -6; 6 3 7 16 4 2; 4 0 5 1 13 -2; 12 10 12 -2 1 -6; 16 13 12 -4 7 10; 6 17 0 3 3 -1] -> [1 -12 -484 3249 -7065 -836601 -44200]
[1 0 0 1 0 0 0; 1 1 0 0 1 0 1; 1 1 0 1 1 0 0; 1 1 0 1 1 0 0; 1 1 0 1 1 1 1; 1 1 1 0 1 1 1; 0 1 0 0 0 0 1] -> [1 -6 10 -6 3 -2 0 0]
[ 1.00000000e+00 -1.51000000e+02 1.12000000e+03]
, par exemple?Réponses:
SageMath , 3 octets
5 octets enregistrés grâce à @Mego
Essayez-le en ligne!
Prend une
Matrix
entrée.fcp
supports pour f actorization du c haracteristic p olynomial,qui est plus court que le builtin normal
charpoly
.la source
Octave ,
164 octets@BruteForce vient de me dire qu'une des fonctions que j'utilisais dans ma solution précédente peut en fait faire tout le travail:
Essayez-le en ligne!
16 octets: cette solution calcule les valeurs propres de la matrice d'entrée, puis procède à la construction d'un polynôme à partir des racines données.
Mais bien sûr, il y a aussi l'ennuyeux
(nécessite une
symbolic
matrice de type dans Octave, mais fonctionne avec les matrices habituelles dans MATLAB.)Essayez-le en ligne!
la source
Pari / GP , 8 octets
Essayez-le en ligne!
Pari / GP , 14 octets
Essayez-le en ligne!
la source
x
une matrice de dimension appropriée? Agréable!R , 53 octets
Essayez-le en ligne!
Renvoie les coefficients dans l'ordre croissant; à savoir
a_0, a_1, a_2, ..., a_n
.Calcule le polynôme en trouvant les valeurs propres de la matrice.
R + pracma , 16 octets
pracma
est la bibliothèque "PRACtical MAth" pour R, et possède plusieurs fonctions pratiques.la source
Mathematica, 22 octets
-7 octets d'alephalpha
-3 octets de Misha Lavrov
Essayez-le en ligne!
et ... bien sûr ...
Mathematica, 29 octets
Essayez-le en ligne!
les deux réponses produisent un polynôme
la source
Haskell ,
243 223222 octetsEssayez-le en ligne!
Merci à @ ØrjanJohansen de m'avoir aidé à jouer au golf!
Explication
Celui-ci utilise l' algorithme de Faddeev – LeVerrier pour calculer les coefficients. Voici une version non golfée avec des noms plus verbeux:
Remarque: je l'ai pris directement de cette solution
la source
c=z pure[1..]a
.f a|let c=z pure[0..]a;g(u,d)k|m<-[z(+)a b|(a,b)<-a#u&[[s[d|x==y]|y<-c]|x<-c]]=(m,-s[a#m!!n!!n|n<-c]`div`(k+1))=snd<$>scanl g(0<$c<$c,1)c
quelque chose de similaire devrait également fonctionner sur l'autre.Python 2 + numpy , 23 octets
Essayez-le en ligne!
la source
MATL , 4 octets
Essayez-le en ligne!
Il s'agit simplement d'un port de réponse d'octave de flawr , il renvoie donc les coefficients dans l'ordre décroissant, c'est-à-dire
[a_n, ..., a_1, a_0]
la source
CJam (48 octets)
Suite de tests en ligne
Dissection
Ceci est assez similaire à ma réponse au déterminant d'une matrice entière . Il a quelques ajustements parce que les signes sont différents et parce que nous voulons garder tous les coefficients plutôt que le dernier.
la source