Fiche méthode
Calcul des termes d'une suite définie par récurrence - Python

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

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

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

  • 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))}$
bannière astuce

Astuce

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

bannière à retenir

À retenir

$\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}$
bannière exemple

Exemple

  • 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

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 ?