© Copyright Franck CHEVRIER 2019-2022 https://www.python-lycee.com.
Les activités partagées sur Capytale sont sous licence Creative Commons.
Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.
Un berger, mathématicien et insomniaque de surcroit, rêve chaque nuit de son troupeau de moutons.
Son pré est traversé par une barrière, qui sépare initialement son troupeau en deux groupes égaux. Chaque nuit, 5% des moutons situés à gauche de la barrière sautent à droite et 8% des moutons situés à droite de la barrière sautent à gauche.
La question qui le hante et l'empêche de dormir est de savoir, à long terme, quelle sera la répartition des moutons de part et d'autre de la barrière...
Pour tout $n\in\mathbb{N}$, on notera $g_n$ et $d_n$ les proportions respectives de moutons, à gauche et à droite, au bout de $n$ nuits. $g_n$ et $d_n$ sont aussi les probabilités, pour un mouton quelconque, de se trouver à gauche et à droite, au bout de $n$ nuits.
NB : Pour l’étude de cette situation, on suppose que le nombre de moutons est suffisamment important pour pouvoir conserver les valeurs décimales avec une précision arbitraire.
Vocabulaire :1.1. Compléter le schéma ci-dessous à l'aide des arêtes et pondérations manquantes.
Le schéma proposé s'appelle un graphe probabiliste, et la situation étudiée est une chaîne de Markov.
Les sommets G et D correspondent à "gauche" et "droite".
Les arêtes qui relient les sommets sont pondérées par les probabilités correspondantes.
Ainsi, la somme des poids des arêtes issues d'un sommet vaut 1.
1.2. Préciser les valeurs de $g_0$ et $d_0$, et donner une relation liant $g_n$ et $d_n$ pour tout $n\in\mathbb{N}$.
1.3. Écrire deux relations traduisant les mouvements de moutons, d'une nuit à l'autre.
1.4. Tester les syntaxes Python ci-dessous. Que permettent-elles de calculer ?
# Exécuter cette cellule
a,b = 0.5,0.5
a,b = 0.95*a+0.08*b,0.05*a+0.92*b
a,b
(0.515, 0.48500000000000004)
1.5. Écrire une fonction Python repartition qui reçoit n en argument et renvoie un couple de valeurs correspondant à $g_n$ et $d_n$.
$\quad\;\;$Aide : On pourra écrire une boucle et utiliser la syntaxe vue dans la question précédente.
# Écrire ici la fonction repartition
def repartition(n):
a,b = 0.5,0.5
for k in range(n):
a,b = 0.95*a+0.08*b,0.05*a+0.92*b
return a,b
1.6. Effectuer un appel à la fonction repartition pour évaluer la répartition des moutons de part et d'autre de la barrière au bout de 4 nuits.
# Effectuer ici l'appel à la fonction repartition
repartition(4)
(0.549281045, 0.45071895500000003)
Vocabulaire :
On dit que $U_n$ est la matrice de distribution au rang $n$.
La matrice $A$ s'appelle la matrice de transition associée.
Au vu des relations obtenues dans la question 1.3, on dit que les suites $(g_n)_{n\geq0}$ et $(g_n)_{n\geq0}$ sont des suites récurrentes imbriquées.
Pour tout $n\in\mathbb{N}$, on pose $U_n=\begin{pmatrix} g_n & d_n \end{pmatrix}$.
2.1. Traduire les expressions obtenues en 1.3 sous la forme $U_{n+1}=U_{n}A$, où $A$ est une matrice carrée que l'on précisera.
2.2. Démontrer par récurrence que pour tout $n\in\mathbb{N}$, on a $U_n=U_0A^n$.
2.3.a. Tester les syntaxes Python ci-dessous. Que permettent-elles de calculer ?
# Exécuter cette cellule
import numpy as np
U_0 = np.matrix([[0.5,0.5]])
A = np.matrix([[0.95,0.05],[0.08,0.92]])
U_0*A**2
matrix([[0.52805, 0.47195]])
$\quad$b. Effectuer une saisie Python pour retrouver, matriciellement, le résultat de la question 1.6.
# Effectuer ici la saisie
U_0*A**4
matrix([[0.54928104, 0.45071896]])
$\quad$c. Écrire une fonction Python U qui reçoit n en argument et renvoie la matrice $U_n$.
$\quad\;\;\;$Retrouver ensuite le résultat de la question précédente à l'aide d'un appel à cette fonction.
# Écrire ici la fonction U
def U(n):
U_0=np.matrix([[0.5,0.5]])
A = np.matrix([[0.95,0.05],[0.08,0.92]])
return U_0*A**n
# Effectuer ici l'appel à la fonction U
U(4)
matrix([[0.54928104, 0.45071896]])
$\quad$d. Effectuer des appels à la fonction U pour déterminer $U_{50}$, $U_{100}$ et $U_{1000}$.
$\quad\;\;\;$Que peut-on conjecturer, à long terme, concernant la répartition des moutons de part et d'autre de la barrière ?
# Effectuer ici des appels à la fonction U
U(50)
matrix([[0.61527544, 0.38472456]])
U(100)
matrix([[0.61538451, 0.38461549]])
U(1000)
matrix([[0.61538462, 0.38461538]])
Vocabulaire :
La matrice $S$ ainsi définie est appelée matrice de distribution invariante
(ou matrice de répartition stable).
On souhaite déterminer une matrice $S = \begin{pmatrix} x & y \end{pmatrix}$ telle que :
3.1. Démontrer qu'une matrice $S$ vérifie les conditions souhaitées si et seulement si le système $\begin{Bmatrix} 0,05x & - & 0,08y & = & 0 \\ x & + & y & = & 1 \end{Bmatrix}$ est vérifié.
3.2. En déduire que la matrice $S$ cherchée est unique, et donner ses coefficients ainsi que des valeurs approchées de ces valeurs.
$\quad\;\;$Quelles valeurs semble-t-on retrouver ? Cette matrice dépend-t-elle de la distribution initiale $U_0$ ?
Prolongement : (admis)
Si $0Il existe alors une unique matrice de distribution invariante qui est $ S = \begin{pmatrix} \frac{q}{p+q} & \frac{p}{p+q} \end{pmatrix}$.
De plus, si on note $U_n$ la matrice de distriubution au rang $n$, alors on a $\displaystyle\lim\limits_{n \to +\infty}{U_n}=S$ (cette limite est donc indépendante de l'état initial $U_0$).
4.1. À l'aide des relations obtenues dans les questions 1.2 et 1.3, donner une expression de $g_{n+1}$ en fonction de $g_n$.
4.2. Pour tout $n\in\mathbb{N}$, on pose $\displaystyle u_n=\frac{8}{13}-g_n$.
$\quad\;\;$a. Démontrer que la suite $(u_n)_{n\geq0}$ est géométrique.
$\quad\;\;$b. En déduire l'expression de $u_n$ en fonction de $n$, puis les expressions de $g_n$ et de $d_n$ en fonction de $n$.
$\quad\;\;$c. Écrire des fonctions Python g et d qui reçoivent n en argument et renvoient respectivement les valeurs $g_n$ et $d_n$.
$\quad\quad\;\;$Tester pour $n=4$ et vérifier qu'on retrouve le résultat de la question 1.6.
# Écrire ici les fonctions a et b
def g(n):
return 8/13-3/26*0.87**n
def d(n):
return 5/13+3/26*0.87**n # ou 1-a(n)
# Effectuer ici les appels aux fonctions
g(4)
0.5492810450000001
d(4)
0.45071895500000003
© Copyright Franck CHEVRIER 2019-2022 https://www.python-lycee.com.
Les activités partagées sur Capytale sont sous licence Creative Commons.
Dernière modification de l'activité : Juillet 2022