L'objectif est simple: produire une solution réelle non nulle x
dans l'équation sin(x) = -mx
, en fonction de l'entrée m
, dans le moins d'octets.
Caractéristiques:
- Votre réponse doit être correcte à 3 chiffres significatifs.
- Vous pouvez sortir n'importe quelle solution réelle autre que la solution triviale
x=0
. Vous pouvez supposer qu'ilm
existe au moins une solution. Vous pouvez également supposerm!=0
.
Une solution python évidemment sous-optimale utilisant la descente de gradient :
from math import *
from random import *
a=x=0.001
m = 5.
def dE(x):return 2*(sin(x)+m*x+1)*(cos(x)+m)
for i in xrange(1000): x-=dE(x)*a
print x
Cas de test
-0.25 -> ±2.4746
-0.1 -> ±2.8523 or ±7.0682 or ±8.4232
0.2 -> ±4.1046 or ±4.9063
a
pour résoudresin(x)=-ax
. Veuillez ne pas dire "vous devez réellement le calculer", car les exigences comme celles-ci sont trop vagues pour fonctionner.x=0
une solution triviale. Vous devez spécifier la solution que vous souhaitez.m=0
a des solutions (x=kπ
pour entierk
). Les valeursm
qui n'ont pas de vraies solutions non triviales sont celles qui sont trop éloignées0
.Réponses:
isé :
3228 octetsEn utilisant l'itération de Newton à partir de π:
L'argument est passé
$1
, qui peut être extrait d'un fichier, comme ceci:Version un peu moins stable mais plus courte:
Parfois, il lance des avertissements de limite d'itération, mais la précision semble correcte compte tenu des conditions.
Version Unicode (même bytecount):
Partir de 4 coupe un autre octet et semble converger vers les mêmes valeurs
la source
Haskell, 34 octets
Compte
x
de 0 à 0,001 jusqu'àsin(x)< -m*x
.Exemples de sortie
la source
m=-0.1
?2.853
, ce qui semble correct.Mathematica, 28 octets
Recherche une racine numérique à partir de la supposition initiale
x=1
. Cas de test:la source
C, 99 octets
non golfé:
la source
MATL , 17 octets
Cela utilise la recherche linéaire sur l'axe réel positif, donc c'est lent. Tous les cas de test se terminent en 1 minute dans le compilateur en ligne.
Essayez-le en ligne!
Explication
la source
C ++ 11,
9291 octets-1 octet pour l'utilisation
#import
la source
Python 2,
8178 octetsItération de point fixe
Comme lambda récursif
En boucle (81 octets):
la source
Mathematica, 52 octets
Fonction anonyme. Prend un nombre en entrée et renvoie une liste de nombres en sortie. Utilise juste
NSolve
pour résoudre l'équation approximative.la source
Sin@x==-x#
par,Sinc@x==-#
vous pouvez supprimer~DeleteCases~0.
Axiome, 364 octets
ungolf
résultats
la source
Haskell, 50 octets
Je viens d'apprendre la méthode de newton dans ma classe calc, alors voici comment
haskell
utiliser la méthode de newton.f m=foldl(\x _->x-(sin x+m*x)/(cos x+m))0[1..10]
la source