Qu'est-ce que l'Ultraradical
L' ultraradical , ou le radical Bring, d'un nombre réel est défini comme la seule vraie racine de l'équation quintique .
Ici, nous utilisons pour désigner la fonction ultraradicale. Par exemple, , puisque .
Défi
Écrivez un programme complet ou une fonction, qui prend un nombre réel en entrée, et retourne ou sort son ultraradical.
Exigences
Aucune échappatoire standard n'est autorisée. Les résultats pour les cas de test ci-dessous doivent être précis à au moins 6 chiffres significatifs, mais en général, le programme doit calculer les valeurs correspondantes pour toute entrée de nombre réel valide.
Cas de test
9 décimales arrondies vers 0 sont données à titre de référence. Une explication est ajoutée pour certains des cas de test.
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
Critères gagnants
La soumission valide la plus courte dans toutes les langues gagne.
la source
et
au lieu de↦
etᵀ
Python 3.8 (pré-version) , 60 octets
Essayez-le en ligne!
Méthode d'itération de Newton.X′= x - f( x )F′( x )= x - x5+ x + n5 x4+ 1
En utilisant4 x5- n5 x4+ 1 est mathématiquement équivalent, cela fait que le programme boucle pour toujours.
Autre approche:
Python 3.8 (pré-version) , 102 octets
Essayez-le en ligne!
Recherche binaire, étant donné que la fonction
x^5+x+a
augmente. Fixez les limites à-abs(x)
etabs(x)
est suffisant mais-x*x-1
etx*x+1
est plus court.La limite de récursivité de BTW Python est un peu trop basse, il est donc nécessaire d'avoir 1e-9, et
:=
s'appelle l'opérateur morse.la source
JavaScript (ES7), 44 octets
Une version plus sûre utilisant la même formule que ci-dessous mais avec un nombre fixe d'itérations.
Essayez-le en ligne!
JavaScript (ES7),
4342 octetsMéthode de Newton, utilisant5 x4+ 5 comme approximation de F′( x ) = 5 x4+ 1 .
Essayez-le en ligne!
Comment?
Nous commençons parX0= 0 et calculons récursivement:
jusqu'à ce quexk−xk+1 soit insignifiant.
la source
Gelée , 8 octets
Essayez-le en ligne!
Comment ça marche:
Construit la liste
[a, 1, 0, 0, 0, 1]
en ajoutanta
la représentation binaire de17
. Pourquoi cette liste? Parce qu'elle correspond aux coefficients que nous recherchons:Ensuite,
Ær
est un intégré qui résout l'équation polynomialeP(x) = 0
, étant donné une liste de coefficients (ce que nous avons construit plus tôt).Nous ne sommes intéressés que par la vraie solution, nous prenons donc la première entrée dans la liste des solutions avec
Ḣ
.la source
APL (Dyalog Unicode) ,
1110 octets SBCS-1 grâce à dzaima
Fonction de préfixe tacite anonyme.
Essayez-le en ligne!
(
…)⍣¯1
Appliquer une fois la fonction tacite négative négative:-
l'argument nié-
moins*∘5
l'argument porté à la puissance de 5Essentiellement, cela demande: quelX dois-je fournir à F( x ) = - x - x5 sorte que le résultat devienne y .
la source
R , 43 octets
Essayez-le en ligne!
nlm
nlm
a
la source
R , 56 octets
Essayez-le en ligne!
polyroot
polyroot
la source
polyroot
renvoie toutes les racines complexes ... Sinon ça gagnerait.J , 14 octets
Essayez-le en ligne!
J a un intégré pour résoudre les polynômes ...
p.
Le délai d'expiration des 4 derniers tests sur TIO, mais en théorie, est toujours correct.
Comment
Les coefficients polynomiaux pour la fonction intégrée de J sont pris comme une liste numérique, avec le coefficient pour le
x^0
premier. Cela signifie que la liste est:1 0 0 0 1
est 17 en binaire, donc nous le représentons comme#:@17
, puis ajoutons l'entrée,
, puis appliquonsp.
, puis déballons les résultats avec raze;
, puis prenons le dernier élément{:
la source
Rubis ,
5341 octetsEssayez-le en ligne!
Utiliser Newton-Raphson avec un nombre fixe d'itérations, et la même astuce d'approximation qu'Arnauld
la source
Pari / GP ,
34322624 octetsEssayez-le en ligne!
la source
s(-100010)
résultat au-8.090... - 5.877...*I
lieu de juste10
? Est-ce une limitation de la langue pour les grands cas de test? PS: Vous pouvez enregistrer 2 octets en changeant les deux0.2
en.2
. :)a->solve(X=-a,a,X^5+X+a)
.05AB1E , 12 octets
Essayez-le en ligne!
La méthode de Newton.
la source
k4,
3331 octetsnewton-raphson calculé itérativement jusqu'à ce qu'un nombre converge
edit: -2 grâce à ngn!
whoops, tout cela est faux ...
K (oK), 10 octetsla source
[
]
semble inutilePari / GP , 24 octets
Essayez-le en ligne!
la source
solve
a un analogueC, 118b / 96b
118 octets avec le nom de la fonction d'origine et avec une précision supplémentaire (double). Avec un peu de piratage peut être mieux, mais non transférable.
96 octets avec itérations fixes.
En fait, notre fonction est si bonne que nous pouvons utiliser de meilleures adaptations de la méthode de Newton. Une mise en œuvre beaucoup plus rapide et pratique (150 octets) serait
J'ai vérifié que cela fonctionne, mais je suis trop paresseux pour savoir à quel point ce serait plus rapide. Devrait être au moins une commande plus rapide que celle de Newton.
la source
x-=t=...
travail?Nettoyer ,
6160 octetsEssayez-le en ligne!
La méthode de Newton, d'abord implémentée dans la réponse de user202729 .
Nettoyer , 124 octets
Essayez-le en ligne!
Une recherche "binaire", rétrécissant la zone de recherche à 99,6% supérieur ou inférieur de la plage entre les limites hautes et basses à chaque itération au lieu de 50%.
la source
Python 3 + sympy, 72 octets
Essayez-le en ligne!
la source
Octave , 25 octets
Essayez-le en ligne!
la source
Érable Maplesoft , 23 octets
Malheureusement, il n'y a pas de compilateur / calculateur Maple en ligne là-bas AFAIK. Mais le code est assez simple.
la source