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

tch*_*tch 0 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;
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

对于x == 1,返回0.

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

ace*_*cer 5

您应该能够通过使用add而不是sum在您的better_cos运营商中获得您想要的东西.

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

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

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

例如,使用5个术语来简洁而不是20个,就像你拥有它一样,

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):
Run Code Online (Sandbox Code Playgroud)

您现在可以根据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
Run Code Online (Sandbox Code Playgroud)

如果您希望让您的过程better_cos采用一对参数,以便术语的数量可变,那么您仍然可以考虑使用add来处理原始问题.例如,

bc := (x,N)->add((-1)^n*x^(2*n)/(2*n)!, n = 0 .. N):
Run Code Online (Sandbox Code Playgroud)

我想这是一个家庭作业,你意识到你也可以使用现有的系统命令taylorseries获得相同的结果,即.

convert(series(cos(x),x=0,10),polynom);

              1  2   1   4    1   6     1    8
          1 - - x  + -- x  - --- x  + ----- x 
              2      24      720      40320   

convert(taylor(cos(x),x=0,10),polynom);

              1  2   1   4    1   6     1    8
          1 - - x  + -- x  - --- x  + ----- x 
              2      24      720      40320   
Run Code Online (Sandbox Code Playgroud)