{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Méthode du Point fixe\n\n\nSoit $x \\mapsto g(x)$ une fonction continue. Tout nombre réel $a$ tel que $g(a)=a$ est appelé **point fixe** de $g$.\n\nPour une valeur de démarrage $x_0$ donnée, la méthode qui consiste à construire la suite de nombres\n\n$$x_1 = g (x_0 ),\\ x_2 = g(x_1),\\ x_3 = g(x_2),\\ x_4 = g(x_3 ), \\ldots$$\n\nest appelée **méthode itérative du point fixe**. La fonction $g$ est appelée fonction d'itération.\n\nDans 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)$.\n\n\n## Motivation\n\nLa 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\n\n$$g(x)=x \\Leftrightarrow f(x)+x = x \\Leftrightarrow f(x) = 0 .$$\n\nEn 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.\n\n\n\n## Interprétation graphique\n\nGraphiquement les points fixes de $g$ sont situés sur l'intersection de la courbe $y=g(x)$ avec la droite $y=x$.\n\n### Exemple\nLa fonction $g:x\\mapsto x^2+2x-6$ possède deux point fixe en $x=-3$ et $x=2$.\n\nOn peut vérifier cette affirmation en résolvant \n$$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$$\n\nCe 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:"},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport matplotlib.pyplot as plt\n\na, b = -6, 6 # l'intervalle sur lequel on trace le graphique\n\nX = np.linspace(a, b, 100)\nY = [x**2+2*x-6 for x in X]\n\nfig, ax = plt.subplots()\n\nplt.plot(X, Y)\nplt.plot(X, X)\nplt.xlim(a, b)\nplt.ylim(-8, 5)\n\nax.axhline(linewidth=2, color=\"k\")\nax.axvline(linewidth=2, color=\"k\")\n\nplt.xticks(np.arange(a, b, step=1))\nplt.yticks(np.arange(-8, 5, step=1))\n\nplt.grid(True)\n\nplt.show()","execution_count":30,"outputs":[{"output_type":"display_data","data":{"application/javascript":"element.append(window._basthonBypassBus.pop(0));"},"metadata":{}}]},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"from matplotlib import pyplot as plt\n\ndef f(x):\n return 8*x/(1 + 2*x)\n\ndef cobweb(x0, n, ax):\n xs = [x0]\n ys = [0]\n for i in range(1,n):\n if i % 2 == 0:\n xs.append(ys[-1])\n ys.append(ys[-1])\n else:\n xs.append(xs[-1])\n ys.append(f(xs[-1]))\n ax.plot(xs, ys, 'k--', lw=2.0)\n\nx = np.linspace(0, 4, 100)\n\nfig, ax = plt.subplots()\n\nax.plot(x, x, 'k', lw=2.0)\nax.plot(x, f(x), 'r', lw=2.0)\ncobweb(0.5, 50, ax)\n\nax.set_xlabel('$x$')\nax.set_ylabel('$f(x)$')\n\nplt.grid()\nplt.show()","execution_count":2,"outputs":[{"output_type":"display_data","data":{"application/javascript":"element.append(window._basthonBypassBus.pop(0));"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## Etude de la convergence\n\nA chaque itération on construit la prochaine valeur de la suite avec \n\n$$x_{n}=g(x_{n-1})$$\n\nPrenons 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\n\n$$\\frac{g\\left( x_{n}\\right)-g\\left( x_{n-1}\\right)}{x_{n}-x_{n-1}}=g'\\left( \\xi \\right)$$\n\nmais comme $g\\left( x_{n}\\right)=x_{n+1}$ et $g\\left( x_{n-1}\\right)=x_{n}$, on a \n\n$$\\frac{x_{n+1}-x_{n}}{x_{n}-x_{n-1}}=g'\\left( \\xi \\right)\n\\Leftrightarrow \nx_{n+1}-x_{n} = g'\\left( \\xi \\right)\\cdot \\left( x_{n}-x_{n-1} \\right)\n$$\n\nSi on prend les valeurs absolu on aura l'égalité \n\n$$\\lvert x_{n+1}-x_{n} \\rvert = \\lvert g'\\left( \\xi \\right) \\rvert \\cdot \\lvert x_{n}-x_{n-1} \\rvert $$\n\nDonc 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).\n\nPar 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.\n\n!!! note Définition\nSoit $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$.\n!!!\n"},{"metadata":{},"cell_type":"markdown","source":"### Point fixe attractif en $x=a$ avec $0<g'(a)<1$\n\nPrenons 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$.\n\nAprè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\n\n$$ g(a) - g(x_n) = g'(\\xi) \\left(a - x_n \\right)$$\n\nmais comme $ 0< g'(\\xi)\\leq K <1$ et que $g(a) = a$ et $g(x_n)=x_{n+1}$ on a \n\n$$ a - x_{n+1} < K \\left( a - x_n \\right)$$\n\nPar récurrence, on peut montrer que \n\n$$ a - x_{n+1} < K^n \\left( a - x_0 \\right)$$\n\nDans 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\n\n#### Exemple avec $x_0 < a$ "},{"metadata":{"trusted":true},"cell_type":"code","source":"from matplotlib import pyplot as plt\n\n\ndef plot_point_fixe(f, x0, a, b, n =10):\n '''\n Permet d'afficher un graphique qui montre l'évolution des points\n par la méthode du point fixe ou x_{n+1} := f(x_{n}) sur \n l'intervalle [a,b]\n Args:\n - f (function) : la fonction pour laquelle on cherche un point fixe\n - x0 (float) : le point de départ\n - a (float) : le debut de l'intervalle sur lequel on affiche la fonction\n - a (float) : la fin de l'intervalle sur lequel on affiche la fonction\n - n (int) : le nombre d'itérations de la méthode du point fixe (par\n défaut n vaut 100)\n '''\n X = np.linspace(a, b, 100) # 100 points entre a et b\n Y = [f(x) for x in X]\n \n fig, ax = plt.subplots()\n \n # calcul les coordonnées des points pour la méthode du point fixe\n xs = [x0]\n ys = [0]\n for i in range(1,2*n+1):\n if i % 2 == 0:\n xs.append(ys[-1])\n ys.append(ys[-1])\n else:\n xs.append(xs[-1])\n ys.append(f(xs[-1]))\n ax.plot(xs, ys, 'k--', lw=2.0)\n\n \n ax.plot(X, X, '0.4', lw=2.0, ) # affiche la droite y=x\n ax.plot(X, Y, 'r', lw=2.0) # affiche y=f(x\n \n ax.set_xlabel('$x$')\n ax.set_ylabel('$f(x)$')\n \n ax.axhline(linewidth=2, color=\"k\")\n ax.axvline(linewidth=2, color=\"k\")\n\n plt.xlim(a, b)\n \n plt.grid()\n plt.show()\n\n\ndef g(x):\n return 8*x/(1 + 2*x)\n \nplot_point_fixe(g, 0.5, 0, 4)","execution_count":36,"outputs":[{"output_type":"display_data","data":{"application/javascript":"element.append(window._basthonBypassBus.pop(0));"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"#### Exemple avec $x_0 > a$"},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"from math import log\n\ndef g(x):\n return log(x)+1\n\nplot_point_fixe(g, 4, 0.1, 4.2)","execution_count":4,"outputs":[{"output_type":"display_data","data":{"application/javascript":"element.append(window._basthonBypassBus.pop(0));"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"### Point fixe attractif en $x=a$ avec $-1<g'(a)<0$\n\nPrenons 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$.\n\nComme auparavant on aura\n$$ a - x_{n+1} = g'(\\xi) \\left(a - x_n \\right)$$\n\nmais 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\n\n$$ \\lvert a - x_{n+1} \\rvert < \\lvert K \\rvert \\cdot \\lvert a - x_n \\rvert$$\n\nDe même que\n\n$$ \\lvert a - x_{n+1} \\rvert < \\lvert K \\rvert ^n \\cdot \\lvert a - x_0 \\rvert$$\n\nPar conséquent, on aura une suite convergente dont les termes vont osciller autour de $a$"},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"def g(x):\n return -8*x/(1 + 2*x+1)\n \nplot_point_fixe(g, -3, -8, -2)","execution_count":5,"outputs":[{"output_type":"display_data","data":{"application/javascript":"element.append(window._basthonBypassBus.pop(0));"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"### Point fixe répulsif en $x=a$ avec $g'(a)>1$\n\nPrenons 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$.\n\nComme auparavant on aura\n$$ a - x_{1} = g'(\\xi) \\left(a - x_0 \\right)$$\n\nmais ici $g'(\\xi) \\geq K > 1$. Donc à la première itération, on aura que le point $x_1$ s'éloigne de $a$ car\n\n$$ \\lvert a - x_{1} \\rvert > \\lvert K \\rvert \\cdot \\lvert a - x_0 \\rvert$$\n\nDonc à 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$.\n\n### Exemple de divergence"},{"metadata":{"trusted":true},"cell_type":"code","source":"def g(x):\n return x**2+2*x-6\n \nplot_point_fixe(g, 2.1, -4, 8,3)","execution_count":37,"outputs":[{"output_type":"display_data","data":{"application/javascript":"element.append(window._basthonBypassBus.pop(0));"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"### Exemple d'une suite stationnaire\n\nOn 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."},{"metadata":{"trusted":true},"cell_type":"code","source":"def g(x):\n return x**2+2*x-6\n \nplot_point_fixe(g, -4, -5, 3,3)","execution_count":40,"outputs":[{"output_type":"display_data","data":{"application/javascript":"element.append(window._basthonBypassBus.pop(0));"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"}},"nbformat":4,"nbformat_minor":2}
\ No newline at end of file
%% 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
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$.
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
importnumpyasnp
importmatplotlib.pyplotasplt
a,b=-6,6# l'intervalle sur lequel on trace le graphique
X=np.linspace(a,b,100)
Y=[x**2+2*x-6forxinX]
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
frommatplotlibimportpyplotasplt
deff(x):
return8*x/(1+2*x)
defcobweb(x0,n,ax):
xs=[x0]
ys=[0]
foriinrange(1,n):
ifi%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
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$,tandisqu'ilestdit**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
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$alorslasuiteserastrictementcroissantetandisquesi$x_0>a$ la suite sera strictement décroissante
#### Exemple avec $x_0 < a$
%% Cell type:code id: tags:
``` python
frommatplotlibimportpyplotasplt
defplot_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)forxinX]
fig,ax=plt.subplots()
# calcul les coordonnées des points pour la méthode du point fixe
xs=[x0]
ys=[0]
foriinrange(1,2*n+1):
ifi%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()
defg(x):
return8*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
frommathimportlog
defg(x):
returnlog(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
defg(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
defg(x):
returnx**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.