Utilizzando, in R, il file taylor e/o
impiegando WolframAlpha individua
i polinomi di Taylor (almento fino al grado 5) delle seguenti funzioni intorno al punto indicato. Prova a controllare (solo per i primi gradi) l'esito "a mano".
f1: x → √x attorno ad 1; f2: x → sin(x) attorno a 0;
f3: x → 1/(1−x) attorno ad 0; f4: x → atan(x) attorno a 0;
f5: x → log(x) attorno ad e; f6: x → sin(x)² attorno a 0;
f7: x → exp(3x) attorno a -1; f8: x → 1/(1+2x²) attorno a 0.
Nota: WolframALpha dà un'indicazione di dove converge una serie, ma spesso, se la serie converge in un intervallo,
ne esclude gli estremi. Ad esempio nel fornire la serie che converge a
f1 <- function(x) sqrt(x) taylor(f1, 1, 0,2, 0,1.5) # 1 0.5 -0.25/2 0.375/6 -0.9375/24 3.28125/120 -14.76562/720 81.21094/5040 # -527.8711/40320 3959.033/362880 -33651.78/3628800 ## I coefficienti in forma frazionaria (il punto inziale è 1): A <- 1 fractions( c(F0(A)/factorial(0),F1(A)/factorial(1),F2(A)/factorial(2),F3(A)/factorial(3) ) ) # 1 1/2 -1/8 1/16 fractions( c(F4(A)/factorial(4),F5(A)/factorial(5),F6(A)/factorial(6),F7(A)/factorial(7) ) ) # -5/128 7/256 -21/1024 33/2048 fractions( c(F8(A)/factorial(8),F9(A)/factorial(9),F10(A)/factorial(10) ) ) # -395/30171 715/65536 -2431/262144 ## Se mi interassano le derivate successive di f1 F1x # 0.5 * x^-0.5 F2x # 0.5 * (-0.5 * x^-1.5) F3x # 0.5 * (-0.5 * (-1.5 * x^-2.5)) F4x # 0.5 * (-0.5 * (-1.5 * (-2.5 * x^-3.5)))
series sqrt(x) at 1
A mano: f1'(x) = 1/2·x−1/2, f1''(x) = −1/4·x−3/2, f1'''(x) = 3/8·x−5/2,
f2 <- function(x) sin(x); taylor(f2, 0, -2*pi,2*pi, -2,2) # 0 1 0 -1/6 0 1/120 0 -1/5040 0 1/362880 0
series sin(x) at 0
f3 <- function(x) 1/(1-x); taylor(f3, 0, -1,1, 0,3) A <- 0 fractions( c(F0(A)/factorial(0),F1(A)/factorial(1),F2(A)/factorial(2),F3(A)/factorial(3) ) ) # 1 1 1 1
series 1/(1-x) at 0
converges when |x|<1
Questa è la cosiddetta serie geometrica, di cui abbiamo già visto vari esempi (per x = 1/10 e x = 1/2: vedi)
f4 <- function(x) atan(x); taylor(f4, 0, -1,1, -1,1) A <- 0 fractions( c(F0(A)/factorial(0),F1(A)/factorial(1),F2(A)/factorial(2),F3(A)/factorial(3) ) ) # 0 1 0 -1/3 fractions( c(F4(A)/factorial(4),F5(A)/factorial(5),F6(A)/factorial(6),F7(A)/factorial(7) ) ) # 0 1/5 0 -1/7 fractions( c(F8(A)/factorial(8),F9(A)/factorial(9),F10(A)/factorial(10) ) ) # 0 1/9 0
series atan(x) at 0
for |x|<1 [vedi nota iniziale]
f5 <- function(x) log(x); taylor(f5, exp(1), 0,5, -3,2)
series log(x) at exp(1)
converges when |1−x/e|<1 [cioè 0 < x < 2e, ma converge anche per x = 2e; vedi nota iniziale]
f6 <- function(x) sin(x)^2; taylor(f6, 0, -pi,pi, 0,1.5) # 0 0 2/2 0/6 -8/24 0/120 32/720 0/5040 -128/40320 0/362880 512/3628800 A <- 0 fractions( c(F0(A)/factorial(0),F1(A)/factorial(1),F2(A)/factorial(2),F3(A)/factorial(3) ) ) # 0 0 1 0 fractions( c(F4(A)/factorial(4),F5(A)/factorial(5),F6(A)/factorial(6),F7(A)/factorial(7) ) ) # -1/3 0 2/45 0 fractions( c(F8(A)/factorial(8),F9(A)/factorial(9),F10(A)/factorial(10) ) ) # -1/315 0 0
Capisco che l'ultimo 0 è errato: il dato era 512/3628800. Il comando fractions opera correttamente solo con numeri maggiori di 1/2000. Volendo potrei semplificare la frazione scomponendone i termini:
n <- 512 m <- NULL; k<-2; while(k<=n) if (n/k==floor(n/k)) {m <- c(m,k); n<-n/k} else k<-k+1; m # 2 2 2 2 2 2 2 2 2 n <- 3628800 m <- NULL; k<-2; while(k<=n) if (n/k==floor(n/k)) {m <- c(m,k); n<-n/k} else k<-k+1; m # 2 2 2 2 2 2 2 2 3 3 3 3 5 5 7 2; 3*3*3*3*5*5*7 # 2 14175 Ho: 2/14175
series sin(x)^2 at 0
f7 <- function(x) exp(3*x); taylor(f7, -1, -3,1, -0.5,1)
series exp(3*x) at -1
f8 <- function(x) 1/(1+2*x^2); taylor(f8, 0, -1,1, 0,1.5) 1 0 -4/2 0/6 96/24 0/120 -5760/720 0/5040 645120/40320 0/362880 -116121600/3628800 fractions( c(F0(A)/factorial(0),F1(A)/factorial(1),F2(A)/factorial(2),F3(A)/factorial(3) ) ) # 1 0 -2 0 fractions( c(F4(A)/factorial(4),F5(A)/factorial(5),F6(A)/factorial(6),F7(A)/factorial(7) ) ) # 4 0 -8 0 fractions( c(F8(A)/factorial(8),F9(A)/factorial(9),F10(A)/factorial(10) ) ) # 16 0 -32
series 1/(1+2*x^2) at 0
Per riferimenti, vedi qui. Per ulteriori approfondimenti vedi qui.