Mathjax

jeudi 22 juin 2023

Suites arithmético-géométriques (3) : créer des exercices sur les suites arithmético-géométriques

 Ce billet fait suite à :

Nous allons voir le cas général des suites arithmético-géométriques dans le cas réel (ou complexe). Cela nous permettra d'obtenir un algorithme de construction d'exercices et de corrigés. 
Des scripts python permettant d'automatiser cette tâche en générant du code $\LaTeX$ sont disponibles sur cette page. 

La propriété qui assure que tout va fonctionner

Propriété 1. 
Soit une suite arithmético-géométrique définie par $u_0=c $ et pour tout $n\in\mathbb N$, $u_{n+1}=au_n+b$
 
$$(\star) \ \ \left\{\begin{array}{rclr}u_0&=&c\\u_{n+1}&=&au_n+b& (n\in\mathbb N)\\ \end{array}\right. $$

avec $a,b,c $ réels (ou complexes, ou dans un corps $K$...).

Alors si $a\neq 1$, la suite $(w_n) $ définie par $w_{n}=\frac{b}{1-a}-u_n$ est une suite géométrique de raison $a$.

Remarque 1. Si $a=1$, $u_{n+1}=u_n+b $ est simplement une suite arithmétique. Son terme général est donné par $u_n=u_0+nb$.

Remarque 2. Si $a\neq 1$, $w_n=\frac{b}{1-a}-u_n $ implique que $ u_n=\frac{b}{1-a}-w_n$.

Mais puisque $(w_n)$ est géométrique de raison $a$, on obtient $$w_n=w_0a^n=\left(\frac{b}{1-a}-u_0\right)a^n$$

Donc

$$u_n=\frac{b}{1-a}-\left(\frac{b}{1-a}-u_0\right)a^n=u_0a^n+b\frac{1-a^n}{1-a} $$

Pour résumer nous avons la propriété

Propriété 2. Soit (u_n) une suite arithmético-géométrique définie  comme dans $(\star)$, avec $a\neq 1$.

Alors nous avons :

$$u_n=ca^n+b\frac{1-a^n}{1-a}$$

Remarque 3.  Si on fait tendre $a$ vers $1$ dans l'expression précédente qu'obtient-on ?

Tout d'abord, le calccul de limite pose problème car $1-a^n $ et $1-a $ tendent tous deux vers $0$ lorsque $a\rightarrow +\infty$.

Mais, pour $n\geq 1$, on a pour $a\neq 1$,

$$\frac{1-a^n}{1-a}=1+a+\ldots+a^{n-1}$$

D'où

$$\lim_{a\rightarrow 1} \frac{1-a^n}{1-a}=\lim_{a\rightarrow 1}  1+a+\ldots+a^{n-1}=\underbrace{1+1+\ldots+1}_{n\ \mathrm{termes}}=n $$

Ainsi

$$\lim_{a\rightarrow 1} u_0a^n+b\frac{1-a^n}{1-a} = u_0+nb$$

On retrouve donc le cas particulier où $a=1$.

Remarque 4. D'après le billet Suites arithmético-géométriques (2) : étude complète de l'exemple, la limite de $(u_n)$ est un point fixe de $f$ définie par $f(x)=ax+b $.

Or $ax+b=x $ n'a qu'une seule solution $s=\frac{b}{1-a}$. 

Au regard de la propriété à démontrer on voit que $(u_n)$ converge si et seulement si $(w_n)$ converge. De plus puisque $(w_n)$ est une suite géométrique de raison $\neq 1 $, celle-ci ne peut  converger que vers 0, et cela si et seulement si $-1<a<1$.

Dans ce cas, on a

$$\lim_n u_n = \lim_n \frac{b}{1-a}-w_n=\frac{b}{1-a}$$

On retrouve le point fixe de la fonction $f$. 


Démonstration. Notons $s=\frac{b}{1-a}$. D'après les remarques précédentes, on a $f(s)=as+b=s $.

On a $w_n=s-u_n $.

Ainsi pour tout $n\in \mathbb N $,

$$w_{n+1}=s-u_{n+1}=s-(au_n+b)=as+b-(au_n+b)=a(s-u_n)=aw_n $$

Ainsi $(w_n) $ est une suite géométrique de raison $a$.

On peut créer une fonction Python permettant d'obtenir $s$ en fonction de $a$ et $b$. Elle peut permettre dans un premier temps de créer pour une suite arithmético-géométrique donnée, la suite auxiliaires $(w_n)$ $ correspondante.

from fractions import Fraction


def suiteAG(a, b):  # u_{n+1}=au_n+b, a doit être différent de 1
    # retourne le point fixe de f où f(x)=ax+b
    if a == 1:
        raise Exception("a doit être différent de 1")
    else:
        return (Fraction(b, 1 - a))

Pour appliquer cette fonction à notre exemple, (voir article Suites arithmético-géométriques (2) : étude complète de l'exemple) ajoutons  $\verb|print(suiteAG(Fraction(1,3),2))|$ à la suite du code. L'interpretteur affiche alors $3$. 
On a donc ici un moyen rapide de fabriquer un exercice dont l'énoncé serait le suivant :

Enoncé. 
Soit $(u_n)$ la suite définie par $u_0=\frac 1 2 $ et telle que $u_{n+1}=\frac 1 3 u_n+2 $.

  1. On pose pour tout $n\in\mathbb N$, $w_n=3-u_n$. Montrer que $(w_n) $ est une suite géométrique de raison $\frac 1 3$. 
  2. Soit $n\in\mathbb N$. Exprimer $w_n$ en fonction de $n$. En déduire $u_n $ en fonction de $n$.
  3. La suite $(u_n)$ converge-t-elle ? Si oui, déterminer sa limite.


En changeant les paramètres 
$a,b$ de cet énoncé (où $u_{n+1}=au_n+b $), ainsi que la valeur de $s$ calculée par le programme, on obtient un énoncé similaire. 
L'intérêt d'utiliser la fonction Python ci-dessus est qu'elle permet de générer beaucoup d'exercices, éventuellement de manière aléatoire, tout en travaillant avec des rationnels grâce au type $\verb|Fraction|$ du module $\verb|fractions|$.

Pour obtenir ces exercices, on peut ensuite soit travailler à la main, en remplaçant chaque valeur à modifier, soit créer un script pour le faire à notre place, par exemple en modifiant du code $\LaTeX $.

De même, on peut adapter ou générer des corrigés type pour chaque exercice créé.

Exercice classique de type niveau 1ère, terminale 

Enoncé type

Ci-dessous un énoncé type où les données aaa, bbb, ccc sont à modifier et la valeur intermédiaire sss sont à calculer.






Voici le code $\LaTeX $ permettant de l'obtenir



J'ai nommé le fichier  contenant ce code entree.tex dans un répertoire  m_tex/t1/e/ à l'intérieur du répertoire contenant mon code Python (voir ci-dessous). 
Voici le code Python permettant de modifier le code $\LaTeX$ pour obtenir un énoncé faisable en classe.


from fractions import Fraction def suite_AG(a, b): # u_{n+1}=au_n+b, a doit être différent de 1 # retourne le point fixe de f où f(x)=ax+b if a == 1: raise Exception("a doit être différent de 1") else: return (Fraction(b, 1 - a)) def frac_en_tex(frac): num, den = frac.numerator, frac.denominator if den == 1: return (str(num)) else: return ("\\" + "frac{" + str(num) + "}{" + str(den) + "}") def enonce_exo_type_1(a, b, c): s = suite_AG(a, b) s = frac_en_tex(s) a,c = frac_en_tex(a), frac_en_tex(c) if b >= 0: b="+"+frac_en_tex(b) else: b="-"+frac_en_tex(-b) kv = {"aaa": a, "+ bbb": b, "ccc": c, "sss": s} with open('m_tex/t1/e/entree.tex', 'r') as myfile: text = myfile.read() for key, value in kv.items(): text = text.replace(key, value) with open('m_tex/t1/e/sortie.tex', 'w') as output: output.write(text) enonce_exo_type_1(Fraction(2,5),Fraction(-7,2),-1)

Résultat


En executant ce script, on obtient le code $\LaTeX$ suivant




dont la compilation donne ceci 



Etc.

De la même façon, on peut générer un corrigé type correspondant à cet énoncé.
Je mettrai sur une page quelques exemple d'énoncés et les corrigés correspondants.


Et après

Tout ça est assez satisfaisant, mais les exercices créés manquent un peu d'originalité. Dans de prochains articles, j'aimerai m'intéresser aux suites telles $u_{n+1}=au_n+b(n) $ où $b$ est un polynome.

En attendant le lecteur intéressé par le sujet pourra lire la suite directe de ce présent billet : Suites arithmético-géométriques (4) : encore une autre façon de trouver le terme général.

Aucun commentaire:

Enregistrer un commentaire