我如何用一个方程来做一个无穷级数?

2024-04-19 21:08:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个名为cos_series的函数,它使用值xnterms给出一个级数的和,使用这个方程1-x^2/2!+x^4/4!-x^6/6!+

这是我到目前为止的代码

def cos_series(x,nterms):
    lst = []
    lst2 = []
    for i in range(nterms):
        lst+=[x**(2*i)/(math.factorial(i*2))]
    for i in range(nterms):
        lst2+=[(x**(2*i)/(math.factorial(i*2)))*-1]
    return sum(lst2[1::2] + lst[::2])

cos_series(math.pi/3,3)

返回值应该等于0.501796,但我很难达到它,有人能帮忙吗


Tags: 函数代码infordefrangemathcos
2条回答

您的代码似乎工作正常

您的逻辑只适用于:

def cos_series(x, n):
    return sum((-1 if (i % 2) else 1) * x**(i*2) / math.factorial(i*2) for i in range(n))

一次生成序列的和,避免计算不使用的值

(请注意,在您更改问题后,您的代码实际上返回0.501796201500181-这是您期望的值;没有问题?)

您不需要使用math.factorial(),也不需要将术语存储在列表中。你只需要在做的时候建立分子和分母,然后把它们加起来

通过迭代生成分子和分母,您的逻辑将更易于管理和调试:

def cos(x,nTerms=10):
    result      = 0
    numerator   = 1
    denominator = 1
    for even in range(2,nTerms*2+1,2):          # nTerms even numbers
        result      += numerator / denominator  # sum of terms            
        numerator   *= -x*x                     # +/- for even powers of x
        denominator *= even * (even-1)          # factorial of even numbers
    return result

print(cos(3.141592653589793/3,3)) # 0.501796201500181

相关问题 更多 >