O objetivo é simples: gerar uma solução real diferente de zero x
para a equação sin(x) = -mx
, dada a entrada m
, no menor número de bytes.
Especificações:
- Sua resposta deve estar correta para 3 algarismos significativos.
- Você pode produzir qualquer solução real que não seja a trivial
x=0
. Você pode assumirm
que existe pelo menos uma solução. Você também pode assumirm!=0
.
Uma solução python obviamente abaixo do ideal usando descida de gradiente :
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
Casos de teste
-0.25 -> ±2.4746
-0.1 -> ±2.8523 or ±7.0682 or ±8.4232
0.2 -> ±4.1046 or ±4.9063
a
de resolversin(x)=-ax
. Por favor, não diga "você precisa calculá-lo", pois requisitos como esse são vagos demais para funcionar.x=0
é uma solução trivial. Você deve especificar qual solução deseja.m=0
tem soluções (x=kπ
para inteirok
). Os valores dosm
quais não têm soluções reais não triviais são aqueles que estão muito longe0
.Respostas:
ised :
3228 bytesUsando a iteração de Newton a partir de π:
O argumento é passado
$1
, que pode ser obtido de um arquivo, assim:Versão um pouco menos estável, mas mais curta:
Às vezes, lança avisos de limite de iteração, mas a precisão parece boa considerando as condições.
Versão Unicode (o mesmo número anterior):
A partir de 4 corta outro byte e parece convergir para os mesmos valores
fonte
Haskell, 34 bytes
Conta
x
desde 0 por 0,001 atésin(x)< -m*x
.Exemplos Ouput
fonte
m=-0.1
?2.853
, o que parece certo.Mathematica, 28 bytes
Procura uma raiz numérica a partir da estimativa inicial
x=1
. Casos de teste:fonte
C, 99 bytes
ungolfed:
fonte
MATL , 17 bytes
Isso usa pesquisa linear no eixo real positivo, por isso é lento. Todos os casos de teste terminam em 1 minuto no compilador online.
Experimente online!
Explicação
fonte
C ++ 11,
9291 bytes-1 byte para usar
#import
fonte
Python 2,
8178 bytesIteração de Fixpoint
Como lambda recursiva
Como loop (81 bytes):
fonte
Mathematica, 52 bytes
Função anônima. Pega um número como entrada e retorna uma lista de números como saída. Apenas usa
NSolve
para resolver a equação aproximada.fonte
Sin@x==-x#
porSinc@x==-#
você pode acabar com #~DeleteCases~0.
Axioma, 364 bytes
ungolf
resultados
fonte
Haskell, 50 bytes
Acabei de aprender sobre o método de newton na minha classe de cálculo, então aqui
haskell
vamos usar o método de newton.f m=foldl(\x _->x-(sin x+m*x)/(cos x+m))0[1..10]
fonte