在Python中使用泰勒级数近似正弦函数的帮助

3 投票
2 回答
11700 浏览
提问于 2025-04-17 18:10

我刚开始学习Python,正在尝试用这个公式来近似计算正弦函数。

我的代码是这样的:

import math
def sin(x,n):
sine = 0
for i in range(n):
    sign = (-1)**i
    sine = sine + ((x**(2.0*i-1))/factorial(2**i-1))*sign
return sine

但是这个代码没有给我想要的结果,我感到很困惑,找不到错误在哪里……或者说我可能根本就走错了方向(如我所说,我对Python和编程都很陌生)。

这让我想起之前我写过一个程序,用这个公式来近似计算π:

def piApprox(n):
pi = 0
for i in range(n):
    sign = (-1)**i
    pi = pi + 1.0/(2*i+1)*sign
return 4*pi

我不知道这是否有什么帮助,但我试图用它来理解我的正弦计算方法。任何修正这个问题的建议或者指引我正确方向的帮助都会非常感激!

2 个回答

2

你可以使用一个叫做SymPy的符号库来通过泰勒级数构建你的近似函数:

from sympy import sin
from sympy.abc import x

# creates a generator
taylor_series = sin(x).series(n=None)

# takes the number of terms desired for your generator
taylor_series = sum([next(taylor_series) for i in range(num_of_terms)])

# creates a function that calculates the approximated sine function
mysin = sympy.lambdify((x,), taylor_series)
5

正弦函数 sin(x) 的泰勒级数是:

sin(x) 的泰勒级数

把你的代码和这个定义对比一下,发现这两个部分有一些错误:

x**(2.0*i-1)
factorial(2**i-1)

这里的减号应该改成加号,而阶乘中的指数应该是乘法。

x**(2.0*i+1)
factorial(2*i+1)

撰写回答