Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Daor02 en 20 Enero 2017, 21:15 pm



Título: Serie de Seno(x) en Python calcula correctamente hasta sen(35)... por qué?
Publicado por: Daor02 en 20 Enero 2017, 21:15 pm
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:

Código
  1. import math
  2.  
  3. x = float(input("Ingrese x: "))
  4.  
  5. exp = 1
  6. senox = 0
  7. comparacion = 1
  8. i = 1
  9.  
  10. while math.fabs(comparacion - senox) > 0.001:
  11.  
  12.    comparacion = senox
  13.  
  14.    if i % 2 == 0:
  15.  
  16.        senox -= (x**exp) / math.factorial(exp)
  17.  
  18.    else:
  19.  
  20.        senox += (x**exp) / math.factorial(exp)
  21.  
  22.    exp += 2
  23.    i += 1
  24.  
  25. 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:


Título: Re: Serie de Seno(x) en Python calcula correctamente hasta sen(35)... por qué?
Publicado por: ivancea96 en 21 Enero 2017, 00:38 am
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)