Introduction :
Dans cette fiche, nous allons voir comment programmer un algorithme Python qui calculera les termes d’une suite définie par une relation de récurrence.
Prérequis
Prérequis
Nous considérons trois suites définies sur $\mathbb N$ par une relation de récurrence :
- $(a_n)$, définie pour tout entier naturel $n$ par :
$$\begin{cases} a_0=2 \\ a_{n+1}=0,8a_n+5 \end{cases}$$
- $(b_n)$, définie pour tout entier naturel $n$ par :
$$\begin{cases} b_0=1 \\ b_{n+1}=1,5b_n-2 \end{cases}$$
- $(c_n)$ , définie pour tout entier naturel $n$ par :
$$\begin{cases} c_0=50 \\ c_{n+1}=0,7c_n+3 \end{cases}$$
Nous savons que les termes de ces suites se calculent à partir de leurs termes précédents.
- Nous allons donc programmer une fonction Python qui permettra de calculer, de terme en terme, le terme d’un rang donné.
Algorithme Python
Algorithme Python
Définition des fonctions
Définition des fonctions
Soit les fonctions $g_1$, $g_2$ et $g_3$ respectivement définies sur $\mathbb R$ par :
$$\begin{aligned} g_1(x)&=0,8x+5 \\ g_2(x)&=1,5x-2 \\ g_3(x)&=0,7x+3 \end{aligned}$$
Nous avons ainsi, pour tout entier naturel $n$ :
$$\begin{aligned} a_{n+1}&=g_1(a_n) \\ b_{n+1}&=g_2(b_n) \\ c_{n+1}&=g_3(c_n) \end{aligned}$$
- Nous commençons donc par programmer ces trois fonctions :
$\begin{aligned} \textcolor{#A9A9A9}{\text{1}}&\quad\text{def g1(a):} \\ \textcolor{#A9A9A9}{\text{2}}&\quad\qquad\text{return 0.8 $\ast$ a + 5} \\ \textcolor{#A9A9A9}{\text{3}}& \\ \textcolor{#A9A9A9}{\text{4}}&\quad\text{def g2(b):} \\ \textcolor{#A9A9A9}{\text{5}}&\quad\qquad \text{return 1.5 $\ast$ b - 2} \\ \textcolor{#A9A9A9}{\text{6}}& \\ \textcolor{#A9A9A9}{\text{7}}&\quad\text{def g3(c):} \\ \textcolor{#A9A9A9}{\text{8}}&\quad\qquad \text{return 0.7 $\ast$ c + 3} \\ \end{aligned}$ |
Remarque : Nous utilisons comme paramètres de ces fonctions $\purple{\text{a}}$, $\purple{\text{b}}$ et $\purple{\text{c}}$ pour mettre en évidence leurs liens avec les suites définies plus haut.
- Toutefois, on peut évidemment utiliser le même paramètre ($\purple{\text{x}}$ par exemple) pour les trois fonctions.
Fonction Python principale
Fonction Python principale
- Nous définissons la fonction $\purple{\text{terme}}$ et, afin qu’elle soit la plus générale possible, nous souhaitons qu’elle prenne en paramètres :
- la valeur du premier terme $\purple{\text{u\textunderscore 0}}$ ;
- la fonction $\purple{\text{f}}$ qui donne le terme de rang $n+1$ en fonction du terme de rang $n$ ($g_1$, $g_2$ ou $g_3$ dans notre cas) ;
- le rang $\purple{\text{p}}$ du terme que nous souhaitons connaître.
$\text{def terme(u\textunderscore 0, f, p):}$ |
- Nous initialisons la variable $\purple{\text{u}}$ avec la valeur $\purple{\text{u\textunderscore 0}}$ indiquée en paramètre (cette variable contiendra successivement les valeurs des termes de la suite) :
$\text{u = u\textunderscore 0}$ |
- Puis nous calculons successivement les termes de la suite, jusqu’au rang $\purple{\text{p}}$ donné en paramètre :
$\text{for i in range(1, p + 1):}$ |
- Pour calculer ces termes successifs, nous nous servons de la fonction $\purple{\text{f}}$ donnée en paramètre :
$\text{u = f(u)}$ |
- Une fois la boucle $\purple{\text{for}}$ exécutée, $\purple{\text{u}}$ contient la valeur du terme de rang $\purple{\text{p}}$ de la suite.
- Nous l’affichons, donc :
$\text{print($^{\backprime\backprime}$Terme de rang $\lbrace\rbrace$ : $\lbrace\rbrace^{\prime\prime}$.format(p, u))}$ |
Nous utilisons ici un formatage pratique et qui simplifie un peu l’écriture : $\purple{\text{print($^{\backprime\backprime}$ texte $\lbrace\rbrace$ texte $\lbrace\rbrace$ texte$^{\prime\prime}$.format(x, y))}}$ remplacera, dans l’ordre, les accolades par les valeurs des variables $\purple{\text{x}}$ et $\purple{\text{y}}$.
Programme complet
Programme complet
$\begin{aligned} \textcolor{#A9A9A9}{\text{1}}&\quad\text{def g1(a):} \\ \textcolor{#A9A9A9}{\text{2}}&\quad\qquad\text{return 0.8 $\ast$ a + 5} \\ \textcolor{#A9A9A9}{\text{3}}& \\ \textcolor{#A9A9A9}{\text{4}}&\quad\text{def g2(b):} \\ \textcolor{#A9A9A9}{\text{5}}&\quad\qquad \text{return 1.5 $\ast$ b - 2} \\ \textcolor{#A9A9A9}{\text{6}}& \\ \textcolor{#A9A9A9}{\text{7}}&\quad\text{def g3(c):} \\ \textcolor{#A9A9A9}{\text{8}}&\quad\qquad \text{return 0.7 $\ast$ c + 3} \\ \textcolor{#A9A9A9}{\text{9}}& \\ \textcolor{#A9A9A9}{\text{10}}&\quad\text{def terme(u\textunderscore 0, f, p):} \\ \textcolor{#A9A9A9}{\text{11}}&\quad\qquad \text{u = u\textunderscore 0} \\ \textcolor{#A9A9A9}{\text{12}}&\quad\qquad \text{for i in range(1, p + 1):} \\ \textcolor{#A9A9A9}{\text{13}}&\quad\qquad\qquad \text{u = f(u)} \\ \textcolor{#A9A9A9}{\text{14}}&\quad\qquad \text{print($^{\backprime\backprime}$Terme de rang $\lbrace\rbrace$ : $\lbrace\rbrace^{\prime\prime}$.format(p, u))} \end{aligned}$ |
- Si nous souhaitons connaître le terme de rang $35$ de la suite $(a_n)$, nous entrons la commande :
$$\purple{\text{terme(2, g1, 35)}}$$
- Si nous souhaitons connaître le terme de rang $15$ de la suite $(b_n)$, nous entrons la commande :
$$\purple{\text{terme(1, g2, 15)}}$$
- Si nous souhaitons connaître le terme de rang $35$ de la suite $(a_n)$, nous entrons la commande :
$$\purple{\text{terme(50, g3, 17)}}$$
- Vous pouvez bien sûr travailler avec une autre suite : il suffira de la définir avec la fonction Python correspondante, puis de faire appel à $\purple{\text{terme}}$, qui peut être utilisée telle, avec les paramètres adéquats.
Liste des termes
Liste des termes
Nous ajoutons une fonction $\purple{\text{liste\textunderscore termes}}$, proche de $\purple{\text{terme}}$, mais qui, au lieu de donner le terme de rang $\purple{\text{p}}$, listera les termes de rangs $0$ à $\purple{\text{p}}$.
- Une erreur a été volontairement glissée dans le code ci-dessous. Identifiez-la.
$\begin{aligned} \textcolor{#A9A9A9}{\text{16}}&\quad \text{def liste\textunderscore termes(u\textunderscore 0, f, p):} \\ \textcolor{#A9A9A9}{\text{17}}&\quad\qquad \text{u = u\textunderscore 0} \\ \textcolor{#A9A9A9}{\text{18}}&\quad\qquad \text{print($^{\backprime\backprime}$Terme de rang 0 : $^{\prime\prime}$, u)} \\ \textcolor{#A9A9A9}{\text{19}}&\quad\qquad \text{for i in range(1, p + 1):} \\ \textcolor{#A9A9A9}{\text{20}}&\quad\qquad\qquad \text{u = f(u)} \\ \textcolor{#A9A9A9}{\text{21}}&\quad\qquad \text{print($^{\backprime\backprime}$Terme de rang $\lbrace\rbrace$ : $\lbrace\rbrace^{\prime\prime}$.format(i, u))} \end{aligned}$ |
Après avoir corrigé l’erreur, utilisez la fonction avec les suites $(a_n)$, $(b_n)$ et $(c_n)$ définies plus haut.
- Que pouvez-vous conjecturer sur leurs limites ?