我试图在 Maple 中以编程方式使用泰勒多项式,但以下似乎不起作用......

T[6]:=taylor(sin(x),x=Pi/4,6);convert(T[6], polynom, x);
f:=proc(x)
  convert(T[6], polynom, x);
end proc;
f(1);

以下所有内容也不起作用:

  • f:=convert(T[6], polynom);
  • f:=convert(T[6], polynom, x);
  • f:=x->convert(T[6], polynom);
  • f:=x->convert(T[6], polynom, x);.

有没有一种方法可以做到这一点,而无需将转换的输出复制并粘贴到定义中 f?

有帮助吗?

解决方案

将 T 定义为函数也可能是很自然的。

T:=y->subs(x=y,convert(taylor(sin(x),x=Pi/4,6),polynom));

T(1);

其他提示

如果我理解正确的话,这可以实现你想要的:

f := proc(z)
    local p :: polynom;
    p := convert(T[6], polynom); 
    return subs(x = z, p)
end proc

涉及过程和子程序的几个早期答案将为每个输入进行整个泰勒级数推导,以及转换为多项式。这是非常低效的。

您只需要生成泰勒结果并转换为多项式一次。有了这个结果,您就可以创建一个运算符(用它可以对任意数量的输入进行操作,只需评估该点处的多项式即可,但是 没有 必须重新计算整个泰勒答案)。

下面是创建过程 f 的方法,用该过程 f 在任何给定点对参数 x 进行求值。它计算(截断的)泰勒级数并转换为多项式 一次.

> f:=unapply(convert(taylor(sin(x),x=Pi/4,6),polynom),x):
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top