cos 的级数扩展 Python

Series Expansion of cos with Python

所以,我试图找到 cos(x) 的值,其中 x=1.2。我觉得我写的脚本应该没问题,但是我得到的值不正确。那是; cos(1.2)=0.6988057880877979,就 25 而言,我应该什么时候出去:cos(1.2)=0.36235775

我创建了一个类似的程序来计算 sin(1.2),效果很好。

正在计算 sin(1.2):

import math as m

x=1.2
k=1
N=25
s=x
sign=1.0

while k<N:
    sign=-sign
    k=k+2
    term=sign*x**k/m.factorial(k)
    s=s+term

print('sin(%g) = %g (approximation with %d terms)' % (x,s,N))

现在正在计算 cos(1.2):

import math as m

x=1.2
k=1
N=25
s=x
sign=1.0

while k<N:
    sign=-sign
    k=k+1
    term=sign*x**k/m.factorial(k)
    s=s+term

print(s)

您不应该将您的初始总和设置为 1.2,并且您的扩展表示

有点偏离 - 我们需要考虑函数的 even-ness,因此将 k 增加 2。此外,在不修改程序结构的情况下,您必须设置初始变量,以便在第一个循环开始时将它们正确地设置为初始值。 Re-ordering你的循环控制流程有点,我们有

import math as m

x=1.2
k=0
N=25
s=0
sign=1.0

while k<N: 
    term=sign*x**(k)/m.factorial(k)
    s=s+term
    k += 2
    sign = -sign

print(s)

给予

0.3623577544766735

我认为您对余弦使用了错误的系列,correct formula 应该是(我强调了与 ^ 的重要区别):

sum_over_n [(-1)**n * x ** (2 * n) / (math.factorial(2 * n))]
#                           ^^^^                     ^^^^

这意味着添加 n-terms 你有这样的东西:

def cosine_by_series(x, terms):
    cos = 0
    for n in range(terms):
        cos += ((-1)**n) * (x ** (2*n)) / (math.factorial(2 * n))
    return cos
    # or simply:
    # return sum(((-1)**n) * (x ** (2*n)) / (math.factorial(2 * n)) for n in range(terms)

给出:

>>> cosine_by_series(1.2, 30)
0.3623577544766735