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

3

我对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
它的行为与你预期的有何不同,具体来说是什么? - Oliver Charlesworth
我原本期望它返回一个接近于math.sin(x)的答案。我感觉问题出在代码中的for i in range(n):这一部分。 - user2141367
好的,那么你应该选择一个简单的示例输入,修改你的代码以打印出所有中间结果,并将它们与手动计算进行比较。 - Oliver Charlesworth
2个回答

5

sin(x)的泰勒级数为:

Taylor series for sin(x)

将您的代码与该定义进行比较,这两个部分存在一些错误:

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

负号应该变成正号,阶乘中的指数应该变成乘法。

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

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接