Méthodes itératives : Suites et Matrices
Méthodes itératives : Suites et Matrices
a) Recopier et compléter le programme Scilab suivant qui permet de représenter les cent premiers
termes de la suite (un )n∈N∗ :
1 U = zeros(1,100)
2 U(1) = 1
3 for n = 1 : 99
4 U(n+1) = ––––––
5 end
6 plot(U,"+")
Démonstration.
1 U = zeros(1,100)
2 U(1) = 1
3 for n = 1 : 99
4 U(n+1) = 1 - exp( U(n) )
5 end
6 plot(U,"+")
Démonstration.
D’après la représentation graphique, la suite (un ) semble être convergente, de limite nulle.
1
ECE2 2020-2021
1 X = 1:100
2 S = cumsum(U)
3 Y = log(X)
4 plot2d(X, S, -1)
5 plot2d(X, Y)
Démonstration.
• Le vecteur U contient les 100 premiers éléments de la suite (un ). L’opérateur cumsum permet de
somme cumulée de ce vecteur. Ainsi, S contient les 100 premières sommes partielles
calculer la P
de la série un .
P
• D’après le tracé obtenu, on peut émettre l’hypothèse que la série un est divergente. Plus
précisément, que Sn −→ +∞.
n→+∞
2
ECE2 2020-2021
ECRICOME − 2018
2 1 −2 1 −1 −1
• On considère les matrices : A = 0 3 0 et B = −3 3 −3.
1 −1 5 −1 1 1
3 3 1 1
On pose X0 = 0 , X1 = 0 , et pour tout n ∈ N : Xn+2 = A Xn+1 + B Xn .
−1 −2 6 6
a) Compléter la fonction ci-dessous qui prend en argument un entier n supérieur ou égal à 2 et qui
renvoie la matrice Xn :
Démonstration.
Détaillons les différents éléments présents dans cette fonction.
− En ligne 2 et 3, on définit les variables Xold et Xnew.
Ces deux variables sont initialement affectées aux valeurs X0 et X1 .
− En ligne 4 et 5, on stocke les matrices A et B dans les variables A et B.
− De la ligne 6 à la ligne 10, on met à jour les variables Xold et Xnew de sorte à ce qu’elles
contiennent les valeurs successives de la suite matricielle (Xn ).
6 for i = 2:n
7 Aux = Xold
8 Xold = Xnew
9 Xnew = 1/6 ? A ? Xold + 1/6 ? B ? Aux
10 end
Pour ce faire, on a introduit une variable auxiliaire Aux.
Détaillons le principe de cette boucle :
× avant le 1
er tour de boucle :
3
ECE2 2020-2021
Aux contient X1 ,
Aux = Xold
dernière valeur de Xold
Xold contient X2 ,
Xold = Xnew
dernière valeur de Xnew
Xnew contient X3 , valeur obtenue par
Xnew = 1/6 ? A ? Xold + 1/6 ? B ? Aux
la définition X3 = 61 AX2 + 16 BX1
× ...
× avant le (n − 1)ème tour de boucle :
11 res = Xnew
Commentaire
• Afin de permettre une bonne compréhension des mécanismes en jeu, on a détaillé la réponse
à cette question. Cependant, écrire correctement la fonction Scilab démontre la bonne com-
préhension et permet certainement d’obtenir tous les points alloués.
• On a démontré dans cette question que si, avant le ième tour de boucle :
Cette propriété est ce qu’on appelle un invariant de boucle. Elle permet d’assurer la cor-
rection de la fonction implémentée et notamment le fait qu’à l’issue du dernier tour de boucle
la variable Xnew contient Xn .
• Il est à noter que si on teste la fonction avec une valeur de n strictement inférieure à 2, alors
on n’entre pas dans la boucle (l’instruction 2:n crée une matrice ligne vide). Dans ce cas, la
variable Xnew n’est pas mise à jour et la variable res contient à la fin du programme X1 , soit
la valeur initialement affectée à Xnew. Ainsi, la fonction renvoie la bonne valeur aussi lorsque
la variable n prend la valeur 1.
4
ECE2 2020-2021
αn
• Dans l’exercice, il était noté Xn = βn et on démontrait, pour tout n ∈ N :
γn
n n−1 n
11 2 1 1 3 1
αn = + − + − −
6 3 2 2 2 3
n−1 n n n
1 2 1 4 11 2 1 3 1
βn = − − − et γn = − − − + −
2 3 2 3 6 3 2 2 3
b) La fonction précédente a été utilisée dans un script permettant d’obtenir graphiquement (voir
figure 1) les valeurs de αn , βn et γn en fonction de n.
Associer chacune des trois représentations graphiques à chacune des suites (αn )n∈N , (βn )n∈N ,
(γn )n∈N en justifiant votre réponse.
Démonstration.
Soit n ∈ N.
• D’après la question 5 :
n−1 n
1 2 1 4 4
βn = − − − −→ − ' −1, 33
2 3 2 3 n→+∞ 3
n−1 n
1 1 1 1
En effet, comme < 1 et − < 1 alors : lim = 0 et lim − = 0.
2 2 n→+∞ 2 n→+∞ 2
• On démontre de même, toujours d’après les expressions obtenues en question 5. :
11 11
αn −→ ' 1, 8 et γn −→ − ' −1, 8
n→+∞ 6 n→+∞ 6
5
ECE2 2020-2021
Commentaire
Il est possible de rédiger autrement.
La représentation graphique commençant à 2, on peut calculer :
14 11
α2 = , β2 = −1 et γ2 = −
6 6
ce qui permet d’associer chaque représentation graphique à la bonne suite.
EDHEC − 2019
4n (n!)2
• On définit la suite (un ) par : ∀n ∈ N, un = .
(2n + 1)!
On admet que, si t est un vecteur, la commande prod(t) renvoie le produit des éléments de t.
Compléter le script Scilab suivant afin qu’il permette de calculer et d’afficher la valeur de un pour
une valeur de n entrée par l’utilisateur.
1 n = input('entrez une valeur pour n : ')
2 x = 1:n
3 m = 2 ? n + 1
4 y = 1:m
5 v = ...........
6 w = ...........
7 u = ........... ? v ∧ 2 / w
8 disp(u)
Démonstration.
• Commentons tout d’abord le début du programme proposé.
× On commence par demander à l’utilisateur d’entrer une valeur pour l’entier n.
1 n = input('entrez une valeur pour n :')
× On stocke ensuite dans la variable x la matrice ligne contenant les entiers de 1 à n.
2 x = 1:n
× On stocke de plus dans la variable m la quantité 2n + 1.
3 m = 1 ? n + 1
× On stocke enfin dans la variable y la matrice ligne contenant les entiers de 1 à m, c’est-à-dire les
entiers de 1 à 2n + 1.
4 y = 1:m
• On cherche maintenant à stocker dans la variable u la valeur de un .
D’après la question 5.b) , pour tout n ∈ N :
4n (n!)2
un =
(2n + 1)!
6
ECE2 2020-2021
7 u = .......... ? v ∧ 2 / w
Par analogie avec la formule de la question 5.b) , on souhaite donc stocker dans la variable v la
valeur n! et dans la variable w la valeur (2n + 1)!.
× On cherche alors une commande permettant d’obtenir n! = 1 × · · · × n.
D’après l’énoncé, la commande prod(t) renvoie le produit des éléments de t.
La variable x contient les entiers de 1 à n. Ainsi, pour obtenir n!, on peut utiliser la commande :
prod(x). On obtient donc :
5 v = prod(x)
× De même, comme la variable y contient les entiers de 1 à 2n + 1, pour obtenir (2n + 1)!, on peut
utiliser la commande : prod(y). On obtient :
6 w = prod(y)
× Pour finir, on complète la ligne 7 de la façon suivante (toujours d’après la formule de 5.b) ) :
7 u = (4 ∧ n) ? v ∧ 2 / w
Commentaire
• On pouvait aussi stocker la valeur n! dans la variable v à l’aide d’une boucle for :
1 v = 1
2 for i = 1:n
3 v = v ? i
4 end
a) Compléter les commandes Scilab suivantes afin qu’elles permettent d’afficher un entier n pour
lequel un − n est inférieur ou égal à 10−4 .
1 n = 0
2 while ––––––
3 n = ––––––
4 end
5 disp(n)
Démonstration.
7
ECE2 2020-2021
• Afin de trouver un entier n tel que un − n 6 10−4 , il suffit de trouver N ∈ N tel que :
√
e− N
6 10−4
Commentaire
√
• La terminaison du programme présenté est assuré par le fait que e− n −→ 0. Ainsi,
√ n→+∞
pour tout ε > 0, il existe N ∈ N tel que : ∀n > N , e− n 6 ε.
C’est notamment vrai pour ε = 10−4 .
• L’énoncé original contenait une coquille sans gravité. En effet, la quesiton posée de-
mandait de trouver le premier n tel que vn est inférieur ou égal à 10−4 .
Or, la suite (vn ) n’est introduite qu’en question 4 .
Démonstration.
• On cherche à déterminer l’entier N précédent. Or :
√ √ (car x 7→ ln(x) est strictement
e− n 6 10−4 ⇔ − n 6 ln(10−4 ) = −4 ln(10)
croissante sur R∗+ )
√
⇔ n > 4 ln(10)
2 (car x 7→ x2 est strictement
⇔ n > 4 ln(10)
croissante sur [0, +∞[)
√
Ainsi, le premier entier vérifiant la relation : e− n 6 10−4 est l’entier N = (4 ln(10))2 .
8
ECE2 2020-2021
EML − 2016
x2 − x ln(x) si x 6= 0
(
• On considère la fonction f définie par : f (x) =
0 si x = 0
1
(
u0 = 2
et on définit la suite (un )n∈N∗ par :
∀n ∈ N, un+1 = f (un )
(on démontre que (un ) est croissante et qu’elle converge vers 1)
a) Écrire un programme en Scilab qui calcule et affiche un entier naturel N tel que :
1 − uN < 10−4
Démonstration.
1 n = 0
2 u = 1/2
3 while 1 - u >= 10 ∧ (-4)
4 u = u ∧ 2 - u ? log(u)
5 n = n + 1
6 end
7 disp(n)
EML − 2017
• On considère la fonction f : ]0, +∞[→ R définie par f : x 7→ ex − e ln(x).
u0 = 2
• On considère la suite réelle (un )n∈N définie par :
∀n ∈ N, un+1 = f (un )
a) Écrire un programme en Scilab qui, étant donné un réel A, renvoie un entier naturel N tel que
uN > A.
Démonstration.
1 A = input('A=')
2 N = 0
3 u = 2
4 while u < A
5 u = exp(u) - %e ? ln(u)
6 N = N + 1
7 end
8 disp(N)
Démonstration.
9
ECE2 2020-2021
P 1
• La série est à termes positifs.
n>1 f (n)
1
n2
1 1 1 n3 en 1
• De plus : = 3 n = o . En effet, 1 = = −→ 0.
f (n) n e n→+∞ n2 n2
n 3 en n en n→+∞
P 1
Or, d’après le critère de Riemann (2 > 1), la série 2
est convergente.
n>1 n
n 1 1
On démontre alors que : ∀n ∈ N∗ , S −
P
6 .
k=1 f (k) (e − 1) en
b) En déduire une fonction Scilab qui calcule une valeur approchée de S à 10−4 près.
Démonstration.
• Afin de calculer une valeur approchée de S à 10−4 près, il suffit de trouver n ∈ N∗ tel que :
1
6 10−4
(e − 1) en
1 n = 1
2 S = 1 / exp(1)
3 while 1 / ((exp(1)-1) ? exp(n)) > 10 ∧ (-4)
4 n = n + 1
5 S = S + 1 / (n ∧ 3 ? exp(n))
6 end
10
ECE2 2020-2021
Commentaire
1 −4 n 104
6 10 ⇔ e > ⇔ n > 4 ln(10) − ln(e − 1)
(e − 1) en (e − 1)
EML − 2018
• On pose : u0 = 4 et ∀n ∈ N, un+1 = ln(un ) + 2.
On devait démontrer les propriétés suivantes.
• ∀n ∈ N, un > b.
1
• ∀n ∈ N, un+1 − b 6 (un − b).
2
1
• ∀n ∈ N, 0 6 un − b 6 n−1 .
2
a) Écrire une fonction Scilab d’en-tête function u = suite(n) qui, prenant en argument un entier
n de N, renvoie la valeur de un .
Démonstration.
1 function u = suite(n)
2 u = 4
3 for k = 1:n
4 u = log(u) + 2
5 end
6 endfunction
2 u = 4
4 u = log(u) + 2
11
ECE2 2020-2021
Commentaire
• On décrit ici de manière précise les instructions afin d’aider le lecteur un peu moins
habile en Scilab.
Cependant, l’écriture du script démontre la compréhension de toutes les commandes en
question et permet sans doute d’obtenir la totalité des points alloués à cette question.
• Si on avait souhaité afficher tous les n premiers termes de la suite (un ), on aurait modifié
le script précédent de la façon suivante :
1 function u = suite(n)
2 u = zeros(1, n)
3 u(1) = 4
4 for k = 2:n
5 u(k) = log(u(k-1)) + 2
6 end
7 endfunction
b) Recopier et compléter la ligne 3 de la fonction Scilab suivante afin que, prenant en argument un
réel epsilon strictement positif, elle renvoie une valeur approchée de b à epsilon près.
1 function b = valeur_approchee(epsilon)
2 n = 0
3 while ...........
4 n = n + 1
5 end
6 b = suite(n)
7 endfunction
Démonstration.
• D’après la question 6.b) :
1
∀n ∈ N, 0 6 un − b 6
2n−1
1
S’il existe N ∈ N tel que 6 ε, on obtiendra par transitivité :
2n−1
0 6 uN − b 6 ε
EML − 2019
• On considère la fonction f définie sur ]0, +∞[ par :
1
∀t ∈ ]0, +∞[, f (t) = t +
t
• On introduit la suite (un )n∈N∗ définie par :
1 1
u1 = 1 et ∀n ∈ N∗ , un+1 = un + = f (n un )
n2 un n
12
ECE2 2020-2021
• Dans l’exercice, on devait démontrer la convergence de la suite (un ) vers un réel ` (qu’il ne fallait
pas déterminer). De plus, on devait démontrer :
1
∀p > 2, 0 6 ` − up 6 (∗)
p−1
a) Recopier et compléter les lignes 3 et 4 de la fonction Scilab suivante afin que, prenant en argument
un entier n de N∗ , elle renvoie la valeur de un .
1 function u=suite(n)
2 u = 1
3 for k = ..................
4 u = ..................
5 end
6 endfunction
Démonstration.
1 function u=suite(n)
2 u = 1
3 for k = 1:(n-1)
4 u = (1/n) ? (n?u + 1/(n?u))
5 end
6 endfunction
2 u = 1
• On met ensuite à jour u à l’aide d’une structure itérative (boucle for) avec les lignes 3 à 5.
3 for k = 1:(n-1)
4 u = (1/n) ? (n?u + 1/(n?u))
5 end
13
ECE2 2020-2021
Commentaire
• On décrit ici de manière précise les instructions afin d’aider le lecteur un peu moins
habile en Scilab. Cependant, l’écriture du script démontre la compréhension de toutes
les commandes en question et permet sans doute d’obtenir la totalité des points alloués
à cette question.
• On pouvait également coder la fonction f dans un script à part. On aurait alors obtenu
les deux programmes suivants :
1 function y=f(t)
2 y = t + 1/t
3 endfunction
1 function u=suite(n)
2 u = 1
3 for k = 1:(n-1)
4 u = (1/n) ? f(n?u)
5 end
6 endfunction
b) Déduire de la propriété (∗) une fonction Scilab qui renvoie une valeur approchée de ` à 10−4 près.
Démonstration.
• On cherche ici à trouver un entier N tel que uN est une valeur approchée de ` à 10−4 près.
Autrement dit, on souhaite exhiber N ∈ N tel que :
|` − uN | 6 10−4
1
• Or, d’après la question précédente : ∀p > 2, 0 6 ` − up 6 .
p−1
1
• Il suffit alors de trouver N ∈ N tel que : 6 10−4 .
N −1
Si c’est le cas, on obtient alors par transitivité :
0 6 ` − uN 6 10−4
1 function l = valeur_approchee()
2 n = 2
3 while 1 / (n-1) > 10 ∧ (-4)
4 n = n + 1
5 end
6 l = suite(n)
7 endfunction
14
ECE2 2020-2021
- Structure itérative
1
Les lignes 3 à 5 consistent à déterminer le plus petit entier n tel que 6 10−4 . On
n−1
1
doit donc comparer les valeurs successives de la suite au réel 10−4 jusqu’à ce
n − 1 n>2
1
que 6 10−4 . Autrement dit, on doit comparer ces valeurs successives à 10−4 tant que
n−1
1
> 10−4 . Pour cela on met en place une structure itérative (boucle while) :
n−1
3 while 1 / (n-1) > 10 ∧ (-4)
4 n = n + 1
- Fin du script
1
À la fin de cette boucle, on est assuré que : 6 10−4 (on itère tant que ce n’est pas le
n−1
cas).
Il reste alors à calculer la valeur approchée de ` : on l’obtient par le calcul de un où n est la
valeur obtenue à l’issue de cette boucle.
6 l = suite(n)
Commentaire
• Lorsqu’on écrit une boucle while, il est préférable
des’assurer en amont de sa termi-
1
naison. C’est bien le cas ici. En effet, la suite est convergente de limite 0.
n − 1 n>2
Ce qui signifie :
1
∀ε > 0, ∃n0 ∈ N, ∀n > n0 , −0 <ε
n−1
Ainsi, quelle que soit la précision ε > 0 choisie au départ (ici 10−4 ), on est toujours en
1
mesure de trouver un rang n0 à partir duquel on aura : < 10−4 .
n−1
• On pouvait déterminer, sans utiliser de boucle, un entier N tel que uN est une valeur
approchée à 10−4 près de `. Pour ce faire, on remarque :
1
6 10−4 ⇔ n − 1 > 104 ⇔ n > 104 + 1
n−1
ECRICOME − 2018
Pn 1
• Pour tout entier naturel n non nul, on pose : un = − ln(n).
k=1 k
• On démontrait que la suite (un ) était convergente, vers une limite notée γ ∈ R puis :
1
∀n ∈ N∗ , |un − γ| 6
n
15
ECE2 2020-2021
a) Écrire une fonction d’en-tête : function y = u(n) qui prend en argument un entier naturel n non
nul et qui renvoie la valeur de un .
Démonstration.
1 function y = u(n)
2 S = 0
3 for k = 1:n
4 S = S + 1/k
5 end
6 y = S - log(n)
7 endfunction
Commentaire
n
P 1
Pour le calcul de la somme k, on peut aussi tirer profit des fonctionnalités Scilab :
k=1
S = sum(1 ./ 1:n)
Pour bien comprendre cette instruction, rappelons que :
× l’instruction 1:n permet de créer la matrice ligne (1 2 ... n).
× l’opérateur ./ permet d’effectuer la division terme à terme.
Ainsi, l’instruction 1 ./ 1:n permet de créer la matrice ligne ( 11 1
2 ... 1
n ).
× la fonction sum permet de sommer tous les coefficients d’une matrice.
On obtient donc bien la somme à calculer par cette méthode.
b) On rappelle que l’instruction floor(x) renvoie la partie entière d’un réel x et on suppose que
la fonction u a été correctement programmée. Expliquer l’intérêt et le fonctionnement du script
ci-dessous :
1 eps = input('Entrer un réel strictement positif : ')
2 n = floor(1/eps) + 1
3 disp(u(n))
Démonstration.
• Ce script a pour but d’afficher une valeur approchée de γ à ε près (où ε est un réel strictement
positif fourni par l’utilisateur et stocké dans la variable eps).
Pour ce faire, il faut commencer par trouver un entier N ∈ N∗ tel que :
uN − γ 6 ε
16
ECE2 2020-2021
1 1 (par décroissance de la
6 ε ⇔ N >
N ε fonction inverse sur ]0, +∞[)
1
Ainsi, tout entier plus grand que ε convient. En particulier, l’entier N = b 1ε c + 1 convient.
17
ECE2 2020-2021
Démonstration.
• Afin de bien comprendre tous les mécanismes en jeu, on se permet d’apporter une réponse très
détaillée à cette question, accompagnée d’un aparté sur la méthode de recherche par dichotomie. Il
faut toutefois garder en tête qu’un tel niveau de détail n’est pas du tout attendu lors des concours.
Fournir la fonction Scilab démontre la bonne compréhension et permet d’obtenir la totalité des
points alloués à cette question.
Commençons par rappeler le cadre de la recherche par dichotomie.
• La dichotomie est une méthode itérative dont le principe, comme son nom l’indique, est de
découper à chaque itération l’intervalle de recherche en deux nouveaux intervalles. L’intervalle de
recherche est découpé en son milieu. On obtient deux nouveaux intervalles :
× un intervalle dans lequel on sait que l’on va trouver un zéro de f .
Cet intervalle est conservé pour l’itération suivante.
× un intervalle dans lequel ne se trouve pas forcément un zéro de f .
Cet intervalle n’est pas conservé dans la suite de l’algorithme.
La largeur de l’intervalle de recherche est ainsi divisée par 2 à chaque itération.
On itère jusqu’à obtenir un intervalle I contenant un zéro de f et de largeur plus faible que ε.
Les points de cet intervalle I sont tous de bonnes approximations du zéro de f contenu dans I.
• C’est le théorème des valeurs intermédiaires qui permet de choisir l’intervalle qu’il faut
garder à chaque étape. Rappelons son énoncé et précisons maintenant l’algorithme :
18
ECE2 2020-2021
• On construit ainsi une suite [am , bm ] m∈N
de segments emboîtés :
× contenant tous un zéro de f ,
× dont la largeur est divisée par deux d’un rang au suivant.
• Il reste enfin à adapter cet algorithme à l’énoncé.
Soit n ∈ N∗ . On cherche une valeur de x telle que : hn (x) = 0.
On se fixe initialement l’intervalle de recherche [0, 1] de sorte que l’équation hn (x) = 0 ne possède
qu’une solution, à savoir la valeur un qu’on cherche à approcher. D’un point de vue informatique,
on crée des variables a et b destinées à contenir les valeurs succesives de am et bm . Ces variables
sont initialisées respectivement à 0 et 1.
2 a = 0
3 b = 1
On procède alors de manière itérative, tant que l’intervalle de recherche n’est pas de largeur plus
faible que la précision 10−3 escomptée.
5 c = (a+b) / 2
6 if (c ∧ n + c - 1) > 0 then
7 b = c
8 else
9 a = c
10 end
En sortie de boucle, on est assuré que le segment de recherche, mis à jour au fur et à mesure
de l’algorithme, est de largeur plus faible que 10−3 et contient un zéro de hn . Tout point de cet
intervalle est donc une valeur approchée à 10−3 près de ce zéro.
On peut alors choisir de renvoyer le point le plus à gauche du segment.
12 u = a
12 u = b
12 u = (a + b) / 2
Ce dernier choix présente un avantage : tout point (dont le zéro recherché) du dernier intervalle
10−3
de recherche se situe à une distance d’au plus de ce point milieu.
2
10−3
On obtient ainsi une valeur approchée à du zéro recherché.
2
19
ECE2 2020-2021
Commentaire
• On peut se demander combien de tours de boucle sont nécessaires pour obtenir le résultat. Pour
le déterminer, il suffit d’avoir en tête les éléments suivants :
× l’intervalle de recherche initial [0, 1] est de largeur 1.
× la largeur de l’intervalle de recherche est divisée par 2 à chaque tour de boucle.
1
À la fin du mème tour de boucle, l’intervalle de recherche est donc de largeur m .
2
× l’algorithme s’arrête lorsque l’intervalle devient de largeur plus faible que 10−3 .
On obtient le nombre d’itérations nécessaires en procédant par équivalence :
ln(10)
⇔ m>3 (car ln(2) > 0)
ln(2)
ln(10)
Ainsi : 3 tours de boucle suffisent.
ln(2)
On retiendra que si l’on souhaite obtenir une précision de 3 chiffres après la virgule, il suffit
d’effectuer de l’ordre de 3 tours de boucle. Cet algorithme est donc extrêmement rapide.
1 function u = valeur_approchee(n)
2 a = 0
3 b = 1
4 while (b-a) > 10 ∧ (-3)
5 c = (a+b) / 2
6 if (c ∧ n + c - 1) > 0 then
7 b = c
8 else
9 a = c
10 end
11 end
12 u = a
13 endfunction
20
ECE2 2020-2021
Commentaire
Dans le programme à trous donné par l’énoncé, l’instruction :
11 u = ...
apparaît en ligne 11, comme dernière instruction de la boucle. Dans ce cas, l’affectation u
= a va être effectuée à chaque tour de boucle. Ainsi, la valeur de la variable u est écrasée à
chaque tour de boucle. Il en résulte que la variable u contient en fin de boucle la dernière
valeur qui lui a été affectée. De ce fait, on peut s’interroger sur la pertinence d’une telle
présentation. Comme seule la dernière affectation u = a permet de définir la valeur de la
variable u, il apparaît bien plus raisonnable d’effectuer cette instruction une seule fois en
sortie de boucle. C’est le choix qui est fait dans ce corrigé.
b) On représente alors les premiers termes de la suite (un )n∈N∗ et on obtient le graphe suivant.
Quelles conjectures peut-on faire sur la suite (un )n∈N∗ concernant sa monotonie, sa convergence
et son éventuelle limite ?
Démonstration.
Le graphe permet d’effectuer les conjectures suivantes :
× la suite (un )n∈N∗ est strictement croissante,
× la suite (un )n∈N∗ est minorée par 12 ,
× la suite (un )n∈N∗ est majorée par 1,
× la suite (un )n∈N∗ est convergente de limite 1.
Commentaire
On lit sur ce graphe les valeurs :
21
ECE2 2020-2021
ECRICOME − 2019
• Pour tout entier n non nul, on note hn la fonction définie sur R∗+ par :
1
∀x > 0, hn (x) = xn + 1 +
xn
• On devait démontrer les propriétés suivantes :
× pour tout entier naturel n non nul, la fonction hn est strictement décroissante sur ]0, 1[ et stric-
tement croissante sur [1, +∞[.
× pour tout entier n non nul, l’équation hn (x) = 4 admet exactement deux solutions, notées un et
vn et vérifiant : 0 < un < 1 < vn .
a) Écrire une fonction Scilab d’en-tête function y = h(n,x) qui renvoie la valeur de hn (x) lorsqu’on
lui fournit un entier naturel n non nul et un réel x ∈ R∗+ en entrée.
Démonstration.
1 function y = h(n, x)
2 y = x ∧ n + 1 + (1 / x ∧ n )
3 endfunction
Commentaire
Il n’y a aucune difficulté à coder en Scilab une fonction dont l’expression est donnée
dans l’énoncé. Il est donc impensable de ne pas traiter cette question.
b) Compléter la fonction suivante pour qu’elle renvoie une valeur approchée à 10−5 près de vn par la
méthode de dichotomie lorsqu’on lui fournit un entier n > 1 en entrée :
1 function res=v(n)
2 a = 1
3 b = 3
4 while (b-a) > 10 ∧ (-5)
5 c = (a+b)/2
6 if h(n,c) < 4 then
7 ........
8 else
9 ........
10 end
11 end
12 ..........
13 endfunction
Démonstration.
Commençons par rappeler le cadre de la recherche par dichotomie.
Calcul approché d’un zéro d’une fonction par dichotomie
Données :
× une fonction f : R → R,
× un intervalle de recherche [a, b],
× une précision de recherche ε.
Résultat : une valeur approchée à ε près d’un zéro (sur l’intervalle [a, b]) de la fonction f .
Autrement dit, une valeur approchée (à ε près) d’un réel x ∈ [a, b] tel que : f (x) = 0.
22
ECE2 2020-2021
• La dichotomie est une méthode itérative dont le principe, comme son nom l’indique, est de
découper à chaque itération l’intervalle de recherche en deux nouveaux intervalles. L’intervalle
de recherche est découpé en son milieu. On obtient deux nouveaux intervalles :
× un intervalle dans lequel on sait que l’on va trouver un zéro de f .
Cet intervalle est conservé pour l’itération suivante.
× un intervalle dans lequel ne se trouve pas forcément un zéro de f .
Cet intervalle n’est pas conservé dans la suite de l’algorithme.
La largeur de l’intervalle de recherche est ainsi divisée par 2 à chaque itération.
On itère jusqu’à obtenir un intervalle I contenant un zéro de f et de largeur plus faible que ε.
Les points de cet intervalle I sont tous de bonnes approximations du zéro contenu dans I.
• C’est le théorème des valeurs intermédiaires qui permet de choisir l’intervalle qu’il faut
garder à chaque étape. Rappelons son énoncé et précisons maintenant l’algorithme :
• On construit ainsi une suite [am , bm ] m∈N de segments emboîtés :
× contenant tous un zéro de f ,
× dont la largeur est divisée par deux d’un rang au suivant.
• Il reste enfin à adapter cet algorithme à l’énoncé.
Soit n ∈ N∗ . On cherche une valeur de x telle que : hn (x) = 4 ce qui s’écrit :
On se fixe initialement l’intervalle de recherche [1, 3] de sorte que l’équation fn (x) = 0 ne possède
qu’une solution, à savoir la valeur vn qu’on cherche à approcher. D’un point de vue informatique,
on crée des variables a et b destinées à contenir les valeurs succesives de am et bm . Ces variables
sont initialisées respectivement à 1 et 3.
2 a = 1
3 b = 3
On procède alors de manière itérative, tant que l’intervalle de recherche n’est pas de largeur plus
faible que la précision 10−5 escomptée.
23
ECE2 2020-2021
5 c = (a+b) / 2
8 else
9 b = c
10 end
En sortie de boucle, on est assuré que le segment de recherche, mis à jour au fur et à mesure
de l’algorithme, est de largeur plus faible que 10−5 et contient un zéro de fn . Tout point de cet
intervalle est donc une valeur approchée à 10−5 près de ce zéro.
On peut alors choisir de renvoyer le point le plus à gauche du segment.
12 res = a
12 res = b
12 res = (a + b) / 2
Ce dernier choix présente un avantage : tout point (dont le zéro recherché) du dernier intervalle
10−5
de recherche se situe à une distance d’au plus de ce point milieu.
2
10 −5
On obtient ainsi une valeur approchée à du zéro recherché.
2
24
ECE2 2020-2021
Commentaire
• On peut se demander combien de tours de boucle sont nécessaires pour obtenir le résultat. Pour
le déterminer, il suffit d’avoir en tête les éléments suivants :
× l’intervalle de recherche initial [1, 3] est de largeur 2.
× la largeur de l’intervalle de recherche est divisée par 2 à chaque tour de boucle.
2
À la fin du mème tour de boucle, l’intervalle de recherche est donc de largeur m .
2
× l’algorithme s’arrête lorsque l’intervalle devient de largeur plus faible que 10−5 .
On obtient le nombre d’itérations nécessaires en procédant par équivalence :
1 X = 1:20
2 Y = zeros(1,20)
3 for k = 1:20
4 Y(k) = v(k) ∧ k
5 end
6 plot2d(X, Y, style=-2, rect=[1,1,20,3])
25
ECE2 2020-2021
Démonstration.
• Le programme commence par définir deux tableaux (matrices lignes) X et Y.
1 X = 1:20
2 Y = zeros(1,20)
Le tableau X contient initialement [1, 2, . . . , 20], c’est-à-dire les 20 premiers entiers non nuls.
Le tableau Y est destiné à contenir les 20 premières valeurs de la suite (vn n ).
Il est initialement rempli de 0.
• À l’aide d’une boucle, la k ème case Y est modifiée de sorte à contenir une valeur approchée de vkk .
3 for k = 1:20
4 Y(k) = v(k) ∧ k
5 end
• On effectue alors le tracé des points d’abscisse une valeur de X et d’ordonnée la valeur correspon-
dante de Y. On obtient ainsi le tracé des points de coordonnées (k, vkk ) pour k variant de 1 à 20.
Le nuage de points obtenu correspond au tracé des 20 premières valeurs de la suite (vn n ).
Au vu de la représentation graphique obtenue, on peut faire la conjecture que la suite (vn n )
est constante et approximativement de valeur 2.61.
26