El objetivo es simple: generar una solución real distinta de cero x
para la ecuación sin(x) = -mx
, dada la entrada m
, en la menor cantidad de bytes.
Especificaciones:
- Su respuesta debe ser correcta a 3 cifras significativas.
- Puede generar cualquier solución real que no sea la solución trivial
x=0
. Puede suponer quem
es tal que existe al menos una solución. También puedes asumirm!=0
.
Una solución de Python obviamente subóptima que usa descenso 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 prueba
-0.25 -> ±2.4746
-0.1 -> ±2.8523 or ±7.0682 or ±8.4232
0.2 -> ±4.1046 or ±4.9063
a
resolversin(x)=-ax
. Por favor, no diga "realmente tiene que calcularlo", ya que requisitos como ese son demasiado vagos para funcionar.x=0
es una solución trivial. Debe especificar qué solución desea.m=0
tiene soluciones (x=kπ
para enterosk
). Los valoresm
que no tienen soluciones reales no triviales son aquellos que están demasiado lejos0
.Respuestas:
ised :
3228 bytesUsando la iteración de Newton a partir de π:
Se pasa el argumento
$1
, que se puede tomar de un archivo, así:Un poco menos estable, pero versión más corta:
A veces arroja advertencias de límite de iteración, pero la precisión parece buena teniendo en cuenta las condiciones.
Versión Unicode (mismo bytecount):
A partir de 4 corta otro byte y parece converger a los mismos valores
fuente
Haskell, 34 bytes
Cuenta
x
desde 0 por 0.001 hastasin(x)< -m*x
.Ejemplos de salida
fuente
m=-0.1
?2.853
, lo que parece correcto.Mathematica, 28 bytes
Busca una raíz numérica desde la suposición inicial
x=1
. Casos de prueba:fuente
C, 99 bytes
sin golf:
fuente
MATL , 17 bytes
Esto utiliza la búsqueda lineal en el eje real positivo, por lo que es lento. Todos los casos de prueba finalizan en 1 minuto en el compilador en línea.
Pruébalo en línea!
Explicación
fuente
C ++ 11,
9291 bytes-1 byte para usar
#import
fuente
Python 2,
8178 bytesIteración de punto fijo
Como lambda recursiva
Como bucle (81 bytes):
fuente
Mathematica, 52 bytes
Función anónima. Toma un número como entrada y devuelve una lista de números como salida. Solo se usa
NSolve
para resolver la ecuación aproximada.fuente
Sin@x==-x#
conSinc@x==-#
puede eliminar~DeleteCases~0.
Axioma, 364 bytes
ungolf
resultados
fuente
Haskell, 50 bytes
Acabo de aprender sobre el método de newton en mi clase calc, así que aquí entra
haskell
usando el método de newton.f m=foldl(\x _->x-(sin x+m*x)/(cos x+m))0[1..10]
fuente