Pergunta

Eu estou tentando usar um polinômio Taylor programaticamente em Maple, mas o seguinte não parece trabalho ...

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);

Todo o seguindo também não trabalho:

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

Existe uma maneira de fazer isso sem copiar e colar a saída do converso na definição de f?

Foi útil?

Solução

Também pode ser natural definir T como uma função.

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

T(1);

Outras dicas

Se eu entendi bem, este realiza o que você quer:

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

Várias respostas anteriores envolvendo procedimentos e subs vai fazer toda a derivação série de Taylor, bem como a conversão para polynom, para cada entrada. Isso é altamente ineficiente.

Você só precisa produzir o resultado Taylor, e convertido ao polynom, uma vez. Com esse resultado em mãos, você pode criar um operador (com o qual a agir em tantas entradas como você deseja, apenas através da avaliação do polinômio no ponto, mas sem ter que recalcular toda a resposta taylor).

Abaixo está uma maneira de criar um procedimento f com que avaliar em qualquer ponto para o argumento x. Ele calcula o (truncado) série de Taylor e convertidos para polynom apenas uma vez .

> f:=unapply(convert(taylor(sin(x),x=Pi/4,6),polynom),x):
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top