1ère Maths - Mathématiques - Suites - Cours

Pré-requis

Suite définie par $u_n = f(n)$

Une suite définie explicitement par une relation de la forme $u_n = f(n)$ n'est rien d'autre qu'une simple fonction.

Considérons la suite $(u_n)$ définie pour tout entier $n$ par $u_n = n^2 - 3n$. Pour définir $(u_n)$, on définit la fonction associée :

def suite(n): return n**2 - 3*n

Il ne nous reste plus qu'à calculer des termes et à les afficher :

def suite(n): return n**2 - 3*n print(suite(10)) # Calcul de u_10 print(suite(37)) # Calcul de u_37

Suite définie par une relation de récurrence

Considérons la suite $(u_n)$ définie pour tout entier naturel $n$ par : $$\left\{ \begin{matrix} u_0 &=& 1 \\ u_{n+1} &=& 3u_n + 2 \end{matrix} \right.$$ Si on veut calculer le terme $u_8$, il est nécessaire de calculer tous les termes précédents $u_7$, $u_6$, ... On pourrait alors écrire :

u0 = 1 u1 = 3*u0 + 2 u2 = 3*u1 + 2 u3 = 3*u2 + 2 u4 = 3*u3 + 2 u5 = 3*u4 + 2 u6 = 3*u5 + 2 u7 = 3*u6 + 2 u8 = 3*u7 + 2 print(u8)

Ça fonctionne, mais en plus d'être long, cela nous oblige à définir plein de variables pas forcément utiles. En effet, il est ici préférable de ré-affecter la valeur d'une seule et même variable u qui va prendre les valeurs successives des termes de la suite :

u = 1 u = 3*u + 2 # Ici, la nouvelle valeur de u sera 3*1 + 2 = 5 u = 3*u + 2 # Là, ce sera 3*5 + 2 = 17 u = 3*u + 2 u = 3*u + 2 u = 3*u + 2 u = 3*u + 2 u = 3*u + 2 u = 3*u + 2 print(u)

Cette dernière façon de faire est moins claire, car on risque d'oublier ou de rajouter une ligne de calcul. Mais comme toutes ces lignes sont identiques, on peut utiliser une simple boucle itérative for n in range(N)N est le nombre d'itérations (de répétitions) de notre boucle :

u = 1 for n in range(8): u = 3*u + 2 print(u)

Il devient alors facile de calculer n'importe quel terme de la suite, en modifiant simplement la valeur dans le range.

Peut-on créer une fonction pour calculer n'importe quel terme de la suite ?

Bien sûr ! Il suffit de procéder de la manière suivante :

def suite(N): u = 1 for n in range(N): u = 3*u + 2 return u

De cette façon, la valeur de N donnée à la fonction va adapter le nombre d'itérations dans la boucle.

Le code ci-dessus n'affiche aucun résultat, car il ne contient que la définition de la fonction.
Pour afficher un terme de la suite, on affiche la valeur souhaitée avec print après la définition de la fonction :

def suite(N): u = 1 for n in range(N): u = 3*u + 2 return u print(suite(10)) # Affichage de u10

Recherche de seuil

Considérons la suite $(u_n)$ définie pour tout entier naturel $n$ par $u_n = 1 + \,2^n$.

On peut démontrer que $(u_n)$ est croissante et diverge vers $+\infty$ : à partir d'un certain rang, les termes de la suite vont dépasser (par exemple) 1 000 000.

Pour déterminer le plus petit entier naturel $n$ tel que $u_n \geq$ 1 000 000, on peut alors utiliser le programme Python suivant :

n = 0 while 1 + 2**n < 1000000: n = n + 1 print(n)

L'idée est simple : on incrémente la valeur de $n$ tant que la valeur de $1 + 2^n$ ne dépasse 1 000 000.

Et si la suite est définie par récurrence ?

Dans ce cas, il faut considérer une variable u contenant les valeurs de la suite. Par exemple, avec : $$\left\{ \begin{matrix} u_0 &=& 1 \\ u_{n+1} &=& 3u_n + 2 \end{matrix} \right.$$ On peut montrer que $(u_n)$ est croissante et diverge verrs $+\infty$. Pour déterminer le plus petit entier naturel $n$ tel que $u_n \geq$ 1 000 000, on ferait :

n = 0 u = 1 while u < 1000000: u = 3*u + 2 n = n + 1 print(n)

Dans ce cas, la condition porte sur la valeur de u et non plus n !

Sommes de termes

Lorsque l'on souhaite calculer non plus simplement les termes mais la sommes des termes d'une suite, il suffit de créer un accumulateur : c'est une simple variable, généralement nommée S pour Somme, initialisée à la valeur 0.

Exemple 1 : calcul de $1 + 2 + 3 + \ldots + 100$.

On peut bien entendu faire de la façon suivante :

S = 0 S = S + 1 S = S + 2 S = S + 3 ... S = S + 100

Mais une boucle est bien plus adaptée !

S = 0 for n in range(1, 101): S = S + n print(S)

Dans le range, il faut écrire 101 et non 100 !

On peut vérifier le résultat précédent avec la formule $1 + 2 + \ldots + n = \frac{n(n+1)}{2}$

Exemple 2 : calcul de $u_0 + u_1 + u_2 + \ldots + u_{10}$ avec $u_0 = 1$ et $u_{n+1} = 3u_n + 2$.

Dans le cas où la suite est définie par récurrence, on procède de la même manière mais en calculant termes à termes les valeurs de la suite.

u = 1 S = 0 for n in range(11): S = S + u u = 3*u + 2 print(S)

Comme $n$ varie entre 0 et 10, il faut écrire 11 dans le range (au total, il y a bien 11 termes à sommer).

L'ordre des instructions dans la boucle est important : on commence par ajouter la valeur courante de u à S puis on calcule la nouvelle valeur de u. L'inverse créerait un décalage dans le calcul de la somme.

Dernière mise à jour : 17 Avr. 2023, 22:38:47