Domanda

Sto cercando di usare un polinomio di Taylor di programmazione in Acero, ma il seguente non sembra funzionare ...

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

Tutto seguito anche non funzionano:

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

C'è un modo di fare questo senza copiare e incollare l'output della conversione nella definizione di f?

È stato utile?

Soluzione

Potrebbe anche essere naturale definire T come funzione.

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

T(1);

Altri suggerimenti

Se ho capito bene, questo compie ciò che si vuole:

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

Diverse risposte precedenti che coinvolgono procedure e subs farà l'intera derivazione serie di Taylor, così come la conversione in polinomio, per ogni ingresso. Questo è altamente inefficiente.

Hai solo bisogno di produrre il risultato di Taylor, e convertire in polinomio, una volta. Con questo risultato in mano è possibile quindi creare un operatore (con cui ad agire per il maggior numero di ingressi come si desidera, semplicemente valutando il polinomio nel punto ma senza di dover ricalcolare l'intera risposta Taylor).

Di seguito è un modo per creare una procedura f con cui valutare in qualsiasi punto per l'argomento x. Si calcola la (troncato) serie di Taylor e converte polinomio solo una .

> f:=unapply(convert(taylor(sin(x),x=Pi/4,6),polynom),x):
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top