Math 余弦的泰勒级数返回0的错误结果
我想用Maple-Taylor级数写余弦函数。这是我的密码:Math 余弦的泰勒级数返回0的错误结果,math,trigonometry,maple,Math,Trigonometry,Maple,我想用Maple-Taylor级数写余弦函数。这是我的密码: better_cos := proc (x) options operator, arrow; sum((-1)^n*x^(2*n)/factorial(2*n), n = 0 .. 20) end proc; 更好的cos(0)返回0而不是1(cos(0)=1)。这可能是因为x^(2*n)总是返回0而不是1。例如: fun_sum := proc (x) options operator, arrow; sum(x^(2*n),
better_cos := proc (x) options operator, arrow; sum((-1)^n*x^(2*n)/factorial(2*n), n = 0 .. 20) end proc;
更好的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的泰勒级数吗?以下是泰勒级数的定义: 不要以零开始循环;用1初始化,从2开始
阶乘也是低效的 您应该能够通过在
better\u cos
操作符中使用add
而不是sum
来获得所需内容
使用add
通常更适合于对数字序列中的有限个项进行相加,还请注意add
具有Maple所谓的特殊求值规则
如果您打算取固定数量的项之和(即n从0到20),则不应编写为每个输入参数(即为x
的每个值)计算阶乘的过程。相反,只生成一次被截断的序列,然后使用unapply
生成运算符。这种方法也恰好处理了您原来的问题,因为使用了符号x
,所以x^0术语变成了1
您还可以重新排列多项式(截断级数),使其为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):
现在,您可以使用符号或数字参数,根据需要应用过程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
如果你喜欢你的过程<代码> BeTyTy-COS取一对参数,这样术语的数量是可变的,那么你仍然可以考虑使用<代码> Addio>代码来处理你原来的问题。例如
bc := (x,N)->add((-1)^n*x^(2*n)/(2*n)!, n = 0 .. N):
我假设这是一个家庭作业,并且您意识到您也可以使用现有的系统命令taylor
或series
来获得相同的结果,即
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
哦,这太错了。0^0应该是未定义的。他们在学校也教了我同样的内容,但维基百科说的是另外一个:;)