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 , 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
Suite strictement décroissante qui diverge vers
Prérequis
Prérequis
Nous considérons la suite définie pour tout entier naturel par :
Nous admettons que :
- est strictement décroissante ;
- diverge vers .
Nous cherchons donc à connaître le rang à partir duquel les termes de la suite sont strictement inférieurs à un réel donné .
Algorithme
Algorithme
Nous allons tout simplement demander au programme de calculer successivement les termes de la suite, en partant de , 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 , qui prendra en paramètre , le nombre auquel les termes de la suite devront être inférieurs.
Puis, nous initialisons nos variables :
- Nous considérons la variable , qui contiendra les rangs successifs de la suite.
- Nous y assignons d’abord la valeur .
- Puis nous considérons la variable qui contiendra la valeur des termes successifs de la suite (dont le rang sera donné par ).
- Nous y assignons pour commencer la valeur de .
- Ce que nous souhaitons, c’est que l’algorithme calcule les termes successifs de tant qu’ils sont supérieurs ou égaux à , et qu’il s’arrête au premier terme strictement inférieur à .
- Nous utilisons pour cela l’instruction , avec la condition souhaitée.
Nous voulons savoir quand les termes de la suite deviendront inférieurs à , 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 est le contraire de ce que nous cherchons : .
À l’intérieur de la boucle, nous allons donc calculer le terme suivant de la suite :
- Nous commençons par incrémenter , pour indiquer que nous sommes passés au terme suivant.
- Puis nous calculons, grâce à la définition de la suite, le terme suivant.
- Quand l’algorithme sera sorti de la boucle, la variable contiendra donc le plus petit entier tel que : .
- Nous lui demandons donc d’afficher la valeur de .
- Notre programme est terminé :
Nous souhaitons connaître le rang à partir duquel les termes de sont strictement inférieurs à .
Nous entrons donc la commande .
- La fonction affichera en retour : .
Ce que nous interprétons mathématiquement ainsi : pour tout :
Remarque : si nous entrons en paramètre , la boucle ne sera pas exécutée et la fonction renverra , i.e. tous les termes de la suite vérifient la condition.
Admettons que le terme général de est donné, pour tout entier naturel , par :
- Remarquons au passage que cette définition explicite permet de montrer :
- que la limite de est (par le théorème de la limite de , avec ) ;
- que, pour tout entier naturel , , autrement dit, que est strictement décroissante.
Nous pouvons alors éviter la création de la variable , puisque la seule connaissance du rang nous permet de connaître la valeur de .
- Et nous intégrons alors dans la condition de le calcul de :
Suite strictement croissante et majorée
Suite strictement croissante et majorée
Prérequis
Prérequis
Nous considérons la suite définie pour tout entier naturel par :
Nous admettons que :
- est strictement croissante ;
- est majorée par ;
- converge vers .
Nous cherchons donc à connaître le rang à partir duquel les termes de la suite sont strictement supérieurs à un réel donné .
Algorithme
Algorithme
Cette fois, nous allons demander au programme de calculer successivement les termes de la suite, en partant de , 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 et elle prendra aussi en paramètre , mais ce sera cette fois le nombre auquel les termes de la suite devront être supérieurs.
Nous allons procéder de même que pour la suite .
- Mais, attention, nous avons dit en préambule que est majorée par .
Cela signifie que, si le paramètre entré est supérieur ou égal à 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 entré est bien strictement inférieur à , au moyen d’une condition :
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 à la valeur de .
- Nous assignons à le rang .
- Dans le cas de , qui est strictement croissante, nous souhaitons que l’algorithme s’arrête dès que le dernier terme calculé est strictement supérieur à .
- Nous utilisons l’instruction , en faisant bien attention à la condition associée : la boucle s’exécute tant que le dernier terme calculé est inférieur ou égal à .
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 .
- Au sortir de la boucle, contiendra le plus petit entier tel que : .
- C’est cette valeur qui nous intéresse.
- Nous allons maintenant dire au programme ce qu’il doit faire si le entré est supérieur ou égal à :
- Et, dans ce cas, nous demandons simplement à l’algorithme de rappeler que la suite est majorée par et qu’aucun terme de ne sera strictement supérieur au entré :
- L’algorithme est terminé :
Nous souhaitons connaître le rang à partir duquel les termes de
Nous entrons donc la commande
- La fonction affichera en retour :
.35 35
C’est-à-dire que, pour tout
Remarque : si nous entrons en paramètre
Admettons ici que le terme général de
- Remarquons là aussi que cette définition explicite permet de montrer :
- que la limite de
est( v n ) (v_n) (par le théorème de la limite de25 25 , avec( q n ) (q^n) ) ;0 < q < 1 0 < q < 1 - que, pour tout entier naturel
,n n , autrement dit, quev n + 1 − v n = 4 , 6 × 0 , 8 n > 0 v{n+1}-vn=4,6\times 0,8^n > 0 est strictement croissante.( v n ) (v_n)
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
Exercice : suite strictement décroissante et minorée
Soit la suite
On admet que
- est strictement décroissante ;
- est minorée par
;10 10 - converge vers
.10 10
Créer une fonction
Voici des exemples de retour, pour que vous puissiez vérifier que votre algorithme fonctionne :
affiche :seuildecmin(15) \purple{\text{seuil\textunderscore dec\textunderscore min(15)}} .6 6 affiche :seuildecmin(10.5) \purple{\text{seuil\textunderscore dec\textunderscore min(10.5)}} .13 13 affiche :seuildecmin(10.1) \purple{\text{seuil\textunderscore dec\textunderscore min(10.1)}} .17 17 affiche :seuildecmin(10.001) \purple{\text{seuil\textunderscore dec\textunderscore min(10.001)}} .30 30 affiche :seuildecmin(10.0001) \purple{\text{seuil\textunderscore dec\textunderscore min(10.0001)}} .37 37 affiche : « La suite est minorée parseuildecmin(9.5) \purple{\text{seuil\textunderscore dec\textunderscore min(9.5)}} , aucun terme ne sera strictement inférieur à10 10 ».9.5 9.5