Was ist der Ultraradikal
Der Ultraradikal oder das Bring-Radikal einer reellen Zahl ist definiert als die einzige reelle Wurzel der Quintingleichung .
Hier verwenden wir , um die Ultraradikalfunktion zu bezeichnen. Zum Beispiel ist , da .
Herausforderung
Schreiben Sie ein vollständiges Programm oder eine Funktion, die eine reelle Zahl als Eingabe verwendet und deren Ultraradikal zurückgibt oder ausgibt.
Bedarf
Es sind keine Standardlücken erlaubt. Die Ergebnisse für die folgenden Testfälle müssen auf mindestens 6 signifikante Stellen genau sein. Im Allgemeinen sollte das Programm jedoch die entsprechenden Werte für alle gültigen reellen Zahleneingaben berechnen.
Testfälle
Als Referenz werden 9 auf 0 gerundete Dezimalstellen angegeben. Für einige Testfälle wurde eine Erklärung hinzugefügt.
a | UR(a)
---------------------------+---------------------
0 | 0.000 000 000 # 0
1 | -0.754 877 (666) # UR(a) < 0 when a > 0
-1 | 0.754 877 (666) # UR(a) > 0 when a < 0
1.414 213 562 | -0.881 616 (566) # UR(sqrt(2))
-2.718 281 828 | 1.100 93(2 665) # UR(-e)
3.141 592 653 | -1.147 96(5 385) # UR(pi)
-9.515 716 566 | 1.515 71(6 566) # 5th root of 8, fractional parts should match
10 | -1.533 01(2 798)
-100 | 2.499 20(3 570)
1 000 | -3.977 89(9 393)
-100 010 | 10.000 0(00 000) # a = (-10)^5 + (-10)
1 073 741 888 | -64.000 0(00 000) # a = 64^5 + 64
Gewinnkriterien
Die kürzeste gültige Einsendung in jeder Sprache gewinnt.
quelle
und
anstelle von↦
und verwendetᵀ
Python 3.8 (Vorabversion) , 60 Byte
Probieren Sie es online!
Newton-Iterationsmethode.x′= x - f( x )f′( x )= x - x5+ x + n5 x4+ 1
Bei Verwendung von4 x5- n5 x4+ 1 ist mathematisch äquivalent, es macht die Programmschleife für immer.
Anderer Ansatz:
Python 3.8 (Vorabversion) , 102 Byte
Probieren Sie es online!
Binäre Suche, da die Funktion
x^5+x+a
zunimmt. Setzen Sie die Grenzen auf-abs(x)
undabs(x)
ist ausreichend, aber-x*x-1
undx*x+1
ist kürzer.BTW Pythons Rekursionslimit ist etwas zu niedrig, daher ist 1e-9 erforderlich, und der
:=
wird als Walrossoperator bezeichnet.quelle
JavaScript (ES7), 44 Byte
Eine sicherere Version mit der gleichen Formel wie unten, jedoch mit einer festen Anzahl von Iterationen.
Probieren Sie es online!
JavaScript (ES7),
4342 BytesNewtonsche Methode unter Verwendung von5 x4+ 5 als Approximation von f′( x ) = 5 x4+ 1 .
Probieren Sie es online!
Wie?
Wir beginnen mitx0= 0 und berechnen rekursiv:
bisxk- xk + 1 ist unbedeutend.
quelle
Gelee , 8 Bytes
Probieren Sie es online!
Wie es funktioniert:
[a, 1, 0, 0, 0, 1]
Erstellt die Liste, indema
der binären Darstellung von vorangestellt wird17
. Warum diese Liste? Weil es den Koeffizienten entspricht, die wir suchen:Dann
Ær
ist ein eingebautes, das die Polynomgleichung löstP(x) = 0
, gegeben eine Liste der Koeffizienten (was wir vorher konstruiert haben).Wir interessieren uns nur für die reale Lösung, deshalb nehmen wir den ersten Eintrag in der Liste der Lösungen mit
Ḣ
.quelle
APL (Dyalog Unicode) ,
1110 Bytes SBCS-1 danke an dzaima
Anonyme implizite Präfixfunktion.
Probieren Sie es online!
(
…)⍣¯1
Wenden Sie einmal die folgende implizite Funktion negativ an:-
das negierte Argument-
Minus*∘5
das Argument zur Potenz von 5 erhobenIm Wesentlichen fragt dies: Welchesx muss ich f( x ) = - x - x5 so zuführen, dass das Ergebnis wirdy
quelle
R , 43 Bytes
Probieren Sie es online!
nlm
nlm
a
quelle
R , 56 Bytes
Probieren Sie es online!
polyroot
polyroot
quelle
polyroot
gibt alle komplexen Wurzeln zurück ... Sonst würde es gewinnen.J , 14 Bytes
Probieren Sie es online!
J hat eine eingebaute für die Lösung von Polynomen ...
p.
Die letzten 4 Testfälle haben eine Zeitüberschreitung bei TIO, sind aber theoretisch immer noch korrekt.
Wie
Die Polynomkoeffizienten für Js Builtin werden als numerische Liste mit dem Koeffizienten für
x^0
first verwendet. Das heißt, die Liste ist:1 0 0 0 1
ist 17 in binär, also stellen wir es so dar#:@17
, fügen dann die Eingabe hinzu,
, wendenp.
dann an, entpacken die Ergebnisse mit raze;
und nehmen dann das letzte Element{:
quelle
Ruby ,
5341 BytesProbieren Sie es online!
Verwendung von Newton-Raphson mit einer festen Anzahl von Iterationen und demselben Approximationstrick wie Arnauld
quelle
Pari / GP ,
34322624 BytesProbieren Sie es online!
quelle
s(-100010)
Ergebnis in-8.090... - 5.877...*I
anstatt nur10
? Ist dies eine Einschränkung der Sprache für große Testfälle? PS: Sie können 2 Bytes speichern, indem Sie beide0.2
in ändern.2
. :)a->solve(X=-a,a,X^5+X+a)
.05AB1E , 12 Bytes
Probieren Sie es online!
Newtons Methode.
quelle
k4,
3331 BytesNewton-Raphson wird iterativ berechnet, bis eine Zahl konvergiert
edit: -2 danke an ngn!
Hoppla, alles falsch gemacht ...
K (oK), 10 Bytesquelle
[
]
scheint unnötigPari / GP , 24 Bytes
Probieren Sie es online!
quelle
solve
es ein Analogon gibtC 118b / 96b
118 Bytes mit dem ursprünglichen Funktionsnamen und einer gewissen zusätzlichen Genauigkeit (doppelt). Mit Bit-Hacks ist es vielleicht besser, aber nicht portierbar.
96 Bytes mit festen Iterationen.
Tatsächlich ist unsere Funktion so gut, dass wir die Newtonsche Methode besser anpassen können. Eine viel schnellere und praktischere Implementierung (150 Bytes) wäre
Ich habe überprüft, ob es funktioniert, aber ich bin zu faul, um herauszufinden, wie viel schneller es sein würde. Sollte mindestens eine weitere Bestellung schneller sein als Newtons.
quelle
x-=t=...
arbeiten?Sauber ,
6160 BytesProbieren Sie es online!
Newtons Methode, die zuerst in der Antwort von user202729 implementiert wurde .
Sauber , 124 Bytes
Probieren Sie es online!
Eine "binäre" Suche, bei der der Suchbereich bei jeder Iteration auf die oberen oder unteren 99,6% des Bereichs zwischen den oberen und unteren Grenzen anstatt auf 50% eingeschränkt wird.
quelle
Python 3 + Sympy, 72 Bytes
Probieren Sie es online!
quelle
Oktave , 25 Bytes
Probieren Sie es online!
quelle
Maplesoft Maple , 23 Bytes
Leider gibt es keinen Online-Maple-Compiler / Taschenrechner von AFAIK. Aber der Code ist ziemlich einfach.
quelle