cosinus的泰勒级数返回0的错误结果

时间:2013-10-27 22:28:13

标签: math trigonometry maple

我想写一下Maple Taylor系列中的cosinus函数。这是我的代码:

better_cos := proc (x) options operator, arrow; sum((-1)^n*x^(2*n)/factorial(2*n), n = 0 .. 20) end proc;

better_cos(0)返回0而不是1(cos(0)== 1)。这可能是因为x ^(2 * n)总是返回0而不是1.例如:

fun_sum := proc (x) options operator, arrow; sum(x^(2*n), n = 0 .. 0) end proc

x == 1返回0。

这很奇怪,因为0 ^ 0返回1.你有什么想法我怎样才能正确实现cosinus的泰勒系列?

2 个答案:

答案 0 :(得分:5)

您应该能够在add运算符中使用sum代替better_cos来获得所需内容。

使用add通常更适合于添加数字序列的有限数量的项,并且还注意add具有Maple所谓的特殊评估规则。

如果你打算取一个固定数量的项的总和(即n从0到20)那么你就不应该编写一个程序来计算每个输入参数的阶乘(即。{{1}的每个值}})。相反,只生成一次截断系列,然后使用x生成一个运算符。这种方法也恰好处理了您的原始问题,因为x ^ 0项变为unapply,因为使用了符号1

您还可以重新排列多项式(截断系列),使其处于Horner形式,以便在随后在x的各种数值处进行评估时尝试最小化算术步骤。

例如,使用5个术语表示简洁而不是20个,

x

您现在可以根据需要应用过程convert(add((-1)^n*x^(2*n)/factorial(2*n), n = 0 .. 5),horner); / 1 /1 / 1 / 1 1 2\ 2\ 2\ 2\ 2 1 + |- - + |-- + |- --- + |----- - ------- x | x | x | x | x \ 2 \24 \ 720 \40320 3628800 / / / / bc := unapply(%,x): ,使用符号或数字参数。

bc

如果您希望让您的过程expand(bc(x)); 1 2 1 4 1 6 1 8 1 10 1 - - x + -- x - --- x + ----- x - ------- x 2 24 720 40320 3628800 bc(0); 1 bc(1.2); 0.3623577360 采用一对参数,以便术语数量可变,那么您仍然可以考虑使用better_cos来处理原始问题。例如,

add

我认为这是一项家庭作业,你意识到你也可以使用现有的系统命令bc := (x,N)->add((-1)^n*x^(2*n)/(2*n)!, n = 0 .. N): taylor来获得相同的结果,即

series

答案 1 :(得分:2)

以下是泰勒系列的定义:

enter image description here

不要以零开始循环;用一个初始化,从两个开始。

因素也是低效的。