Skip to content
Snippets Groups Projects
Commit d5b2dc54 authored by mschiess's avatar mschiess
Browse files

NB sur la méthode du point fixe

parent 4959b58f
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
# Méthode du Point fixe
Soit $x \mapsto g(x)$ une fonction continue. Tout nombre réel $a$ tel que $g(a)=a$ est appelé **point fixe** de $g$.
Pour une valeur de démarrage $x_0$ donnée, la méthode qui consiste à construire la suite de nombres
$$x_1 = g (x_0 ),\ x_2 = g(x_1),\ x_3 = g(x_2),\ x_4 = g(x_3 ), \ldots$$
est appelée **méthode itérative du point fixe**. La fonction $g$ est appelée fonction d'itération.
Dans la suite nous allons montrer que si la suite $\left(x_{n}\right)_{n\in \mathbf{N}}$ converge vers un nombre $a$, cela a pour conséquence que $g(a) = a$ (ceci est garanti uniquement si $g$ est continue), autrement dit que $a$ est une solution de l'équation $x = g(x)$.
## Motivation
La résolution d'une équation du type $f(x)=0$ peut se ramener à la recherche d'un point fixe. En effet, nous pouvons définir une fonction $g$ avec $g(x)=f(x)+x$. Si on trouve un point fixe $x$ de $g$ alors par définition on a
$$g(x)=x \Leftrightarrow f(x)+x = x \Leftrightarrow f(x) = 0 .$$
En fonction de l'expression de $f$, il peut être judicieux de proposer d'autre construction pour $g$ afin des s'assurer que la méthode du point fixe converge.
## Interprétation graphique
Graphiquement les points fixes de $g$ sont situés sur l'intersection de la courbe $y=g(x)$ avec la droite $y=x$.
### Exemple
La fonction $g:x\mapsto x^2+2x-6$ possède deux point fixe en $x=-3$ et $x=2$.
On peut vérifier cette affirmation en résolvant
$$g(x)=x \Leftrightarrow x^2+2x-6=x \Leftrightarrow x^2+x-6=0 \Leftrightarrow (x-2)(x+3)=0 \Leftrightarrow \ x=2 \text{ ou }x=-3$$
Ce sont bien les abscisses des point d'intersection de la courbe $y=g(x)$ avec la droite $y=x$, comme on peut le voir en exécutant le progragge suivant:
%% Cell type:code id: tags:
``` python
import numpy as np
import matplotlib.pyplot as plt
a, b = -6, 6 # l'intervalle sur lequel on trace le graphique
X = np.linspace(a, b, 100)
Y = [x**2+2*x-6 for x in X]
fig, ax = plt.subplots()
plt.plot(X, Y)
plt.plot(X, X)
plt.xlim(a, b)
plt.ylim(-8, 5)
ax.axhline(linewidth=2, color="k")
ax.axvline(linewidth=2, color="k")
plt.xticks(np.arange(a, b, step=1))
plt.yticks(np.arange(-8, 5, step=1))
plt.grid(True)
plt.show()
```
%% Output
%% Cell type:code id: tags:
``` python
from matplotlib import pyplot as plt
def f(x):
return 8*x/(1 + 2*x)
def cobweb(x0, n, ax):
xs = [x0]
ys = [0]
for i in range(1,n):
if i % 2 == 0:
xs.append(ys[-1])
ys.append(ys[-1])
else:
xs.append(xs[-1])
ys.append(f(xs[-1]))
ax.plot(xs, ys, 'k--', lw=2.0)
x = np.linspace(0, 4, 100)
fig, ax = plt.subplots()
ax.plot(x, x, 'k', lw=2.0)
ax.plot(x, f(x), 'r', lw=2.0)
cobweb(0.5, 50, ax)
ax.set_xlabel('$x$')
ax.set_ylabel('$f(x)$')
plt.grid()
plt.show()
```
%% Output
%% Cell type:markdown id: tags:
## Etude de la convergence
A chaque itération on construit la prochaine valeur de la suite avec
$$x_{n}=g(x_{n-1})$$
Prenons deux point successifs $x_{n-1}$ et $x_{n}$. Si la fonction est continument dérivable, on a que d'après le théorème des acroissements finis qu'il existe un point $\xi$ dans l'intervalle délimité par $x_{n}$ et $x_{n-1}$ telle que
$$\frac{g\left( x_{n}\right)-g\left( x_{n-1}\right)}{x_{n}-x_{n-1}}=g'\left( \xi \right)$$
mais comme $g\left( x_{n}\right)=x_{n+1}$ et $g\left( x_{n-1}\right)=x_{n}$, on a
$$\frac{x_{n+1}-x_{n}}{x_{n}-x_{n-1}}=g'\left( \xi \right)
\Leftrightarrow
x_{n+1}-x_{n} = g'\left( \xi \right)\cdot \left( x_{n}-x_{n-1} \right)
$$
Si on prend les valeurs absolu on aura l'égalité
$$\lvert x_{n+1}-x_{n} \rvert = \lvert g'\left( \xi \right) \rvert \cdot \lvert x_{n}-x_{n-1} \rvert $$
Donc si $\lvert g'\left( \xi \right) > 1 $ la distance entre $x_{n+1}$ et $x_{n}$ va augmenter (la suite va avoir tendance à diverger), tandis que si $\lvert g'\left( \xi \right) < 1 $ la distance entre $x_{n+1}$ et $x_{n}$ va dimunuer (la suite va avoir tendance à converger).
Par conséquent, l'étude de $g'$ va nous permettre de déterminer si la suite $\left(x_{n}\right)_{n\in \mathbf{N}}$ converge ou pas.
!!! note Définition
Soit $a$ un point fixe d'une fonction $g$. On dit que le point fixe $a$ est **attractif** si $|g′(a)|<1$, tandis qu'il est dit **répulsif** si $|g′(a)|>1$.
!!!
%% Cell type:markdown id: tags:
### Point fixe attractif en $x=a$ avec $0<g'(a)<1$
Prenons un point fixe attractif en $x=a$ avec $0<g'(a)<1$. Supposons que l'on parte d'un point $x_0 $ qui se situe dans un voisinage $I$ de $a$ où $\forall x \in I $ on a $0<g'(x)\leq K$ avec $0<K<1$.
Après chaque itération $x_n=f \left( x_{n-1}\right)$, d'après le théorème des acroissements finis, il existe un $\xi$ dans l'intervalle délimité par $a$ et $x_n$ telle que
$$ g(a) - g(x_n) = g'(\xi) \left(a - x_n \right)$$
mais comme $ 0< g'(\xi)\leq K <1$ et que $g(a) = a$ et $g(x_n)=x_{n+1}$ on a
$$ a - x_{n+1} < K \left( a - x_n \right)$$
Par récurrence, on peut montrer que
$$ a - x_{n+1} < K^n \left( a - x_0 \right)$$
Dans ce cas la suite $\left(x_{n}\right)_{n\in \mathbf{N}}$ va converger vers $a$. De plus si, $x_0<a$ alors la suite sera strictement croissante tandis que si $x_0>a$ la suite sera strictement décroissante
#### Exemple avec $x_0 < a$
%% Cell type:code id: tags:
``` python
from matplotlib import pyplot as plt
def plot_point_fixe(f, x0, a, b, n =10):
'''
Permet d'afficher un graphique qui montre l'évolution des points
par la méthode du point fixe ou x_{n+1} := f(x_{n}) sur
l'intervalle [a,b]
Args:
- f (function) : la fonction pour laquelle on cherche un point fixe
- x0 (float) : le point de départ
- a (float) : le debut de l'intervalle sur lequel on affiche la fonction
- a (float) : la fin de l'intervalle sur lequel on affiche la fonction
- n (int) : le nombre d'itérations de la méthode du point fixe (par
défaut n vaut 100)
'''
X = np.linspace(a, b, 100) # 100 points entre a et b
Y = [f(x) for x in X]
fig, ax = plt.subplots()
# calcul les coordonnées des points pour la méthode du point fixe
xs = [x0]
ys = [0]
for i in range(1,2*n+1):
if i % 2 == 0:
xs.append(ys[-1])
ys.append(ys[-1])
else:
xs.append(xs[-1])
ys.append(f(xs[-1]))
ax.plot(xs, ys, 'k--', lw=2.0)
ax.plot(X, X, '0.4', lw=2.0, ) # affiche la droite y=x
ax.plot(X, Y, 'r', lw=2.0) # affiche y=f(x
ax.set_xlabel('$x$')
ax.set_ylabel('$f(x)$')
ax.axhline(linewidth=2, color="k")
ax.axvline(linewidth=2, color="k")
plt.xlim(a, b)
plt.grid()
plt.show()
def g(x):
return 8*x/(1 + 2*x)
plot_point_fixe(g, 0.5, 0, 4)
```
%% Output
%% Cell type:markdown id: tags:
#### Exemple avec $x_0 > a$
%% Cell type:code id: tags:
``` python
from math import log
def g(x):
return log(x)+1
plot_point_fixe(g, 4, 0.1, 4.2)
```
%% Output
%% Cell type:markdown id: tags:
### Point fixe attractif en $x=a$ avec $-1<g'(a)<0$
Prenons un point fixe attractif en $x=a$ avec $-1<g'(a)<0$. Supposons que l'on parte d'un point $x_0 < a $ qui se situe dans un voisinage $I$ de $a$ où $\forall x \in I $ on a $K\leq g'(x) < 0$ avec $-1<K<0$.
Comme auparavant on aura
$$ a - x_{n+1} = g'(\xi) \left(a - x_n \right)$$
mais ici $ -1<K\leq g'(\xi)<0$. Donc à chaque itération, on aura que le signe de $a - x_{n+1}$ va changer. Cepandant la convergence sera assuré car en prenant les valeurs absolu on aura
$$ \lvert a - x_{n+1} \rvert < \lvert K \rvert \cdot \lvert a - x_n \rvert$$
De même que
$$ \lvert a - x_{n+1} \rvert < \lvert K \rvert ^n \cdot \lvert a - x_0 \rvert$$
Par conséquent, on aura une suite convergente dont les termes vont osciller autour de $a$
%% Cell type:code id: tags:
``` python
def g(x):
return -8*x/(1 + 2*x+1)
plot_point_fixe(g, -3, -8, -2)
```
%% Output
%% Cell type:markdown id: tags:
### Point fixe répulsif en $x=a$ avec $g'(a)>1$
Prenons un point fixe répulsif en $x=a$ ce qui veut dire que $\lvert g'(a)\rvert >1$. Supposons que l'on parte d'un point $x_0 $ qui se situe dans un voisinage $I$ de $a$ où $\forall x \in I $ on a $ g'(x) \geq K$ avec $K>1$.
Comme auparavant on aura
$$ a - x_{1} = g'(\xi) \left(a - x_0 \right)$$
mais ici $g'(\xi) \geq K > 1$. Donc à la première itération, on aura que le point $x_1$ s'éloigne de $a$ car
$$ \lvert a - x_{1} \rvert > \lvert K \rvert \cdot \lvert a - x_0 \rvert$$
Donc à priori, mis-à-part le cas où la suite devient stationnaire, c'est-à-dire si "par chance" on obtient un point $x_n$ où $f(x_n)$ la suite ne convergera pas vers $a$.
### Exemple de divergence
%% Cell type:code id: tags:
``` python
def g(x):
return x**2+2*x-6
plot_point_fixe(g, 2.1, -4, 8,3)
```
%% Output
%% Cell type:markdown id: tags:
### Exemple d'une suite stationnaire
On reprend l'exemple de la fonction $g:x\mapsto x^2+2x-6$ qui a deux points fixes $a=2$ et $a=-3$. Si on part de $x_0=-4$ alors $x_1 = \underbrace{g(-4)}_{=2}$ est un point fixe.
%% Cell type:code id: tags:
``` python
def g(x):
return x**2+2*x-6
plot_point_fixe(g, -4, -5, 3,3)
```
%% Output
%% Cell type:code id: tags:
``` python
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment