繁体   English   中英

在 python 中通过其泰勒级数实现 cos(x)

[英]Implementing cos(x) by its Taylor series in python

我必须使用其泰勒级数在 python 中实现余弦 function。 我必须从下面打印它的值以及 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 您需要为每个测试点重置它。 如果您将近似余弦计算作为单独的 function 进行,则可以轻松避免此错误。


通过乘以前一项的商来计算级数的项总是一个更好的主意。 这避免了阶乘的计算及其增长可能产生的所有困难。

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

更准确地说,余弦部分和的误差小于下一项,因为级数是交替的。 |x|<=42*k度项具有近似界,使用斯特林的阶乘公式,

4^(4*k)/(4*k/e)^(4*k) = (e/k)^(4*k) < (3/k)^(4*k)

对于k=6 ,其上限为2^(-24) ~ 10^(-7) 因此,测试值不应该有灾难性的错误。

另请参阅使用 C 计算正弦的麦克劳林级数程序问题以近似正弦和余弦值泰勒级数的正弦计算不起作用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM