在Python中使用泰勒级数近似正弦函数的帮助
我刚开始学习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) 的泰勒级数是:
把你的代码和这个定义对比一下,发现这两个部分有一些错误:
x**(2.0*i-1)
factorial(2**i-1)
这里的减号应该改成加号,而阶乘中的指数应该是乘法。
x**(2.0*i+1)
factorial(2*i+1)