Das Ziel ist einfach: Geben Sie eine reale Lösung ungleich Null x
für die Gleichung sin(x) = -mx
bei gegebener Eingabe m
in der geringsten Anzahl von Bytes aus.
Spezifikationen:
- Ihre Antwort muss auf 3 signifikante Zahlen korrekt sein.
- Sie können jede andere echte Lösung als die triviale Lösung ausgeben
x=0
. Sie können davon ausgehenm
, dass mindestens eine Lösung vorhanden ist. Sie können auch annehmenm!=0
.
Eine offensichtlich suboptimale Python-Lösung mit Gradientenabstieg :
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
Testfälle
-0.25 -> ±2.4746
-0.1 -> ±2.8523 or ±7.0682 or ±8.4232
0.2 -> ±4.1046 or ±4.9063
a
der gelöst werden sollsin(x)=-ax
. Bitte sagen Sie nicht "Sie müssen es tatsächlich berechnen", da solche Anforderungen zu vage sind, um zu funktionieren.x=0
ist eine triviale Lösung. Sie sollten angeben, welche Lösung Sie möchten.m=0
hat Lösungen (x=kπ
für Ganzzahlk
). Die Werte, fürm
die es keine nicht trivialen realen Lösungen gibt, sind diejenigen, die zu weit entfernt sind0
.Antworten:
ised :
3228 BytesVerwenden der Newtonschen Iteration ab π:
Das Argument wird übergeben
$1
, das wie folgt aus einer Datei entnommen werden kann:Etwas weniger stabil, aber kürzere Version:
Manchmal werden Iterationslimit-Warnungen ausgegeben, aber die Genauigkeit scheint unter Berücksichtigung der Bedingungen in Ordnung zu sein.
Unicode-Version (gleiche Bytezahl):
Ausgehend von 4 wird ein weiteres Byte abgeschnitten und scheint zu denselben Werten zu konvergieren
quelle
Haskell, 34 Bytes
Zählt
x
von 0 um 0,001 bissin(x)< -m*x
.Ausgabebeispiele
quelle
m=-0.1
?2.853
, was richtig aussieht.Mathematica, 28 Bytes
Sucht nach einer numerischen Wurzel aus der anfänglichen Vermutung
x=1
. Testfälle:quelle
C 99 Bytes
ungolfed:
quelle
MATL , 17 Bytes
Dies verwendet eine lineare Suche auf der positiven realen Achse, daher ist sie langsam. Alle Testfälle enden innerhalb von 1 Minute im Online-Compiler.
Probieren Sie es online aus!
Erläuterung
quelle
C ++ 11,
9291 Bytes-1 Byte für die Verwendung
#import
quelle
Python 2,
8178 BytesFixpunktiteration
Als rekursives Lambda
Als Schleife (81 Bytes):
quelle
Mathematica, 52 Bytes
Anonyme Funktion. Nimmt eine Zahl als Eingabe und gibt eine Liste von Zahlen als Ausgabe zurück. Wird nur verwendet
NSolve
, um die ungefähre Gleichung zu lösen.quelle
Sin@x==-x#
mitSinc@x==-#
können Sie abschaffen~DeleteCases~0.
Axiom, 364 Bytes
ungolf
Ergebnisse
quelle
Haskell, 50 Bytes
Ich habe gerade in meiner Calc-Klasse etwas über die Newton-Methode gelernt, daher wird hier
haskell
die Newton-Methode verwendet.f m=foldl(\x _->x-(sin x+m*x)/(cos x+m))0[1..10]
quelle