On rappelle la méthode de Newton (en pseudo-code):
Data : fonction et dérivée fun
et funprime
, initialisation x0
, tolérance epsilon
, nombre maximal d'itérations maxIt
initialisation
x
$\longleftarrow$ x0
nbIt
$\longleftarrow$ 0
While critère d'arrêt pas satisfait and nbIt < maxIt
do
$\qquad$ mettre à jour x
$\qquad$ incrémenter nbIt
$\longleftarrow$ nbIt + 1
return x
and ...
newton
prenant en argument une fonction fun
et sa dérivée funprime
une condition initiale x0
une tolérance epsilon
pour le critère d'arrêt et un nombre maximal maxIt
d'itérations. On choisira d'implémenter ici le critère d'arrêt `$|f(x_n)| < \epsilon$''. La fonction
newton` renverrab
qui vaut True
si le critère d'arrêt a été satisfait avant d'atteindre le nombre maximal d'itérations fixé et False
sinon,nbIt
,nbIt
).import matplotlib.pyplot as plt
import numpy as np
epsilon
$= 10^{-6}$ et maxIt
$= 50$ (par exemple). Effectuer un premier test avec $f_0 (x) = x^2 - 1$ en partant de x0 = 4
.
x0
. Discrétiser uniformément l'intervalle $[-2, 2]$ en un vecteur I0
à $N$ points et appliquer la méthode de Newton à $f_0$ à partir de ces $N$ conditions initiales. Représenter sur une même figure les $N$ points $(x, 0)_{x \in I0}$, en noir si la méthode n'a pas convergé, en rouge si elle a convergé vers la solution négative et en vert si elle a convergé vers la solution négative. On pourra prendre $N = 100$ puis $N=200$ par exemple.
On peut définir la méthode de Newton également pour une fonction holomorphe $f$ par $$ z_{n+1} = z_n - \frac{f(z_n)}{f^\prime(z_n)} $$ On aimerait étudier dans ce cadre l'influence de la condition initiale comme précédemment, dans le cas où $f(z) = z^3 - 1$. On sait que $f$ possède trois racines complexes distinctes $\mathcal{R} = \{z^1, z^2, z^3 \}$ et le but est de représenter (par exemple avec trois couleurs différentes) les trois bassins d'attractions associés à ces trois racines. Soit $z^\ast$ une racine de $f$, on appelle bassin d'attraction de $z^\ast$ l'ensemble des $z_0 \in \mathbb{C}$ tels que la méthode de Newton initialisée à $z_0$ converge vers $z^\ast$.
matplotlib.image
, puis on importe l'image image0.png
et on l'affiche. Quel objet python est img0
? Recommencer avec le fichier image1.png
puis image2.png
.import matplotlib.image as mpimg
img0 = mpimg.imread('image0.png')
plt.imshow(img0)
<matplotlib.image.AxesImage at 0x7f0eff63bcd0>
On revient à la représentation des bassins d'attraction.
f
holomorphe telle que $f(z) = z^3 - 1$ ainsi que sa dérivée fprime
et un np.array roots
de taille $3$ contenant les trois racines distinctes de $f$.Afin de définir le complexe $z = x + iy$ en Python, on définit z = complex(x, y)
.
newtonMod
à partir de la fonction newton
implémentée à l'exercice $1$. On demande les modifications suivantes : on va utiliser le fait qu'on a une expression algébrique des racines de $f$ afin d'étudier plus simplement la dépendance de la méthode de Newton en la condition initiale et on remplace le critère d'arrêt de l'exercice $1$ par le critère d'arrêt "il existe une racine complexe $r$ de $f$ telle que $|x_n - r| < \epsilon$". On veut que newtonMod
retourne les mêmes trois éléments que la fonction newton
en changeant le booléen $b$ en un entier pouvant prendre $4$ valeurs selon que la méthode n'a pas convergé (b=-1
par exemple) ou a convergé et dans ce cas b
renvoie un numéro correspondant à la racine en question.
newtonMod
à partir en prenant pour condition initiale chacun des $N^2$ points obtenus. Représenter le carré $[-1,1] \times [-1,1]$ par une image de taille $N \times N$ pixels et colorier chaque pixel en noir si la méthode n'a pas convergé et sinon en rouge, vert ou bleu selon la racine vers laquelle elle a convergé. Essayer avec $N = 50$ puis $N = 500$.
nbIt/maxIt
$\in [0, 1]$.
Pour ceux qui ont le temps, vous pouvez choisir une (ou même plusieurs) des suggestions suivantes pour approfondir l'étude.