Definition
Die Maxima und Minima einer gegebenen Funktion sind die größten und kleinsten Werte der Funktion entweder innerhalb eines gegebenen Bereichs oder auf andere Weise innerhalb des gesamten Bereichs der Funktion.
Herausforderung
Die Herausforderung besteht darin , die lokalen Maxima und Minima einer gegebenen Polynomfunktion mit einer beliebigen Methode zu finden . Keine Sorge, ich werde mein Bestes geben, um die Herausforderung zu erklären und sie so einfach wie möglich zu halten.
Die Eingabe enthält alle Koeffizienten des einzelnen variablen Polynoms in abnehmender oder zunehmender Reihenfolge der Potenz (bis zu Ihnen). Beispielsweise,
[3,-7,1]
wird vertreten3x2 - 7x + 1 = 0
[4,0,0,-3]
wird vertreten4x3-3=0.
Wie löst man (mit Derivaten)?
Nehmen wir an, unser Input ist [1,-12,45,8]
, was nichts anderes als die Funktion ist .x3 - 12x2 + 45x + 8
Die erste Aufgabe besteht darin, die Ableitung dieser Funktion zu finden. Da es sich um eine Polynomfunktion handelt, ist dies in der Tat eine einfache Aufgabe.
Die Ableitung von ist . Alle konstanten Terme, die mit vorhanden sind, werden einfach multipliziert. Wenn Terme addiert / subtrahiert werden, werden auch deren Ableitungen addiert bzw. subtrahiert. Denken Sie daran, dass die Ableitung eines konstanten numerischen Werts Null ist. Hier einige Beispiele:
xn
n*xn-1
xn
x3 -> 3x2
9x4 -> 9*4*x3 = 36x3
-5x2 -> -5*2*x = - 10x
2x3 - 3x2 + 7x -> 6x2 - 6x + 7
4x2 - 3 -> 8x - 0 = 8x
Lösen Sie nun die Gleichung, indem Sie das neue Polynom mit Null gleichsetzen und nur die Integralwerte von x erhalten.
Setzen Sie diese Werte von x in die ursprüngliche Funktion und geben Sie die Ergebnisse zurück. Das sollte die Ausgabe sein .
Beispiel
Nehmen wir das zuvor erwähnte Beispiel [1,-12,45,8]
.
- Eingang:
[1,-12,45,8]
- Funktion:
x3 - 12x2 + 45x + 8
- Derivat ->
3x2 - 24x + 45 + 0 -> [3,-24,45]
- Lösen wir die Gleichung , erhalten wir oder .
3x2 - 24x + 45 = 0
x = 3
x = 5
- Setzen wir nun
x = 3
undx = 5
in die Funktion, erhalten wir die Werte(62,58)
. - Ausgabe ->
[62,58]
Annahmen
Angenommen, alle Eingabekoeffizienten sind ganze Zahlen . Sie können in zunehmender oder abnehmender Reihenfolge der Leistung sein.
Angenommen, die Eingabe ist mindestens ein 2-Grad-Polynom . Wenn das Polynom keine ganzzahligen Lösungen hat, können Sie alles zurückgeben.
Angenommen, das Endergebnis ist nur eine ganze Zahl.
Sie können die Ergebnisse in beliebiger Reihenfolge ausdrucken. Der Grad des Eingabepolynoms würde nicht mehr als 5 betragen, damit Ihr Code damit umgehen kann.
Die Eingabe ist gültig, sodass die Lösungen von x keine Sattelpunkte sind.
Auch Sie nicht , es zu tun durch die Ableitung Methode gezwungen. Sie können jede Methode verwenden, die Sie möchten.
Sample Input und Output
[2,-8,0] -> (-8)
[2,3,-36,10] -> (91,-34)
[1,-8,22,-24,8] -> (-1,0,-1)
[1,0,0] -> (0)
Wertung
Das ist Code-Golf, also gewinnt der kürzeste Code.
(-1, 0, 1)
, was meiner Meinung nach die richtige Antwort ist ... ich bin mir jedoch nicht sicher. Wenn Sie mit mir nicht einverstanden sind, rufen Sie mich im Chat an.The input will be valid so that the solutions of x are not saddle points
[1,0,0,3]
scheint der Fall einen Sattelpunkt zu geben.x^3 - 12x^2 + 45x
+8 = 0
, obwohl ich persönlich lieber schreibe alsf(x)=x^3-12x^2+45x+8
ohne,=0
weil=0
es keinen Sinn macht, da es sich um eine Funktion handelt und keine Gleichung gelöst wird.Antworten:
Gelee , 20 Bytes
Probieren Sie es online!
Erläuterung
Die Hilfsfunktion in diesem Programm wurde aus der Antwort von Herrn Xcoder hier übernommen, die auf der Antwort von Luis hier basierte
quelle
3
ist0
. edit oh du hast doch schon nvm gerade den kommentar dannJavaScript (ES7),
129120 BytesNimmt die Koeffizienten in aufsteigender Reihenfolge der Leistung auf.
Testfälle
Code-Snippet anzeigen
Kommentiert
quelle
0,0,1
(x ^ 2 = 0)Julia 0.6 (mit
Polynomials
Paket), 57 BytesProbieren Sie es online!
Nimmt Koeffizienten in aufsteigender Reihenfolge auf, dh die erste Eingabe ist der konstante Term.
Beispiellauf:
quelle
Java 8,
364239227226218 BytesVerwendet die gleiche Funktionalität aus meiner Antwort.
-8 Bytes dank @ OlivierGrégoire indem das Array in umgekehrter Reihenfolge wird.
Erläuterung:
Probieren Sie es online aus.
quelle
1,0,0
(x ^ 2 = 0)int... ,i, ...; for(;f>0;)A[--f]*=f;
. Wenn ich mich nicht irre, sollten Sie dadurch mindestens 4 Bytes sparen. Stellen Sie in diesem Fall sicher, dass Sie alle Zugriffe auf die Eingabe invertieren.Wolfram Language (Mathematica) , 30 Byte
Nimmt ein reines Funktionspolynom (dh ein Polynom mit
#
als Variable und mit einem&
am Ende).Probieren Sie es online!
quelle
Haskell , 89 Bytes
-3 Bytes dank Laikoni.
Probieren Sie es online!
Nimmt Koeffizienten umgekehrt.
quelle
d<-tail$
kann auf gekürzt werden_:d<-
.Python 3 , 156 Bytes
Probieren Sie es online!
-2 Bytes dank Mr. Xcoder
-22 Bytes dank Ovs
quelle
Python + Numpy, 91
Probieren Sie es online aus .
quelle
Pari / GP , 28 Bytes
Bewerten Sie das Polynom an den Wurzeln seiner Ableitung.
Probieren Sie es online!
quelle