Cel jest prosty: wyprowadzić niezerowe rzeczywiste rozwiązanie x
równania sin(x) = -mx
, biorąc pod uwagę dane wejściowe m
, w jak najmniejszej liczbie bajtów.
Dane techniczne:
- Twoja odpowiedź musi być poprawna na 3 znaczące liczby.
- Możesz wypisać dowolne prawdziwe rozwiązanie inne niż rozwiązanie trywialne
x=0
. Możesz założyćm
, że istnieje co najmniej jedno rozwiązanie. Możesz również założyćm!=0
.
Oczywiście nieoptymalne rozwiązanie python wykorzystujące pochylenie gradientu :
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
Przypadki testowe
-0.25 -> ±2.4746
-0.1 -> ±2.8523 or ±7.0682 or ±8.4232
0.2 -> ±4.1046 or ±4.9063
a
rozwiązaniasin(x)=-ax
. Nie mów „musisz to wyliczyć”, ponieważ takie wymagania są zbyt niejasne, aby działały.x=0
to rozwiązanie trywialne. Powinieneś określić, które rozwiązanie chcesz.m=0
ma rozwiązania (x=kπ
dla liczb całkowitychk
). Wartości,m
które nie mają nietrywialnych rzeczywistych rozwiązań, to te, które są zbyt dalekie0
.Odpowiedzi:
Ised :
3228 bajtówKorzystanie z iteracji Newtona od π:
Argument jest przekazywany
$1
, który można pobrać z pliku, jak poniżej:Trochę mniej stabilna, ale krótsza wersja:
Czasami generuje ostrzeżenia o limicie iteracji, ale dokładność wydaje się dobra, biorąc pod uwagę warunki.
Wersja Unicode (ta sama liczba bajtów):
Począwszy od 4 przecina kolejny bajt i wydaje się, że zbiega się do tych samych wartości
źródło
Haskell, 34 bajty
Zlicza
x
od 0 o 0,001 dosin(x)< -m*x
.Przykłady Ouput
źródło
m=-0.1
?2.853
, co wygląda dobrze.Mathematica, 28 bajtów
Wyszukuje pierwiastek liczbowy z początkowego odgadnięcia
x=1
. Przypadki testowe:źródło
C, 99 bajtów
bez golfa:
źródło
MATL , 17 bajtów
Wykorzystuje to wyszukiwanie liniowe na dodatniej osi rzeczywistej, więc jest wolne. Wszystkie przypadki testowe kończą się w kompilatorze online w ciągu 1 minuty.
Wypróbuj online!
Wyjaśnienie
źródło
C ++ 11,
9291 bajtów-1 bajt do użycia
#import
źródło
Python 2,
8178 bajtówIteracja punktu stałego
Jako rekurencyjna lambda
Jako pętla (81 bajtów):
źródło
Mathematica, 52 bajty
Funkcja anonimowa. Pobiera liczbę jako dane wejściowe i zwraca listę liczb jako dane wyjściowe. Służy tylko
NSolve
do rozwiązania przybliżonego równania.źródło
Sin@x==-x#
sięSinc@x==-#
można pozbyć się~DeleteCases~0.
Aksjomat, 364 bajty
Ungolf
wyniki
źródło
Haskell, 50 bajtów
Właśnie dowiedziałem się o metodzie Newtona w mojej klasie calc, więc tutaj
haskell
jest metoda Newtona.f m=foldl(\x _->x-(sin x+m*x)/(cos x+m))0[1..10]
źródło