Taylor (2/3): convergence#
On se propose d’approximer une fonction par la formule de Taylor
Ça semble être le bon moment d’utiliser autograd
# si nécessaire
# %pip install autograd
import autograd.numpy as np
# et on aura besoin aussi de
from math import factorial
%matplotlib ipympl
import matplotlib.pyplot as plt
exo v1#
écrivez une fonction#
def taylor1(X, derivatives):
"""
X le domaine (sous-entendu, X[0]<0 et X[-1]>0)
derivatives: une liste ou un tableau contenant les dérivées successives de f en 0
i.e. derivatives[n] = f(n)(0) la dérivée n-ième de f en 0
retourne un tableau Y qui est l'approximation de Taylor sur ce domaine pour une fonction
qui aurait ces dérivées-là
"""
# à vous
...
testez la#
avec sinus
# les valeurs de sin et de ses dérivées successives en 0
# pour l'instant on les passe en dur
# (dans la partie suivante on les calculera)
sinus10 = [0, 1, 0, -1, 0, 1, 0, -1, 0, 1]
écrivez le code qui plotte le résultat de taylor1 sur le domaine X = \([-2\pi, 2\pi]\) - devrait ressembler à ceci:
X = np.linspace(-2*np.pi, 2*np.pi)
# votre code
exo v2#
une fois que la logique d’accumulation est acquise, on va calculer les dérivées successives de la fonction
# en utilisant l'outil qu'on a vu dans la première partie
from autograd import grad
écrivez une fonction#
def taylor2(X, f, n):
"""
X: le domaine
f: la fonction
n: le degré
retourne un tableau Y qui est l'approximation de Taylor sur ce domaine pour cette fonction à ce degré
"""
testons la v2#
avec sinus au degré 10#
# Y est le sinus de X
# Y2 est l'image de X par l'approximation de Taylor pour sinus au degré 10
Y = np.sin(X)
Y2 = taylor2(X, np.sin, 10)
comparez Y2 avec Y en les dessinant sur la même courbe - devrait ressembler à ceci:
# votre code
regardez la coincidence de Y et Y2
quel est le pourcentage du domaine pour lequel l’approximation est valide à \(10^{-3}\) près ?
rappel
on rappelle que == n’est pas le bon outil pour comparer les flottants
avec cosinus, au degré 0#
affichez cos et son approximation au degré 0, qui devrait ressembler à ceci:
# à vous
avec une fonction custom#
à vous de compléter cette fonction
def custom(X):
"""
retourne 2 * sin(X) + cos(X/4)
"""
...
calculez Y3 l’image de X par custom
et Y4 l’image de X par l’approx. de custom d’ordre 14
comparez Y3 et Y4 comme ci-dessus - devrait avoir cette allure
# votre code
sur quel pourcentage du domaine a-t-on coincidence à \(10^{-3}\) près ?
# votre code