Recherche de seuils - Python

information-icon

Si tu es un lycéen en terminale, tu dois déjà avoir planifié tes révisions pour ton baccalauréat 2025. Si ce n’est pas le cas, tu peux te baser sur notre programme de révision en le planifiant en fonction des dates du bac 2025 ou des coefficients des matières … 💪

Introduction :

Dans cette fiche, nous allons voir comment programmer en Python un algorithme de seuil pour une suite numérique, c’est-à-dire un algorithme qui permet de donner le rang à partir duquel les termes de la suite respectent une condition donnée.

Par exemple, pour une suite strictement décroissante, qui diverge vers $-\infty$, nous souhaitons déterminer le rang à partir duquel les termes seront tous strictement inférieurs à une valeur donnée.
Nous commencerons donc par traiter un tel exemple. Puis, pour être complets, nous traiterons aussi le cas d’une suite strictement croissante et majorée – le principe restera toutefois le même. Enfin, un petit exercice d’application conclura le propos.

Dans les deux cas, nous travaillerons avec des suites définies par récurrence, dites arithmético-géométriques. Nous en donnerons ensuite la définition explicite, pour montrer comment alors simplifier l’algorithme.

Suite strictement décroissante qui diverge vers $-\infty$

Prérequis

Nous considérons la suite $(u_n)$ définie pour tout entier naturel $n$ par :

$$\begin{cases} u_0=1 \\ u_{n+1}=1,5u_n-2 \end{cases}$$

Nous admettons que $(u_n)$ :

  • est strictement décroissante ;
  • diverge vers $-\infty$.

Nous cherchons donc à connaître le rang $n_0$ à partir duquel les termes de la suite sont strictement inférieurs à un réel donné $m$.

Algorithme

Nous allons tout simplement demander au programme de calculer successivement les termes de la suite, en partant de $u_0=1$, de s’arrêter dès que le dernier terme calculé est strictement inférieur à la valeur indiquée, et d’afficher le rang de ce terme.

  • Commençons par définir notre fonction, que nous nommons $\purple{\text{ seuil\textunderscore dec\textunderscore div}}$, qui prendra en paramètre $\purple{\text{m}}$, le nombre auquel les termes de la suite devront être inférieurs.

$\text{def seuil\textunderscore dec\textunderscore div(m):}$

Puis, nous initialisons nos variables :

  • Nous considérons la variable $\purple{\text{n}}$, qui contiendra les rangs successifs de la suite.
  • Nous y assignons d’abord la valeur $n=0$.
  • Puis nous considérons la variable $\purple{\text{u}}$ qui contiendra la valeur des termes successifs de la suite (dont le rang sera donné par $\purple{\text{n}}$).
  • Nous y assignons pour commencer la valeur de $u_0=1$.

$\begin{aligned} &\text{n = 0} \\ &\text{u = 1} \end{aligned}$
  • Ce que nous souhaitons, c’est que l’algorithme calcule les termes successifs de $(u_n)$ tant qu’ils sont supérieurs ou égaux à $\purple{\text{m}}$, et qu’il s’arrête au premier terme strictement inférieur à $\purple{\text{m}}$.
  • Nous utilisons pour cela l’instruction $\purple{\text{while}}$, avec la condition souhaitée.

$\text{while u >= m:}$
bannière attention

Attention

Nous voulons savoir quand les termes de la suite deviendront inférieurs à $\purple{\text{m}}$, nous calculons donc les termes tant que ce n’est pas le cas.

  • Il faut ainsi bien faire attention au fait que la condition de $\purple{\text{while u >= m}}$ est le contraire de ce que nous cherchons : $u_n < m$.

À l’intérieur de la boucle, nous allons donc calculer le terme suivant de la suite :

  • Nous commençons par incrémenter $\purple{\text{n}}$, pour indiquer que nous sommes passés au terme suivant.
  • Puis nous calculons, grâce à la définition de la suite, le terme suivant.

