Skip to article frontmatterSkip to article content

On se propose d’approximer une fonction par la formule de Taylor

fn(x)=i=0nf(i)(0).xii!f_n(x) = \sum_{i=0}^{n}\frac{f^{(i)}(0).x^i}{i!}

Ç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π,2π][-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)
  1. comparez Y2 avec Y en les dessinant sur la même courbe - devrait ressembler à ceci:

# votre code
  1. regardez la coincidence de Y et Y2

quel est le pourcentage du domaine pour lequel l’approximation est valide à 10-3 près ?

avec cosinus, au degré 0

  1. affichez cos et son approximation au degré 0, qui devrait ressembler à ceci:

# à vous

avec une fonction custom

  1. à vous de compléter cette fonction

def custom(X):
    """
    retourne 2 * sin(X) + cos(X/4)
    """
    ...
  1. calculez Y3 l’image de X par custom
    et Y4 l’image de X par l’approx. de custom d’ordre 14

  1. comparez Y3 et Y4 comme ci-dessus - devrait avoir cette allure

# votre code
  1. sur quel pourcentage du domaine a-t-on coincidence à 10-3 près ?

# votre code