Das charakteristische Polynom einer quadratischen Matrix A wird als Polynom definiert P A (x) = det ( I x- A ) wobei I die ist Identitätsmatrix und det die Determinante . Beachten Sie, dass diese Definition immer ein monisches Polynom ergibt, sodass die Lösung eindeutig ist.
Ihre Aufgabe für diese Herausforderung ist es, die Koeffizienten des charakteristischen Polynoms für eine ganzzahlige Matrix zu berechnen. Hierzu können Sie integrierte Funktionen verwenden, aber davon wird abgeraten.
Regeln
- Die Eingabe ist eine NxN (N ≥ 1) Ganzzahlmatrix in einem beliebigen geeigneten Format
- Ihr Programm / Ihre Funktion gibt die Koeffizienten entweder in aufsteigender oder absteigender Reihenfolge aus / zurück (bitte spezifizieren Sie welche)
- die Koeffizienten werden so normiert, dass der Koeffizient von x N 1 ist (siehe Testfälle)
- Sie müssen keine ungültigen Eingaben verarbeiten
Testfälle
Die Koeffizienten sind in absteigender Reihenfolge angegeben (dh 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]
zum Beispiel ausgeben als ?Antworten:
SageMath , 3 Bytes
5 Bytes gespart dank @Mego
Probieren Sie es online!
Nimmt ein
Matrix
als Eingabe.fcp
steht für f actorization des c haracteristic p olynomial,Das ist kürzer als die normalen eingebauten
charpoly
.quelle
Oktave ,
164 Bytes@BruteForce hat mir gerade gesagt, dass eine der Funktionen, die ich in meiner vorherigen Lösung verwendet habe, tatsächlich die gesamte Arbeit erledigen kann:
Probieren Sie es online!
16 Bytes: Diese Lösung berechnet die Eigenwerte der Eingangsmatrix und baut dann aus den gegebenen Wurzeln ein Polynom auf.
Aber es ist natürlich auch langweilig
(Benötigt eine
symbolic
Typmatrix in Octave, funktioniert aber mit den üblichen Matrizen in MATLAB.)Probieren Sie es online!
quelle
Pari / GP , 8 Bytes
Probieren Sie es online!
Pari / GP , 14 Bytes
Probieren Sie es online!
quelle
x
zu einer Matrix der passenden Dimension? Nett!R , 53 Bytes
Probieren Sie es online!
Gibt die Koeffizienten in aufsteigender Reihenfolge zurück. dh
a_0, a_1, a_2, ..., a_n
.Berechnet das Polynom durch Ermitteln der Eigenwerte der Matrix.
R + pracma , 16 Bytes
pracma
ist die "PRACtical MAth" -Bibliothek für R und verfügt über einige praktische Funktionen.quelle
Mathematica, 22 Bytes
-7 Bytes von Alephalpha
-3 Bytes von Mischa Lawrow
Probieren Sie es online!
und natürlich...
Mathematica, 29 Bytes
Probieren Sie es online!
Beide Antworten geben ein Polynom aus
quelle
Haskell ,
243 223222 BytesProbieren Sie es online!
Vielen Dank an @ ØrjanJohansen, der mir beim Golfen geholfen hat!
Erläuterung
Dabei werden die Koeffizienten mit dem Faddeev-LeVerrier-Algorithmus berechnet. Hier ist eine ungolfed Version mit ausführlicheren Namen:
Hinweis: Ich habe dies direkt aus dieser Lösung übernommen
quelle
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
, dass etwas Ähnliches auch bei dem anderen funktionieren sollte.Python 2 + Anzahl , 23 Bytes
Probieren Sie es online!
quelle
MATL , 4 Bytes
Probieren Sie es online!
Dies ist nur eine Portierung der Oktavantwort von flawr , daher werden die Koeffizienten in absteigender Reihenfolge zurückgegeben, dh
[a_n, ..., a_1, a_0]
quelle
CJam (48 Bytes)
Online-Testsuite
Präparation
Dies ist meiner Antwort auf Determinante einer Ganzzahlmatrix ziemlich ähnlich . Es gibt einige Optimierungen, weil die Vorzeichen unterschiedlich sind und weil wir alle Koeffizienten behalten wollen und nicht nur den letzten.
quelle