Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python中的Taylor级数实现cos(x)_Python_Numerical Methods_Taylor Series - Fatal编程技术网

用python中的Taylor级数实现cos(x)

用python中的Taylor级数实现cos(x),python,numerical-methods,taylor-series,Python,Numerical Methods,Taylor Series,我必须用python中的泰勒级数实现余弦函数。我必须从下面打印它的值以及listt中所有值的绝对和相对误差。以下是我尝试过的: import math def expression(x, k): return (-1)**k/(math.factorial(2*k))*(x**(2*k)) pi=math.pi listt=[0, pi/6, pi/4, pi/3, pi/2, (2*pi)/3, (3*pi)/4, (5*pi)/6, pi] sum=0 for x in listt:

我必须用python中的泰勒级数实现余弦函数。我必须从下面打印它的值以及listt中所有值的绝对和相对误差。以下是我尝试过的:

import math

def expression(x, k):
   return (-1)**k/(math.factorial(2*k))*(x**(2*k))
pi=math.pi
listt=[0, pi/6, pi/4, pi/3, pi/2, (2*pi)/3, (3*pi)/4, (5*pi)/6, pi]
sum=0
for x in listt:
   k=0
   relative_error=1
   while relative_error>10**(-15):
       sum+=expression(x, k)
       absolute_error=abs(math.cos(x)-sum)
       relative_error=absolute_error/abs(math.cos(x))
       k+=1
    print("%.20f"%x, '\t', "%.20f"%sum, '\t', "%.20f"%math.cos(x), '\t', "%.20f"%absolute_error, '\t', "%.20f"%relative_error )
然而,这产生了一个巨大的错误。原因可能是我做了所有的减法运算。然而,我不知道如何避免它们。当计算负x的e^x时,我遇到了同样的问题,但是如果x是负的,我只计算了e^(-x),然后我可以写e^x=1/e^(-x)。这里有类似的技巧吗?

另外,请注意我的while是无限的,因为相对误差总是很大。

致命错误:您在测试点的循环外设置了
sum=0
。您需要为每个测试点重置它。如果将近似余弦计算作为单独的函数,则可以轻松避免此错误


用商乘以前一项,计算级数的项总是一个更好的主意。这避免了阶乘的计算和它的增长可能产生的所有困难

也就是说,项的增长与指数序列的增长相同,因此最大项是
2*k
约为
|x
。对于给定的点,不应过大


更精确一点,余弦部分和的误差小于下一项,因为序列是交替的。致命错误的度数
2*k
|x |的术语:您在测试点的循环外设置
sum=0
。您需要为每个测试点重置它。如果将近似余弦计算作为单独的函数,则可以轻松避免此错误


用商乘以前一项,计算级数的项总是一个更好的主意。这避免了阶乘的计算和它的增长可能产生的所有困难

也就是说,项的增长与指数序列的增长相同,因此最大项是
2*k
约为
|x
。对于给定的点,不应过大


更精确一点,余弦部分和的误差小于下一项,因为序列是交替的。度的术语
2*k
表示
|x |您没有指定您得到的错误。你能编辑你的帖子并添加回溯吗?@AwesomeCronk By hugh error我指的是一个巨大的计算错误,即我的函数和math.cos(x)之间存在一个巨大的错误。除了Bug之外,使用相对错误可能不是最好的主意,因为余弦经过0,使相对错误在此邻域内爆炸。@YvesDaoust是的,当x=pi/2时,代码就发疯了。我求助于设置迭代次数(大约100次)并使用for循环。我找不到更好的方法。观察错误的大小作为迭代次数的函数会更明智(100是完全多余的)。您不需要指定您得到的错误。你能编辑你的帖子并添加回溯吗?@AwesomeCronk By hugh error我指的是一个巨大的计算错误,即我的函数和math.cos(x)之间存在一个巨大的错误。除了Bug之外,使用相对错误可能不是最好的主意,因为余弦经过0,使相对错误在此邻域内爆炸。@YvesDaoust是的,当x=pi/2时,代码就发疯了。我求助于设置迭代次数(大约100次)并使用for循环。我找不到更好的方法。观察错误的大小作为迭代次数的函数会更明智(100完全是多余的)。