2014-02-01 3 views
1
#power series of sine function 
def main(): 
    M=float(input('M: ')) #angle in degree 
    X=pi_value()*M/180 #angle in radian 
    print(sine(X))  
#factorial function 
def fac(N): 
    if N==0: 
     Num=1 
    else: 
     Num=1 
     for i in range(1,N+1): 
      Num*=(i) 
      i+=1 
    return Num 
#pi function 
def pi_value(): 
    pivalue=3.141592653589793 
    return pivalue 
def sine(X): 
    k=0 
    sine=0 
    term=((-1)**k*X**(2*k+1))/fac(2*k+1) 
    while abs(sine)<1*10**(-8): 
     sine+=term 
     k+=1 
     term=((-1)**k*X**(2*k+1))/fac(2*k+1) 
    return sine 
main() 

Я работаю над этим расширением силовой линии силовой функции на python. По некоторым причинам этот код не работает. Я бы очень признателен, если кто-то может дать мне несколько указателей. Спасибо (p.s. Я не должен использовать какие-либо функции math lib)power series function of sine in python

Это то, что я получаю в качестве выхода, когда я вводим угол M = 30 градусов.

M: 30 
0.5235987755982988 

, когда я должен получить что-то около .5

M: 60 
1.0471975511965976 

и угол 60 градусов, выход совершенно неправильно.

+0

Вне темы: вы можете использовать 'math.pi' вместо функции, которая возвращает неточное значение :-) EDIT: хорошо, не видел последней круглой скобки. Но хорошо, это значение не реальная функция ...: - ' –

+1

Вы должны опубликовать то, что ожидаете, и то, что вы получаете – philshem

ответ

1

Вот ваша проблема:

while abs(sine)<1*10**(-8): 

Как только sine достигает значения выше 1e-8 вы выйти из цикла. Вы используете неправильное условие завершения.

Гораздо лучше условие завершения цикла является

while abs(term)>1e-8 

одно замечание: Вы должны добавить последний пропущенный срок для sine до возвращения его.

+0

Это требование. Я должен найти значение синуса до тех пор, пока значение термина не станет меньше 1.0e-8. –

+2

Вы проверяете 'sine', а не' term'! – jonrsharpe

+0

Большое спасибо. Кажется, я ошибся. Вы, ребята, потрясающие. –