Maître de Conférences en Informatique à l'Université d'Angers
Ce site est en cours de reconstruction certains liens peuvent ne pas fonctionner ou certaines images peuvent ne pas s'afficher.
Cette page fait partie du cours de polytech PeiP1 et 2 Bio
Dans ce TP on cherche une valeur pour laquelle une fonction réelle d'une variable s'annule.
Soit $f(x)$ de $ℝ$ dans $ℝ$, on cherche $x_0$ tel que $f(x_0) = 0$.
Il existe plusieurs méthodes pour résoudre ce problème, nous allons étudier les méthodes suivantes :
Pour chacune de ces méthodes on considérera que l'on est dans un intervalle $[a..b]$ sur lequel la fonction s'annule et que le produit $f(a) × f(b) < 0$.
Cette méthode consiste à prendre le milieu de l'intervalle $[a..b]$ défini par :
$$x_0 = (a + b) / 2$$On remplace alors $b$ par $x_0$ (ou dans le second cas $a$ par $x_0$) et on continue jusqu'à trouver une valeur de $x_0$ telle que $f(x_0)$ soit proche de 0.
| Fonction zero_dichotomie(a,b) | |
|---|---|
| Entrée |
a (réel) : borne inférieure b (réel) : borne supérieure |
| Sortie | Le zéro de la fonction $x_0$, tel que $f(x_0) = 0$ |
| Variableslocales | $x_0$ le milieu de l'intervalle $[a,b]$ |
| Description | On calcule le milieu de l'intervalle $x_0 = (a+b)/2$ et si $f(a) × f(x_0) < 0$ on remplace $b$ par $x_0$, sinon on remplace $a$ par $x_0$ |
|
Warning: file_get_contents(polytech/zero_dichotomie.algo): Failed to open stream: No such file or directory in /home/jeanmichel.richer/public_html/ez_web.php on line 397 Afficher le code polytech/zero_dichotomie.algo |
|
La seule difficulté réside dans l'expression $f(x_0)$ n'est pas proche de 0. Ce qui en informatique se traduit par $| f(x_0) | < ε$, c'est à dire que la valeur absolue est inférieure à un espilon (petit) donné.
Exercice 3.1
Ecrire le code Python correspondant et tester sur la fonction $x × x × sin(x)$ dans l'intervalle $[6,7]$. On créera :
Cette méthode consiste à trouver le point $x_0$ pour lequel la droite $y = vx +w$ passant par les points $(a,f(a))$ et $(b,f(b))$ s'annule
En ce qui concerne la sécante, elle vérifie : $$f(a) = a × v + w$$ et $$f(b) = b × v + w$$
On a donc :
$$v = (f(b) - f(a)) / (b-a)$$et
$$w = (b × f(a) - a × f(b))/ (b-a)$$Elle coupe donc l'axe des $x$ lorsque $y = 0 = v × x + w$, soit $x = -w / v:
$$ x = (a × f(b) - b × f(a)) / (f(b) - f(a)) $$| Fonction zero_secante | |
|---|---|
| Entrée |
a (entier) : borne inférieure b (entier) : borne supérieure |
| Sortie | Le zéro de la fonction $x_0$, tel que $f(x_0) = 0$ |
| Variableslocales | $x_0$ point de croisement de l'axe des $x$ avec la droite qui passe par $(a,f(a))$ et $(b, f(b))$ |
| Description | |
|
Warning: file_get_contents(polytech/zero_secante.algo): Failed to open stream: No such file or directory in /home/jeanmichel.richer/public_html/ez_web.php on line 397 Afficher le code polytech/zero_secante.algo |
|
Exercice 3.2
Implantez en Python l'algorithme de la sécante pour la recherche du zéro d'une fonction.
Cette méthode consiste à trouver le point $x_0$ pour lequel la tangente à la courbe s'annule.
L'équation de la tangente en un point $x_0$ est $y = f(x_0) + f'(x_0)(x-x-0)$, où $f'$ est la dérivée de $f$.
La tangente en un point d'abscisse $x_0$ coupe donc l'axe des $x$ en un point $x_t = x_0 - {f(x_0)} / {f'(x_0)}$.
On commencera en prenant $x_0 = (a + b) / 2$.
| Fonction zero_tangente | |
|---|---|
| Entrée |
a (entier) : borne inférieure b (entier) : borne supérieure |
| Sortie | Le zéro de la fonction $x_0$, tel que $f(x_0) = 0$ |
| Variableslocales | $x_0$ point qui évolue et se rapproche du zéro de la fonction |
| Description |
On commence avec $x_0 = (a+b)/2$ puis on itère en utilisant $x_0 = x_0 - ({f(x_0)} / {f'(x_0)})$ |
|
Warning: file_get_contents(polytech/zero_tangente.algo): Failed to open stream: No such file or directory in /home/jeanmichel.richer/public_html/ez_web.php on line 397 Afficher le code polytech/zero_tangente.algo |
|
Implantez en Python l'algorithme de la tangente pour la recherche du zéro d'une fonction.
Pour le calcul de la dérivée on pourra utiliser l'une des méthodes suivantes :
On va chercher à déterminer les zéros de la fonction $x × x × sin(x)$.
On voit sur le graphe de la fonction qu'elle possède sur l'intervalle $[0..10]$ plusieurs valeurs qui l'annulent :

Ecrire un programme qui permet de rechercher les zéros d'une fonction dans un intervalle donné. Par exemple dans l'intervalle $[0..10]$.
Dans le cas de la méthode de la tangente il faut être proche du zéro pour en obtenir la valeur exacte. En d'autres termes, l'intervalle de recherche initial $[a..b]$ doit se situer proche de $x_0$.
Essayez de trouver un des $x_0$ de la fonction $x × x × sin(x)$ en partant de la valeur 5. Quel résultat obtenez vous et pourquoi ?
Par exemple le programme suivant :
donne comme résultat :
..scipy/optimize/minpack.py:162: RuntimeWarning:
The number of calls to function has reached maxfev = 400.
warnings.warn(msg, RuntimeWarning)
x_0= [-6.09065521e-50]