$\begin{aligned} &\text{n = n + 1} \\ &\text{u = 1.5 }^{\ast}\text{ u - 2} \end{aligned}$
  • Quand l’algorithme sera sorti de la boucle, la variable $\purple{\text{n}}$ contiendra donc le plus petit entier $n_0$ tel que : $u_{n_0} < \purple{\text{m}}$.
  • Nous lui demandons donc d’afficher la valeur de $\purple{\text{n}}$.

$\text{print(n)}$
  • Notre programme est terminé :

$\begin{aligned} \textcolor{#A9A9A9}{\text{1}}&\quad\text{def seuil\textunderscore dec\textunderscore div(m):} \\ \textcolor{#A9A9A9}{\text{2}}&\quad\qquad\text{n = 0} \\ \textcolor{#A9A9A9}{\text{3}}&\quad\qquad\text{u = 1} \\ \textcolor{#A9A9A9}{\text{4}}&\quad\qquad\text{while u >= m:} \\ \textcolor{#A9A9A9}{\text{5}}&\quad\qquad\qquad\text{n = n + 1} \\ \textcolor{#A9A9A9}{\text{6}}&\quad\qquad\qquad\text{u = 1.5 }^{\ast}\text{ u - 2} \\ \textcolor{#A9A9A9}{\text{7}}&\quad\qquad\text{print(n)} \end{aligned}$
bannière exemple

Exemple

Nous souhaitons connaître le rang à partir duquel les termes de $(u_n)$ sont strictement inférieurs à $-1\,000$.
Nous entrons donc la commande $\purple{\text{seuil\textunderscore dec\textunderscore div(-1000)}}$.

  • La fonction affichera en retour : $15$.

Ce que nous interprétons mathématiquement ainsi : pour tout $n \geq 15$ :

$$u_n < -1\,000$$

Remarque : si nous entrons en paramètre $\purple{\text{m}} > u_0$, la boucle ne sera pas exécutée et la fonction renverra $0$, i.e. tous les termes de la suite vérifient la condition.

bannière astuce

Astuce

Admettons que le terme général de $(u_n)$ est donné, pour tout entier naturel $n$, par :

$$u_n=-3\times 1,5^n+4$$

  • Remarquons au passage que cette définition explicite permet de montrer :
  • que la limite de $(u_n)$ est $-\infty$ (par le théorème de la limite de $(q^n)$, avec $q > 1$) ;
  • que, pour tout entier naturel $n$, $u_{n+1}-u_n=-1,5^{n+1} < 0$, autrement dit, que $(u_n)$ est strictement décroissante.

Nous pouvons alors éviter la création de la variable $\purple{\text{u}}$, puisque la seule connaissance du rang $n$ nous permet de connaître la valeur de $u_n$.

  • Et nous intégrons alors dans la condition de $\purple{\text{while}}$ le calcul de $u_n$ :

$\begin{aligned} \textcolor{#A9A9A9}{\text{1}}&\quad\text{def seuil\textunderscore dec\textunderscore div(m):} \\ \textcolor{#A9A9A9}{\text{2}}&\quad\qquad\text{n = 0} \\ \textcolor{#A9A9A9}{\text{3}}&\quad\qquad\text{while -3 }^\ast\text{ 1.5}^{\ast\ast}\text{n + 4 >= m:} \\ \textcolor{#A9A9A9}{\text{4}}&\quad\qquad\qquad\text{n = n + 1} \\ \textcolor{#A9A9A9}{\text{5}}&\quad\qquad\text{print(n)} \end{aligned}$

Suite strictement croissante et majorée

Prérequis

Nous considérons la suite $(v_n)$ définie pour tout entier naturel $n$ par :

$$\begin{cases} v_0=2 \\ v_{n+1}=0,8v_n+5 \end{cases}$$

Nous admettons que $(v_n)$ :

  • est strictement croissante ;
  • est majorée par $25$ ;
  • converge vers $25$.

Nous cherchons donc à connaître le rang $n_0$ à partir duquel les termes de la suite sont strictement supérieurs à un réel donné $m$.

Algorithme

Cette fois, nous allons demander au programme de calculer successivement les termes de la suite, en partant de $v_0=2$, de s’arrêter dès que le dernier terme calculé est strictement supérieur à la valeur indiquée, et d’afficher le rang de ce terme.

  • Nous nommons notre fonction $\purple{\text{ seuil\textunderscore crois\textunderscore maj}}$ et elle prendra aussi en paramètre $\purple{\text{m}}$, mais ce sera cette fois le nombre auquel les termes de la suite devront être supérieurs.

$\text{def seuil\textunderscore crois\textunderscore maj(m):}$

Nous allons procéder de même que pour la suite $(u_n)$.

  • Mais, attention, nous avons dit en préambule que $(v_n)$ est majorée par $25$.
    Cela signifie que, si le paramètre $\purple{\text{m}}$ entré est supérieur ou égal à $25$ et que nous n’avons pas prévu le cas, alors l’algorithme tournera ad infinitum, jusqu’à ce qu’on l’arrête manuellement.
  • Nous vérifions donc que le $\purple{\text{m}}$ entré est bien strictement inférieur à $25$, au moyen d’une condition :

$\text{if m < 25:}$

Comme tout à l’heure, nous initialisons les variables (nous changeons l’ordre cette fois, pour montrer qu’il n’est pas important dans ce cas) :

  • Nous assignons à $\purple{\text{v}}$ la valeur de $v_0=2$.
  • Nous assignons à $\purple{\text{n}}$ le rang $0$.

$\begin{aligned} &\text{v = 2} \\ &\text{n = 0} \\ \end{aligned}$
  • Dans le cas de $(v_n)$, qui est strictement croissante, nous souhaitons que l’algorithme s’arrête dès que le dernier terme calculé est strictement supérieur à $\purple{\text{m}}$.
  • Nous utilisons l’instruction $\purple{\text{while}}$, en faisant bien attention à la condition associée : la boucle s’exécute tant que le dernier terme calculé est inférieur ou égal à $\purple{\text{m}}$.

$\text{while v <= m:}$

Selon le même principe que dans la partie 1, mais là aussi en changeant l’ordre, qui n’est pas non plus important (à vous de voir la logique que vous préférez) :

  • Nous calculons le terme suivant.
  • Nous incrémentons $\purple{\text{n}}$.

$\begin{aligned} &\text{v = 0.8 $^\ast$ v + 5} \\ &\text{n = n + 1} \end{aligned}$
  • Au sortir de la boucle, $\purple{\text{n}}$ contiendra le plus petit entier $n_0$ tel que : $v_{n_0} > \purple{\text{m}}$.
  • C’est cette valeur qui nous intéresse.

$\text{print(n)}$
  • Nous allons maintenant dire au programme ce qu’il doit faire si le $\purple{\text{m}}$ entré est supérieur ou égal à $25$ :

$\text{else:}$
  • Et, dans ce cas, nous demandons simplement à l’algorithme de rappeler que la suite est majorée par $25$ et qu’aucun terme de $(u_n)$ ne sera strictement supérieur au $\purple{\text{m}}$ entré :

$\begin{aligned} & \text{print($^{\backprime\backprime}$La suite est majorée par 25, aucun} \\ & \qquad \text{terme ne sera strictement supérieur à$^{\prime\prime}$,} \\ & \qquad \text{m)} \end{aligned}$
  • L’algorithme est terminé :

$\begin{aligned} \textcolor{#A9A9A9}{\text{1}}&\quad \text{def seuil\textunderscore crois\textunderscore maj(m):} \\ \textcolor{#A9A9A9}{\text{2}}&\quad\qquad\text{if m < 25:} \\ \textcolor{#A9A9A9}{\text{3}}&\quad\qquad\qquad\text{v = 2} \\ \textcolor{#A9A9A9}{\text{4}}&\quad\qquad\qquad\text{n = 0} \\ \textcolor{#A9A9A9}{\text{5}}&\quad\qquad\qquad\text{while v <= m:} \\ \textcolor{#A9A9A9}{\text{6}}&\quad\qquad\qquad\qquad\text{v = 0.8 $^\ast$ v + 5} \\ \textcolor{#A9A9A9}{\text{7}}&\quad\qquad\qquad\qquad\text{n = n + 1} \\ \textcolor{#A9A9A9}{\text{8}}&\quad\qquad\qquad\text{print(n)} \\ \textcolor{#A9A9A9}{\text{9}}&\quad\qquad\text{else:} \\ \textcolor{#A9A9A9}{\text{10}}&\quad\qquad\qquad \text{print($^{\backprime\backprime}$La suite est majorée par 25, aucun} \\ &\quad\qquad\qquad \text{terme ne sera strictement supérieur à$^{\prime\prime}$,} \\ &\quad\qquad\qquad \text{m)} \end{aligned}$
bannière exemple

Exemple

Nous souhaitons connaître le rang à partir duquel les termes de $(v_n)$ sont strictement supérieur à $24,99$.
Nous entrons donc la commande $\purple{\text{seuil\textunderscore crois\textunderscore maj(24.99)}}$.

  • La fonction affichera en retour : $35$.

C’est-à-dire que, pour tout $n \geq 35$ :

$$24,99 < v_n < 25$$

Remarque : si nous entrons en paramètre $\purple{\text{m}} < v_0$, la boucle ne sera pas exécutée et la fonction renverra $0$, i.e. tous les termes de la suite vérifient la condition.

bannière astuce

Astuce

Admettons ici que le terme général de $(v_n)$ est donné, pour tout entier naturel $n$, par :

$$v_n=-23\times 0,8^n+25$$

  • Remarquons là aussi que cette définition explicite permet de montrer :
  • que la limite de $(v_n)$ est $25$ (par le théorème de la limite de $(q^n)$, avec $0 < q < 1$) ;
  • que, pour tout entier naturel $n$, $v_{n+1}-v_n=4,6\times 0,8^n > 0$, autrement dit, que $(v_n)$ est strictement croissante.

Sachant cela, vous pouvez maintenant adapter et simplifier l’algorithme pour qu’il donne le même résultat.

Exercice : suite strictement décroissante et minorée

Soit la suite $(w_n)$ définie pour tout entier naturel $n$ par :

$$\begin{cases} w_0=50 \\ w_{n+1}=0,7w_n+3 \end{cases}$$

On admet que $(w_n)$ :

  • est strictement décroissante ;
  • est minorée par $10$ ;
  • converge vers $10$.

Créer une fonction $\purple{\text{seuil\textunderscore dec\textunderscore min}}$ (ou du nom qui vous plaira) qui retourne le rang à partir duquel les termes de $(w_n)$ sont strictement inférieurs à un réel $m$ donné.

Voici des exemples de retour, pour que vous puissiez vérifier que votre algorithme fonctionne :

  • $\purple{\text{seuil\textunderscore dec\textunderscore min(15)}}$ affiche : $6$.
  • $\purple{\text{seuil\textunderscore dec\textunderscore min(10.5)}}$ affiche : $13$.
  • $\purple{\text{seuil\textunderscore dec\textunderscore min(10.1)}}$ affiche : $17$.
  • $\purple{\text{seuil\textunderscore dec\textunderscore min(10.001)}}$ affiche : $30$.
  • $\purple{\text{seuil\textunderscore dec\textunderscore min(10.0001)}}$ affiche : $37$.
  • $\purple{\text{seuil\textunderscore dec\textunderscore min(9.5)}}$ affiche : « La suite est minorée par $10$, aucun terme ne sera strictement inférieur à $9.5$ ».
Ce contenu est réservé à nos inscrits. Il reste 50% à lire.
Inscrivez-vous gratuitement pour lire la suite
Inscrivez-vous pour lire la suite et accéder à nos vidéos, quiz, exercices, méthodes… Tout ce qu’il faut pour augmenter sa moyenne. 😉