ECE2 Informatique - Suites et séries - Corrigé Septembre 2021 - EXERCICE1 -
On considère une suite(un)définie par son premier termeu0=1et pour tout entiern, un+1=un+ 1 un. 1. Écrire un programme en Scilab qui calcule et affiche la valeur deunlorsque l’utilisateur entre la valeur
denau clavier.Pourn=100, on trouveu100=14.284064.
n=input('Donnez la valeur de n : ')
u = 1 ; // u0=1
for i = [1:n] do // boucle pour calculer tous les termes de 1 à n
u = u+1/u ; // calcul du terme suivant (qui écrase l'ancienne valeur) enddisp(u)
2. Écrire une fonction en SciLab d’entête function u = suite_u(n) prenant comme paramètre un entiernet renvoyant la valeur deun.
function u = suite_u(n) : // le résultat devra être rangé dans la variable u
u = 1 ; //
for i = [1:n] do // même programme
u = u+1/u ; //
end //
endfunction
3. Écrire une fonction en SciLab d’entête function VectU = valeurs_u(n) prenant comme paramètre un en- tiernet renvoyant toutes les valeurs deu0àunrangées dans un vecteur.
Deux solutions :
• En remplissant le vecteur au fur et à mesure.
function VectU = valeurs_u(n) : le résultat devra être rangé dans la variable VectU
u=1 // u0=1
VectU = [u] // Initialisation de VectU avec la première valeur de u for i = [1:n] do //
u = (u+1/u) ; // Calcul de la nouvelle valeur de u
VectU = [VectU,u] // Recopie le contenu de VectU et ajout de la nouvelle valeur de u
end //
endfunction
• En construisant un vecteur rempli de 0 et en modifiant les valeurs au fur et à mesure.
function VectU = valeurs_u(n) : le résultat devra être rangé dans la variable VectU
u=1 // u0=1
VectU = zeros(1,n+1) // Initialisation de VectU avec des 0 : (0,0,0,0,0,0,0) VectU(1) = u // On change la première valeur de VectU par u0
for i = [2:n+1] do //
u = (u+1/u) ; // Calcul de la nouvelle valeur de u
VectU(i) = u // On change la i-ième valeur de VectU par la nouvelle valeur de u
end //
endfunction
4. Écrire un programme en Scilab permettant de déterminer et d’afficher le plus petit entier naturelnpour lequelun⩾100.On trouven=4998.
n = 0 ; // On retient l'indice
u = 1 ; // u0=1
while u < 100 do // tant que la valeur de u ne dépasse par 100, on calcule la nouvelle u = u+1/u ; // Calcul de la nouvelle valeur de u
n = n+1 ; // On augmente l'indice enddisp(n)
–1/4–
On considère le programme SciLab et le graphique associé ci-dessous.
u = 1 ; eq = [1] ; for i = 1:200
u = u + 1/u ;
eq = [eq,u/sqrt(2*i)]
endplot2d([0:200],eq);
5. (a)Les termes de quelle suite sont contenus dans la variableeqen fin de boucle ?
A chaque passage dans la boucle, on calcule la valeuruipuis on ajoute au vecteureqla valeur ui p2i. Ainsi, en fin de boucle, le vecteureqcontiendra tous les termes ui
p2ipourientre 1 et 200. En d’autres termes,eqcontient les termes de la suitewn= un
p2n.
(b) A l’aide du graphique, conjecturer alors un équivalent de la suite(un)en+∞ainsi que la limite.
Le graphique représente le vecteureq, soit les premiers termes de la suitewn= un
p2nd’après la ques- tion précédente.
Or, on remarque sur le graphique que : lim
n→+∞wn=1 soit lim
n→+∞
un p2n=1.
Ainsi, on a : un ∼
+∞
p2n puis lim
n→+∞un= lim
n→+∞
p2n= +∞.
(c)Prouver votre conjecture concernant la limite de la suite.
On montrera que la suite est croissante et non majorée.
–2/4–
• On montre très facilement par récurrence que la suite est à termes positifs.
Ainsi, on a : un+1−un= 1
un>0 donc la suite est strictement croissante.
• Montrons par l’absurde que cette suite n’est pas majorée.
Supposons donc que cette suite soit majorée. On a alors : (un) est strictement croissante et ma- jorée donc elle converge versℓ. En passant à la limite dans la relation de récurrence, on obtient alors : ℓ=ℓ+1
ℓsoit1
ℓ=0 ce qui est absurde.
Donc l’hypothèse de départ est fausse et la suite n’est pas majorée.
Finalement, la suite (un) est strictement croissante et non majorée donc elle diverge vers+∞.
6. A l’aide de la fonction cumsum et de la fonction valeurs_u, écrire un programme en SciLab permettant de calculer la somme
100
X
n=0
un.
La fonctioncumsumajoute les termes contenus dans un vecteur. Il faut donc utiliser la fonctionvaleurs_u qui renvoie tous les termes de la somme dans un vecteur puis utiliser la fonctioncumsumsur le résultat de cette fonction. Cela donne :
V = valeurs_u(100) \\ V contiendra les 101 premiers termes de la suite u S = cumsum(V) \\ S est un vecteur contenant les sommes cumulées de V disp(S(101))
7. (a) Écrire une fonction en SciLab d’entête function S = Som(n) prenant comme paramètre un entiern et permettant de calculer la somme
Xn k=0
1 un. function S = Som(n)
u = 1 ; S = 1/u ; for i = 1:n
u = (u+1/u) ; S = S+ 1/u ; endendfunction;
(b) On considère les instructions Scilab suivantes : --> Som(10)
ans = 3.9975327 --> Som(100)
ans = 13.354072 --> Som(1000)
ans = 43.801548
--> Som(10000) ans = 140.4508 --> Som(100000)
ans = 446.22419 --> Som(10000000) ans = 4471.1373 (c) Que peut-on conjecturer sur la série de terme général 1
un? On peut conjecturer que la série de terme général 1
undiverge (lentement) vers+∞.
(d) Démonter ce résultat.
On tire de la relationun+1=un+ 1
unl’égalité suivante : 1
un=un+1−un puis une somme téléscopique.
Ainsi, on a pourN∈N∗:
Xn k=0
1 un=
Xn k=0
uk+1−uk=un+1−u0
Or, on a vu queun∼p
2n donc lim
n→+∞
Xn k=0
1 un= lim
n→+∞un+1−u0= +∞ et la série de terme général 1 un diverge.
–3/4–
- EXERCICE2 -
On considère une suite(vn)n∈N∗définie par :v1=1et pour tout entiernnon nul,vn+1=vn+ 1 n2vn. 1. Écrire une fonction en SciLab d’entête function v = suite_v(n) prenant comme paramètre un entiernet
renvoyant la valeur devn.
Pour le calcul dans la boucle : On calculevià partir devi−1, la formule devenant alors : vi=vi−1+ 1 (i−1)2vi. function v = suite_v(n) : // le résultat devra être rangé dans la variable v
v = 1 ; // v_1 = 1
for i = [2:n] do // boucle pour calculer tous les termes de 2 à n v = v + 1/((i-1)^2*v) ; // calcul du terme d'indice i
endendfunction
2. On admet que la suite(vn)converge vers une limiteℓvérifiant : pour toutp⩾2, 0⩽ℓ−vp⩽ 1 p−1. Écrire alors un programme SciLab qui renvoie une valeur approchée deℓà10−4près.
• La relation 0⩽ℓ−vp⩽ 1
p−1 montre que l’écart entrevpetℓest inférieur à 1
p−1. Ainsi, il suffit de déterminer une valeur deppour laquelle 1
p−1⩽10−4et de donner la valeur devpcorrespondante.
v = 1 ; // v_1 = 1
v = v + 1/v // calcul de v_2 car la relation n'est
p = 2 // valable que pour p>=2
while 1/(p-1) > 10^(-4) do // tant que l'approximation n'est pas assez précise // on calcule la nouvelle valeur de v
v = v + 1/(p^2*v) ; // Calculs de v_3, v_4, ...
p = p + 1 ; // On augmente l'indice enddisp(v)
• Autre méthode : On détermine à la main la valeur depqui convient, à savoir : 1
p−1⩽10−4⇐⇒p−1⩾104⇐⇒p⩾104+1 et on calcule avec la fonction de la question précédente :
p = 10^4 + 1 // indice calculé à la main
v = suite_v(p) // calcul du terme d'indice p de la suite v disp(v)
- EXERCICE3 -
On considère la suite à récurrence linéaire d’ordre 2(un)définie, pour toutn∈N, par : u0=0,u1=2, et un+2=7un+1−3un.
Compléter la fonction SciLab suivante afin qu’elle renvoie le terme généralunen fonction den.
function res = u(n) Uold = 0 Unew = 2 for i = [2:n]
Uaux = 7*Unew - 3*Uold // On calcule le nouveau terme à partir des deux précédents Uold = Unew // On met à jour les termes précédents (décalage)
Unew = Uaux // On met à jour les termes précédents (décalage) endres = Unew
endfunction
–4/4–