Skip to main content Informatique en prépa - Lycée Malherbe 

6.1- TP - Recherche du zéro

Objectif

Le but de cette activité est d'étudier différents algorithmes permettant de déterminer le zéro d'une fonction. Notre point de départ est donc un intervalle vérifiant et la fonction f continue et monotone sur cet intervalle afin d'avoir l'existence d'un unique zéro.

Pour s’appuyer sur un exemple, on prend la fonction suivante :

-40-2002040-0.0500.050.10.15θ (en degrés)Y(θ) (en m)

avec , , , et .

fonctions mathématiques

Le module math contient des fonctions cos, sin, sqrt que vous pouvez importer. Attention, les fonctions trigonométriques prennent des radiants en argument !

Pour convertir les degrés en radiants, le module math a une fonction radians qui fait la conversion, ou bien une variable pi pour la valeur de pi.

Question 1

Écrire une fonction python Y(theta) qui prend en argument et renvoie un flottant, permettant de calculer la fonction mathématiques définie au-dessus. Faire attention aux unités des angles.

Python

Loading editor...

Question 2

Définir en python la liste vec_theta contenant des valeurs allant de -50° à 50° avec un pas de 0,1.

Python

Loading editor...

Courbes en python

Pour tracer une courbe en python, il faut commencer par importer le module matplotlib.pyplot :

import matplotlib.pyplot as plt

Puis, on peut :

  • déclarer des courbes avec plt.plot(Lx, Ly) où Lx et Ly contiennent les valeurs des abscisses et des ordonnées (en général sous forme de liste).
  • afficher une grille en arrière-plan avec plt.grid(visible=True)
  • afficher toutes les courbes déclarées avec plt.show()
  • remettre à zéro l'affichage avec plt.clf(), ou bien en ré-important la librairie.
Question 3

Affichez, sur une courbe, la valeur de theta et de Y(theta) pour toutes les valeurs de vec_theta. Déterminer graphiquement la valeur de θ pour laquelle la fontion Y est nulle.

Python

Loading editor...

1. Recherche exhaustive

La première solution, est de tester la valeur de notre fonction sur chaque valeur de l'intervalle, et de trouver la plus proche de zéro.

Question 4

Déterminez (à l'aide d'un code python), parmis les valeurs de vec_theta, celle qui est la plus proche d'un zéro de la fonction Y (c'est à dire la valeur theta telle que Y(theta) soit la plus proche de zero).

Combien d'opérations cette recherche a-t-elle demandé ?

Python

Loading editor...

2. Méthode de la dichotomie

On suppose que la fonction s'annule exactement une fois sur notre intervalle.

L'idée est de découper l'intervalle en deux, et de regarder au milieu. En fonction du signe de l'image de la fonction au milieu, on sait si la fonction s'annule à droite ou à gauche de celui-ci.

On répète alors l'opération sur la moitiée choisie, jusqu'à ce qu'on soit suffisemment proche du résultat.

Voici les étapes de la dichotomie sur un exemple, la fonction décroissante sur : à chaque étape, on garde la moitié de l'intervalle (en vert) dans laquelle change de signe.

Dichotomie sur h(x) = cos(x) - x00.511.5-101xh(x)abmilieu
1 / 8

étape 0 : [a, b] = [0.0000, 1.5000], h(milieu) = -0.0183 ≤ 0 : on garde [a, milieu]

Question 5

Écrire une fonction dichotomie(f, a, b, eps) permettant de trouver le zéro de la fonction f (supposée croissante) à eps près sur l’intervalle correct [a, b] par la méthode de dichotomie. La fonction renvoie la liste des couples (an, bn) des valeurs de a et b à chaque étape de l'algorithme.

Inspirez-vous de la fonction de recherche dichotomique vue en cours si besoin ! Le cours est disponible ici.

On demande de s'arrêter lorsque l'intervalle [an, bn] est de longueur inférieur à eps.

Python

Loading editor...

Question 6

Déterminer par dichotomie la valeur de θ pour laquelle la fonction Y est nulle à près. En combien d’itérations la solution est-elle trouvée ?

Visualisation

Le module affichage du site permet d'animer les étapes : animer_dichotomie(Y, dichotomie(Y, -50, 50, 1e-6)), après avoir fait from affichage import animer_dichotomie.

Python

Loading editor...

3. Méthode de Newton

Le principe de la méthode de Newton est de chercher le zéro d’une fonction en prenant comme nouvelle approximation l’abscisse du point d’intersection de la tangente à la fonction au point d’approximation précédente. L’équation générale de la tangente à la fonction au point d'abscisse est :

$$ tangente(x) = f'(x_k)(x-x_k) + f(x_k) $$

On choisit solution de et on obtient la formule de récurrence :

Méthode de Newton sur f(x) = x²/4 - 12345024xf(x)x0x1
1 / 3

la tangente en x0 = 4.5000 coupe l'axe en x1 = 2.6944

Quand cette dérivée n'est pas connue, on peut déterminer une approximation. Ici, on l'approchera par :

Question 7

Écrire une fonction derivee(f,x) permettant d'évaluer la dérivée de la fonction f à l'abscisse x. On pourra utiliser la formule du taux d'accroissement décrit plus haut avec

Python

Loading editor...

Question 8

Écrire une fonction newton(f,x0,eps) permettant de trouver le zéro de la fonction f à eps au voisinage du point x0 par la méthode de newton. La fonction renvoie la liste des éléments de la suite des zéros trouvés par la méthode de Newton.

Python

Loading editor...

Question 9

Déterminer par la méthode de Newton la valeur de θ pour laquelle la fonction Y est nulle à près. En combien d’itérations la solution est-elle trouvée ?

Visualisation

De même, animer_newton(Y, newton(Y, x0, 1e-6)) anime la suite des approximations (après from affichage import animer_newton).

Python

Loading editor...

Si vous avez fini : aidez vos voisins, demandez un exercice au professeur, ou bien lisez cette page, sur une technique "connue" par son apparence "magique", qui repose en fait sur la méthode de newton de manière cachée.


Entrez le code donné en cours pour accéder à la solution :