(* Ricordarsi di posizionare il cursore su una riga di comandi, cliccare una volta e poi premere insieme i tasti di “maiuscolo”(Shift) ed “invio”(Return) *)

Plot[Sin[x],{x,-Pi,Pi}]

(* I polinomi di grado minore di 4 che approssimano al meglio la funzione Sin[x] nell’intorno di (Subscript[x, 0])=0 sono 0, x,  x-1/6x^3 : riportiamoli sulla stessa immagine*)

Plot[{0,x,x-1/6x^3,Sin[x]},{x,-Pi,Pi}]

(* rappresentano i polinomi di Taylor di grado 0, 1, 2 e 3 *)

(* Calcoliamo i polinomi di Taylor di grado n per una funzione f derivabile n volte nell'intorno di un punto (Subscript[x, 0])    
                                   (Subscript[P, n])[x]≃ f[x0]+(∑_(k=1)^n)(((f^((k)))(x0))/(k!))(((x-x0))^k)
dove (f^((k)))(x0) rappresenta la derivata k-esima di f(x) calcolata nel punto (Subscript[x, 0])  *)

(* Troviamo prima la derivata della funzione Sin[x] *)

D[Sin[x],x]

(* poi calcoliamola per x uguale a 0 *)

D[Sin[x],{x,5}]/.x->0

(* ed usiamo il comando Factorial per calcolare 3! cioè il fattoriale di 3 *)

?Factorial

Factorial[3]

(* Possiamo quindi calcolare il polinomio di Taylor di grado 5 della funzione Sin[x] nell’intorno di x=0 *)

x-1/6x^3+(D[Sin[x],{x,5}]/.x->0)/Factorial[5]*x^5

(* proviamo a disegnarlo dopo aver copiato il risultato (basta selezionare l’output e copiarlo) *)

Plot[x-((x^3)/6)+((x^5)/120),{x,-Pi,Pi}]

(* disegnamolo insieme alla funzione che dovrebbe approssimare *)

Plot[{x-((x^3)/6)+((x^5)/120),Sin[x]},{x,-Pi,Pi}]

(* infine disegnamolo insieme ai polinomi di Taylor fino all’ordine 5 *)

Plot[{0,x,x-1/6x^3,x-((x^3)/6)+((x^5)/120),Sin[x]},{x,-Pi,Pi}]

(* o fino all’ordine 7 direttamente, in questo caso la funzione deve essere elaborata prima di essere graficata, mediante il comando Evaluate*)

Plot[Evaluate[{0,x,x-1/6x^3,x-((x^3)/6)+((x^5)/120),x-1/6x^3+((x^5)/120)+(D[Sin[x],{x,7}]/.x->0)/Factorial[7]*x^7,Sin[x]}],{x,-2Pi,2Pi}]

(* Utilizzando anche il comando Sum per il calcolo della sommatoria di più numeri dipendenti da un parametro k *)

Sum[k,{k,1,5}]

(* è possibile infine scrivere un comando nuovo che calcoli i polinomi di Taylor avendo come input la funzione f, il punto  x0 e l’ordine n *)

taylor[f_,x0_,n_][x_]:=f[x0]+Sum[(D[f[x],{x,k}]/.x->x0)/Factorial[k]*(x-x0)^k,{k,1,n}]

(* ecco un esempio per Sin[x], x0=0 ed n=3  *)

Plot[{Sin[x],Evaluate[taylor[Sin,0,3][x]]},{x,-2Pi,2Pi}]

(* usando il comando Table  per creare una lista *)

Table[k^2,{k,1,10}]

(* o una lista di coppie di numeri, magari con un passo diverso da 1 *)

Table[{k,k^2},{k,1,10,3}]

(* possiamo graficare la funzione ed un dato numero di polinomi approssimanti  *)

Plot[{Sin[x],Evaluate[Table[taylor[Sin,0,k][x],{k,1,5,2}]]},{x,-2Pi,2Pi}]

(* e migliorare l’aspetto del grafico utilizzando alcune delle opzioni del comando Plot   *)

Plot[{Sin[x],Evaluate[Table[taylor[Sin,0,k][x],{k,1,5,2}]]},{x,-2Pi,2Pi},PlotLegends->"Expressions",AspectRatio->Automatic,PlotRange->{-2,2},ImageSize->800]

(* cambiando solo il nome della funzione (in tutta la linea di comandi) otteniamo un analogo risultato per Cos[x]  *)

Plot[{Cos[x],Evaluate[Table[taylor[Cos,0,k][x],{k,1,5,2}]]},{x,-2Pi,2Pi},PlotLegends->"Expressions",AspectRatio->Automatic,PlotRange->{-2,2},ImageSize->800]

(* oppure la funzione esponenziale  Exp[x], avendo cura di cambiare anche l’intervallo della x *)

Plot[{Exp[x],Evaluate[Table[taylor[Exp,0,k][x],{k,1,3,1}]]},{x,-4,2},PlotLegends->"Expressions",AspectRatio->Automatic,PlotRange->{-1,3},ImageSize->600]

(* L’uso del comando Manipulate permette di modificare con il cursore i grafici così ottenuti al variare dei parametri del problema *)

Manipulate[Plot[Evaluate[{Cos[x],poltaylor[Cos,x0,n]}],{x,-4Pi,4Pi},Epilog->Point[{x0,Cos[x0]}],ImageSize->600,PlotLabel->{x0,n},PlotRange->{{-4Pi,4Pi},{-5,5}}],{{n,1},0,100,1},{{x0,0},-4Pi,4Pi}]