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

ajout d'un exercice au NB sur la méthode du point fixe

parent 478a8674
Branches
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, on peut définir une fonction $ g $ telle que $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. $$
Il est crucial de choisir une fonction $g$ non seulement pour reformuler le problème en termes de recherche de point fixe, mais aussi pour s'assurer que la méthode itérative converge ( voir plus bas.
## 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
def f(x):
return x**2+2*x-6
X = np.linspace(a, b, 100)
Y = [f(x) 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.title("$h:x\mapsto x^2+2x-6$")
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:markdown id: tags:
## Influence de le fonction auxilaire $h$ dans la convergence
On sait maintenant que pour que la métode itérative du point fixe converge, il faut que le point fixe $g(a)=a$ soit attractif, et que le point de départ $x_0$ soit situé dans un intervalle $I$ contenant $a$ tel que $\lvert f'(x) \rvert <1$ pout tout $x\in I$.
Si l'on souhaite résoudre un problème de recherche de zéro d'une fonction $f$ en utilisant la méthode du point fixe sur une foction $g$ définie à partir de $f$, alors on cherchera à construire $g$ de telle manière que la dérivée autour du point fixe soit, en valeur absolu, plus petite que 1. On peux par exemple tracer le graphique de $g$, $g'$ et de la droite $y=x$ pour estimer cette condition.
### Exemple
On souaiterésoudre l'équation $e^x -2x-3=0$, ce qui est équivalent à trouver les zéros de $f:x\mapsto e^x -2x-3$. Si on définit la fonction auxiliaire $g$ avec $g(x)=f(x)+x=e^x -x-3$, alors comme observé sur la représentation graphique ci-dessous, on aurra un point fixe répulsif en $x\approx 1.9$ et un point fixe attractif en $x\approx -1.5$.
%% Cell type:code id: tags:
``` python
import numpy as np
import matplotlib.pyplot as plt
from math import exp
def h(x):
return exp(x)-x-3
def dh(x):
return exp(x)-1
a, b = -6, 6 # l'intervalle sur lequel on trace le graphique
X = np.linspace(a, b, 100)
Y = [h(x) for x in X]
DY = [dh(x) for x in X]
fig, ax = plt.subplots()
plt.plot(X, Y, label="y=h(x)")
plt.plot(X, X)
plt.plot(X, DY, label="y=h'(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.legend(loc="lower right")
plt.title("$h:x\mapsto e^x-x-3$")
plt.show()
```
%% Output
%% Cell type:markdown id: tags:
Prenons un choix différent pour $h$. Par exemple, on a
$$e^x -2x-3=0 \Leftrightarrow e^x =2x+3 \Leftrightarrow x = \ln \left( 2x+3 \right)$$
Donc les solutions de l'équation sont les points fixes de la fonction $\hat{h}:x\mapsto \ln \left( 2x+3 \right)$. La fonction $\hat{h}$ possède les mêmes point fixe que $h$ mais comme on peut le voir sur le graphique ci-dessous, la situation est inversée. Le point fixe en $x\approx 1.9$ est maintenant attractif tandi que le point fixe en $x\approx -1.5$ est devenu répulsif.
*Remarque : pour tracer le graphique on a besoin de voir que $D_\hat{h} = ]-3/2, + \infty[$.*
%% Cell type:code id: tags:
``` python
import numpy as np
import matplotlib.pyplot as plt
from math import log
def h(x):
return log(2*x+3)
def dh(x):
return 1/(2*x+3)
a, b = -1.49, 6 # l'intervalle sur lequel on trace le graphique
X = np.linspace(a, b, 100)
Y = [h(x) for x in X]
DY = [dh(x) for x in X]
fig, ax = plt.subplots()
plt.plot(X, Y, label="y=h(x)")
plt.plot(X, X)
plt.plot(X, DY, label="y=h'(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.legend(loc="lower right")
plt.title("$h:x\mapsto \log(2x+3)$")
plt.show()
```
%% Output
%% Cell type:markdown id: tags:
Pour résumer un utilisera $h$ et $\hat{h}$ pour trouver les solutions de $e^x -2x-3=0$.
%% Cell type:code id: tags:
``` python
def point_fixe(h, x0, tol=0.001, iter_max=100):
'''
Cherche un point fixe x de la fonction h (i.e. un solution de h(x)=x)e
n utilisant la méthode itérative du point fixe
Args:
- f (function) : la fonction pour laquelle on cherche le point
fixe.
- x0 (float) : la valeur de démarrage de la méthode.
- tol (float) : l'erreur minimal à partir de laquelle on
arrête la recherche (|x_n-x_{n+1}|<tol).
Par défaut tol = 0.001
- iter_max(int): Le nombre d'itérations maximal dans le cas où
la méthode diverge ou converge trop lentement
return:
- x1(float) : une approximation du point fixe qui se trouve à
distance tol de la solution ou le iter_max termes
si la méthode diverge.
'''
x1 = x0
for _ in range(iter_max):
x0 = x1
x1 = h(x0)
# print(x1)
# on stop la recherche si on est suffisament proche de la solution
if abs(x0-x1) < tol:
return x1
return x1
print("il y a deux solution à l'équation ex eˣ -2x-3=0 ")
# première solution avec h
def h(x):
return exp(x)-x-3
print("une première solution en x = ",point_fixe(h, -1))
# Deusième solution avec ĥ
def h(x):
return log(2*x+3)
print("une seconde solution en x = ",point_fixe(h, 1))
```
%% Output
il y a deux solution à l'équation ex eˣ -2x-3=0
une première solution en x = -1.373799270699159
une seconde solution en x = 1.923729843806448
%% Cell type:markdown id: tags:
## Exercices
### Exercice 87
On désire fabriquer une canette en aluminium qui ait la forme d’un cylindre circulaire droit de hauteur h et de rayon r fermé aux deux extrémités, d'un volume de 33 cl (voir les figures).
![Image de canette](https://githepia.hesge.ch/info_sismondi/3AM.OS/-/raw/main/zeros/figures/fig_canette.png)
En utilisant le calcul différentiel, répondre aux questions suivantes :
1. Quelles sont les cotes h et r en cm qui minimisent le coût de la canette si l'aluminium employé pour les disques coûte 0,002 Fr/cm2 et celui utilisé pour le cylindre circulaire droit, 0,001 Fr/cm² ?
Quelle est son coût minimum ?
%% Cell type:code id: tags:
``` python
# Afficher la fonction d'intérêt pour estimer la localisation
# du point fixe
# du/des point(s) fixe(s)
```
%% Cell type:code id: tags:
``` python
# Trouver le point fixe
# Trouver le(s) point(s) fixe(s)
```
%% Cell type:raw id: tags:
Réponse: Le coût minumum d'une canette est de ... Fr et il faut que h=.... [cm] et r=....[cm]
%% Cell type:markdown id: tags:
2. Par souci d'écologie, le fabriquant aimerait construire cette canette avec un minimum d'aluminium. Est-ce compatible avec un coût minimum ?
%% Cell type:code id: tags:
``` python
```
%% Cell type:raw id: tags:
Réponse :
Explication :
%% Cell type:markdown id: tags:
### Exercice 90
Estimer, avec une précision de 6 chiffres après la virgule toutes les solutions de l'équation
$$ x^3 = \sqrt{x+2} .$$
%% Cell type:code id: tags:
``` python
# Estimer graphiquement où se situe les solutions
```
%% Cell type:code id: tags:
``` python
# Définir une (ou plusieurs) fonction(s) h et utiliser la méthode
# du point fixe pour trouver les solutions de l'équation.
```
%% Cell type:markdown id: tags:
### Exercice 91
Un nageur se trouve à une distance de $0,57$ kilomètres du rivage et aimerait rejoindre sa cabane.
Il est positionné tel que le point $A$ est sa projection orthogonale sur le rivage et la distance séparant le point $A$ de la cabane est de $2,8\; km$.
Le nageur peut nager a une vitesse de $3\;km/h$ et marcher sur le rivage à une vitesse de $5km/h$.
![Image de nageur](https://githepia.hesge.ch/info_sismondi/3AM.OS/-/raw/main/zeros/figures/fig_nageur.pdf)
![Image de nageur](https://githepia.hesge.ch/info_sismondi/3AM.OS/-/raw/main/zeros/figures/fig_nageur.png)
On souhaite déterminer à quelle distance de la cabane doit se trouver le point $P$, correspondant à l'endroit où le nageur doit sortir de l'eau, pour rejoindre la cabane en un minimum de temps.
%% Cell type:code id: tags:
``` python
# Afficher la fonction d'intérêt pour estimer la localisation
# du point fixe
# du/des point(s) fixe(s)
```
%% Cell type:code id: tags:
``` python
# Trouver le point fixe
# Trouver le(s) point(s) fixe(s)
```
%% Cell type:raw id: tags:
Réponse: La cabane de trouve à .... [km] du point $P$.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment