蜡笔小新cos系列:用Python扩展cos系列

所以,我试图找到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)
3

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

enter image description here

有点不对劲-我们需要考虑函数的偶然性,因此将k递增 2。此外,在不修改程序结构的情况下,您必须设置初始变量,以便在第一个循环开始时将它们正确地放入其起始值。重新排序您的循环控制流,我们有

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)

Gives

0.3623577544766735
2

我认为您使用的余弦系列错误,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

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(812)
Python怎么写函数:我怎么能自己写一个幂函数 (1/2 to the 6th power as a fraction)
上一篇
Free dur:Cfree():指针无效(free invalid pointer)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(28条)