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和一般的编程)。

给定这个系列,它似乎类似于我前段时间编写的近似 pi 的程序:

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

我不知道这是否有用,但这是我试图用它来找出我的正弦方法。任何解决此问题或为我指明正确方向的帮助将不胜感激!

4

2 回答 2

5

sin( x )的泰勒级数为:

sin(x) 的泰勒级数

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

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

减号应该是加号,阶乘中的指数应该是乘法。

x**(2.0*i+1)
factorial(2*i+1)
于 2013-03-06T19:27:14.027 回答
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)
于 2013-09-25T11:58:27.410 回答