Python - Aproximación al seno y al coseso

   
Vista:

Aproximación al seno y al coseso

Publicado por sor (12 intervenciones) el 03/05/2017 04:11:31
Hola. Se trata de la aproximación al seno y al coseno con las series de Taylor. Mi código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
print('Aproximación al seno y coseno de un ángulo.')
 
from math import pi
 
def factorial(x1):
    factorial=1
    while x1>1:
        factorial*=x1
        x1-=1
    return factorial
 
def seno(x1):
    repeticiones=99.0
    sumatorio=1.0
    n=0.0
    seno=0.0
    decimales=4
    while(n<repeticiones):
        n+=1
        numerador=float((-1)**n)*(x**(2*n+1))
        denominador=float(factorial(2.0*n+1.0))
        sumatorio=float(numerador/denominador)
        if n%2!=0:
            seno+=sumatorio
        else:
            seno-=sumatorio
    senofinal=seno+x1
    senofinal=str(round(senofinal,decimales))
    return senofinal
 
def coseno(x1):
    repeticiones=99.0
    sumatorio=1.0
    n=0.0
    coseno=0.0
    decimales=4
    while(n<repeticiones):
        numerador=float((-1)**n)*(x1**(2*n))
        denominador=float((factorial(2*n)))
        sumatorio=float(numerador/denominador)
        n+=1
        if n%2==0:
            coseno+=sumatorio
        else:
            coseno-=sumatorio
    cosenofinal=str(round(coseno,decimales))
    return cosenofinal
 
x=float(input('Dame el grado del ángulo (en grados sexagesimales): '))
x1=x*pi/180
 
print('La aproximación al seno de',x,'es:',seno(x1)*(180/pi))
print('La aproximación al coseno de',x,'es:',coseno(x1)*(180/pi))

Está más o menos bien. El problema viene cuando en el cálculo se pasa con el número de decimales (OverflowError). ¿Cómo podría evitarlo cuando le dé ciertos valores al ángulo (p. ej. 90)?
Gracias. Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Aproximación al seno y al coseso

Publicado por sor (12 intervenciones) el 05/05/2017 03:44:01
Lo he "retocado" y parece que con radianes sí funciona:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from math import pi
 
def factorial(x):
    factorial=1
    while x>1:
        factorial*=x
        x-=1
    return factorial
 
def seno(x):
    repeticiones=99.0
    sumatorio=1.0
    n=0.0
    seno=0.0
    decimales=4
    while(n<repeticiones):
        n+=1
        numerador=float((-1)**n)*(x**(2*n+1))
        denominador=float(factorial(2.0*n+1.0))
        sumatorio=float(numerador/denominador)
        if n%2!=0:
            seno+=sumatorio
        else:
            seno-=sumatorio
    senofinal=seno+x
    senofinal=str(round(senofinal,decimales))
    return senofinal
 
def coseno(x):
    repeticiones=99.0
    sumatorio=1.0
    n=0.0
    coseno=0.0
    decimales=4
    while(n<repeticiones):
        numerador=float((-1)**n)*(x**(2*n))
        denominador=float((factorial(2*n)))
        sumatorio=float(numerador/denominador)
        n+=1
        if n%2==0:
            coseno+=sumatorio
        else:
            coseno-=sumatorio
    cosenofinal=str(round(coseno,decimales))
    return cosenofinal
 
x=float(input('Dame el grado del ángulo (en radianes): '))
 
print('La aproximación al seno de',x,'es:',seno(x))
print('La aproximación al coseno de',x,'es:',coseno(x))

¿Se os ocurre cómo podría hacer que funcionara con grados sesageximales evitando el OverflowError? Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar