Использование полиномов Тейлора программно в Maple - PullRequest
0 голосов
/ 01 декабря 2009

Я пытаюсь использовать полином Тейлора программно в 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?

Ответы [ 3 ]

2 голосов
/ 12 мая 2010

Несколько более ранних ответов, включающих процедуры и подпрограммы, сделают весь вывод ряда Тейлора, а также преобразование в полином для каждого входа. Это крайне неэффективно.

Вам нужно только получить результат Тейлора и преобразовать в полином один раз. Имея этот результат в руках, вы можете затем создать оператор (с помощью которого можно воздействовать на любое количество входов, просто оценивая полином в точке, но без необходимости пересчитывать весь ответ Тейлора). 1005 *

Ниже приведен способ создания процедуры f, с помощью которой можно оценить в любой заданной точке аргумент x. Он вычисляет (усеченный) ряд Тейлора и преобразует в полином только один раз .

> f:=unapply(convert(taylor(sin(x),x=Pi/4,6),polynom),x):
2 голосов
/ 02 декабря 2009

Если я вас правильно понял, это выполнит то, что вы хотите:

f := proc(z)
    local p :: polynom;
    p := convert(T[6], polynom); 
    return subs(x = z, p)
end proc
1 голос
/ 02 декабря 2009

Также может быть естественно определить T как функцию.

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

T(1);
...