Buenas! Paso a preguntar algo que no he podido entender. Estoy tratando de resolver un programa en Python que le pide al usuario un número x, a partir del cuál se va a hallar el sen(x) de ese número, en radianes, pero sin usar librerías sino siguiendo la serie matemática de:
sen(x) = (x^1)/1! - (x^3)/3! + (x^5)/5! ... (+-) (x^n)/n!
Además, el programa tiene que parar cuando la diferencia entre la serie y un nuevo término sea menor o igual a 0.001.
Así, este es el código que he hecho:
import math
x = float(input("Ingrese x: "))
exp = 1
senox = 0
comparacion = 1
i = 1
while math.fabs(comparacion - senox) > 0.001:
comparacion = senox
if i % 2 == 0:
senox -= (x**exp) / math.factorial(exp)
else:
senox += (x**exp) / math.factorial(exp)
exp += 2
i += 1
print ("ANS:",senox)
Y funciona! Para los primeros 35 valores el resultado es bastante aproximado. Aun así, de ahí en adelante los resultados se van muy lejos de lo que en realidad son. Por ejemplo, si coloco x=45, me dice que sen(45) = -302.99513662655323, siendo que sen(45) es en realidad igual a 0.851... y no entiendo por qué? Alguno tiene alguna idea de por qué pueda pasar?
Un saludo! Gracias!
(A propósito, después del número 61 deja de calcular debido a que los números son muy grandes! Error: OverflowError: int too large to convert to float)
:silbar: :silbar: :silbar:
Esa es una seriede taylor https://es.wikipedia.org/wiki/Serie_de_Taylor (https://es.wikipedia.org/wiki/Serie_de_Taylor)
Es solo una aproximación, y llega un punto donde da valores que no se aproximan.
Afortunadamente, las funciones trigonométricas se repiten a partir de 2*PI, así que podrías coger los valores siempre del intervalo [0, 2*PI)