Mi jefe me acaba de decir que escriba una función coseno. Siendo un buen geek matemático, mi mente inmediatamente evocó la serie Taylor adecuada.
cos(x) = 1 / 0! - x^2 / 2! + x^4 / 4! - x^6 / 6! + ... + (-1)^k x^(2k) / (2k)! + ...
Sin embargo, mi jefe es muy exigente. Le gustaría poder especificar exactamente cuántos términos de la serie Taylor calcular. ¿Me pueden ayudar a escribir esta función?
Tu tarea
Dado un valor de punto flotante x
de 0
a 2 pi
y un número entero positivo n
de menos de 100
, calcular la suma de los primeros n
términos de la serie de Taylor dados anteriormente para cos(x)
.
Este es el código de golf , por lo que gana el código más corto. La entrada y la salida se pueden tomar de cualquiera de las formas estándar. Las lagunas estándar están prohibidas.
Notas
- La entrada puede tomarse en cualquier forma razonable, siempre que haya una separación clara entre
x
yn
. - La entrada y la salida deben ser valores de punto flotante, al menos tan precisos como calcular la fórmula utilizando números de punto flotante IEEE de precisión simple con alguna regla de redondeo estándar.
- Si tiene sentido para el lenguaje que se está utilizando, los cálculos se pueden hacer usando cantidades racionales exactas, pero la entrada y la salida todavía estarán en forma decimal.
Ejemplos
x | n | Output
----+----+--------------
0.0 | 1 | 1.0
0.5 | 1 | 1.0
0.5 | 2 | 0.875
0.5 | 4 | 0.87758246...
0.5 | 9 | 0.87758256...
2.0 | 2 | -1.0
2.0 | 5 | -0.4158730...
code-golf
math
trigonometry
calculus
Silvio Mayolo
fuente
fuente
n
también es mayor que0
?Respuestas:
Operation Flashpoint lenguaje de script,
165157 bytesLlamar con:
Salida:
Estoy bastante seguro de que los números son números de coma flotante IEEE de precisión simple, aunque en la salida impresa los decimales más largos no son tan precisos. Es la impresión que redondea los números así, en realidad los números son más precisos.
Por ejemplo,
a=1.00001;b=1.000011;hint format["%1\n%2\n%3", a, b, a==b]
generará esto:Claramente, la precisión real de los números es mayor que la precisión impresa.
fuente
dir=-1;num=1;player addEventHandler ["fired", {_dir=getdir (nearestObject [_this select 0, _this select 4]);if (dir < 0) then {dir = _dir} else {if (abs(dir - _dir) < 5) then {num = num + 1} else {hint format["%1", [dir*(pi/180), num] call F];dir=-1;num=1}}}]
- Disparar en alguna dirección incrementa el contador, y luego disparar en otra dirección llama a la función coseno con la dirección anterior y el número de disparos en esa dirección.05AB1E ,
1411 bytesPruébalo en línea!
Explicación
fuente
²
, pero en su lugar puede ser reemplazado porI
.MATL , 14 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación con ejemplo
Todos los números tienen doble precisión (este es el valor predeterminado).
Considere insumos
x = 2.0
,n = 5
.fuente
Mathematica,
49413931 bytesVersión antigua y más "divertida": (39 bytes)
¡Ahorré 10 bytes gracias a @Pavel y 8 gracias a @Greg Martin!
fuente
Series
capacidad de Mathematica es realmente increíble y divertida, resulta que la implementación manualSum[(-#^2)^k/(2k)!,{k,0,#2-1}]&
es más corta aquí.Jalea ,
1211 bytesPruébalo en línea!
¿Cómo?
fuente
Jalea, 22 bytes
Este es un programa completo que toma n como el primer argumento yx como el segundo.
Explicación:
fuente
Python, 54 bytes
Si usa Python 2, asegúrese de pasar x como flotante, no como entero, pero entiendo que no importa si está usando Python 3.
fuente
TI-Basic,
4140 bytes1E-49
se agrega al ángulo porque TI-Basic arroja un error para 0 ^ 0, es lo suficientemente grande como para no causar el error y no es lo suficientemente grande como para cambiar la respuesta.fuente
C, 96 bytes
Recursive Live
Detallado
Recursivo progresivo, 133 bytes en vivo
Detallado
fuente
c(0.5, 80)
=> NaN, para desbordamientof(80)=0
n<100
así que al menos no vas tan lejos en el rango. No desbordamiento de pilan<100
y usa laO(2^n)
solución, supongo que está bien, siempre y cuando eventualmente vuelva a generar el resultadoJavaScript (ES6), 46 bytes
Toma entradas al curry (x) (n).
fuente
C, 71 bytes
utilizando el esquema de Horner
Versión sin golf:
fuente
R,
7064 bytesahorró 6 bytes gracias a la respuesta de pizzapants184 con el truco (-x ^ 2) ^ y
65 bytes:
más o menos la implementación ingenua de esto, pero un poco de golf; devuelve una función anónima que calcula la serie Taylor al n especificado
init
que debe establecerse en 0gamma(n+1)
lugar defactorial(n)
1:n-1
es equivalente a0:(n-1)
fuente
ok , 38 bytes
Esto también funciona en k , pero toma 39 bytes porque uno
'
debe escribirse como en su/:
lugar (al menos, en kmac 2016.06.28 lo hace).Explicación:
Comencemos con el bit del medio.
(*/y#x)
es exponenciación, es equivalente ax^y
.*/1+!y
seríay!
, oy
factorial.%
es división Por lo tanto, la función en el medio esmiddle(x,y) = (x^y)/(y!)
.Ahora el bit de la derecha, al que se aplica la función anterior.
2*!y
es{0, 2, 4, ..., 2*(y-1)}
.x,'
antecedex
a cada elemento de esa lista, convirtiéndolo en{(x, 0), (x, 2), (x, 4), ..., (x, 2*(y-1))}
. El.'
entonces se aplicamiddle
a cada par de números (map
, esencialmente).Finalmente,
(y#1 -1)*
multiplica el resultado por 1 o -1 (alternando), y+/
toma la suma.fuente
Haskell, 71 bytes
Esta es una respuesta bastante aburrida que no es demasiado difícil de descifrar. La
fromIntegral
realidad del momento, sin embargo. (El/
operador requiere operandos del mismo tipo numérico en Haskell, y la coerción entre tipos numéricos no está permitida sin una función verbal).fuente
f x n=sum[(-1)^i*x^(2*i)/fromIntegral(product[1..2*i])|i<-[0..n-1]]
Jalea , 12 bytes
Pruébalo en línea!
Cómo funciona
fuente
Pyth, 16 bytes
Acepta
n
primero, luegox
. Ejemplo de ejecución.fuente
Haskell , 61 bytes
Esto parecía lo suficientemente diferente de la otra solución de Haskell para garantizar una respuesta por separado. La implementación debe explicarse por sí misma: llame con
x#n
dóndex
está el número cuyo coseno se calculará yn
el orden de la suma parcial que se tomará.fuente
fromIntegral
y usando**
en lugar de^
, como estex#n=sum[(-x*x)**i/product[1..2*i]|i<-[0..n-1]]
ahorra 3 bytes más.Pyt ,
373433 bytesfuente
J,
2624 bytes-2 bytes gracias a @cole
Originalmente planeé usar un gerundio cíclico para alternar entre sumar y restar, pero no pude hacerlo funcionar.
Explicación:
fuente
+/@:(!@]%~^*_1^2%~])2*i.
Voy a investigar un gerundio cíclico: probablemente falló, ya que J evalúa de/
derecha a izquierda, por lo que debe usarlo|.
(o tal vez lo tuvo en cuenta y aún tuvo dificultades).Perl 6 , 53 bytes
Pruébalo en línea!
Esto realmente calcula el exponencial complejo e iθ para el doble del número de términos solicitados y luego toma la parte real.
fuente
MATLAB con Symbolic Math Toolbox, 57 bytes
Esto define una función anónima con que se lleva a
double
las entradasx
,n
y emite el resultado como unadouble
.Ejemplo (probado en R2015b):
fuente
JavaScript ES7 60 bytes
Para usarlo:
Presione F12, escriba la función y luego haga
fuente
C
144130 bytesVersión sin golf:
Gracias Kevin por guardar algunos bytes!
fuente
F(m){...}f(x,n)float x;{...}
while(m)u*=m--
ou=m;while(--m)u*=m
(misma longitud)i<=n-1
es lo mismo quei<n
Tcl , 126 bytes
Pruébalo en línea!
fuente
Stax , 12 bytes
Ejecutar y depurarlo
Desempaquetado, sin golf y comentado, se ve así.
Ejecute este
fuente
JavaScript, 59 bytes
Pruébalo en línea!
fuente
PHP, 76 bytes
toma
X
yN
de los argumentos de la línea de comandos; correr con-r
.bucle
$i
de0
aN*2-1
, asimientofac($i)
en$f
; si$i
es par, agregue término a la suma$s
. imprimir sumaDesearía tener números complejos (con una
M_I
unidad imaginaria);Lo haría simplemente se multiplican
$f
conM_I*++$i
y ahorro 7 bytes.Quizás Mathematica pueda hacer eso. Pero Mathematica no tiene que hacerlo.
Yo podría salvar a dos bytes con
cos(M_PI*$i/2)
en lugar de$i&1?:
y(-1)**$k++
;pero sería un poco extraño usar un coseno incorporado para construir una función coseno.
fuente
Axioma, 36 bytes
Construya el infinito (en el sentido finito pero se puede pedir construir la lista de 2 * n elementos si la PC tiene suficiente memoria) lista de sumas parciales para la serie de Taylor para cos (x) calcular en 'a', en "eval ( taylor (cos (x)), a) "; obtiene el elemento 2 * n de esa lista en ". (2 * n)". Casos de prueba:
fuente
J , 17 bytes
Pruébalo en línea!
Utiliza un incorporado , que supongo que está bien.
Desafortunadamente, no sé cómo trabajar bien con funciones que toman argumentos mediante currículum como este, así que tuve que hacerlo explícitamente. Estoy seguro de que hay una manera de hacerlo de manera tácita o más corta.
fuente
Limpio , 77 bytes
Pruébalo en línea!
fuente