Vous êtes sur la page 1sur 24

Chapitre 2 : Les suites avec MAPLE

Gnralit sur les suites


Dfinir une suite
Une suite tant une application sur des entiers, on la dfinera comme une
fonction une variable, sauf que l'on n'oubliera pas que la variable est
entire :
Exemple 1 : Dfinir la suite de terme gnral u(n)=2n^2+2, avec un
appel paramtrique et un appel par valeur. Puis construire le graphe de
u pour n entre 1 et 20
O restart;
O u:=n->2*n^2+2;
u := n/2 n C2

(1.1.1)

2 n2 C2

(1.1.2)

52

(1.1.3)

O u(n);
O u(5);
O plot(u,1..20, style=point);

800

700

600

500

400

300

200

100

10

12

14

16

18

20

Exemple 2 : Dfinir une suite rcurrente de type u(n)=f(u(n-1)), avec


u(0)=3 et f:x->1/(x+1), puis donner la valeur de u(12).
O restart;
O f:=x->1/(x+1);
f := x/
O u:=n->f(u(n-1));

1
x C1

u := n/f u n K1

(1.1.4)

(1.1.5)

O u(0):=3;u(12);
u 0 := 3
411
665

(1.1.6)

Reprsentation des termes d'une suite


La fonction plot permet aussi de reprsenter graphiquement les termes
d'une suite et d'en dduire ainsi le comportement de la suite l'infini.

Exemple 1: Reprsenter graphiquement la suite rcurrente de type u(n)=f


(u(n-1)), avec u(0)=1 et f:x->1/(x+1) , pour n entre 0 et 20.
O restart;
O f:=x->1/(x+1);
u:=n->f(u(n-1));
u(0):=1;
1
x C1
u := n/f u n K1
u 0 := 1
f := x/

O seq([n,u(n)], n=0..20);
1
2
3
5
0, 1 , 1,
, 2,
, 3,
, 4,
, 5,
2
3
5
8
55
89
144
233
, 10,
, 11,
, 12,
89
144
233
377
1597
2584
4181
16,
, 17,
, 18,
,
2584
4181
6765

8
13
21
34
, 6,
, 7,
, 8,
, 9,
13
21
34
55
377
610
987
, 13,
, 14,
, 15,
,
610
987
1597
6765
10946
19,
, 20,
10946
17711

(1.2.1)

(1.2.2)

O plot([seq([n,u(n)], n=0..20)], style=point);


#puisque u(n) est donne en fonction de u(n-1) et n'est pas
en fonction de n, on ne peut pas tracer la courbe de u(n)
directement (c.a.d, si on fait plot(u,0..20) et si on
execute Maple on obtient un message d'erreur)

1,0

0,9

0,8

0,7

0,6

0,5
0

10

15

20

Exemple 2 : Soit f la fonction dfinie en tout point par


f(x)=(x+1)/(x^2+4). On considre la suite entire suivante
u(n)=f(u(n-1)), avec u(0)=0, crire et reprsenter u pour n entre 0 et 10.
O restart;
f:=x->(x+1)/(x^2+4);
u:=n->f(u(n-1));
u(0):=0;
plot([seq([n,u(n)],n=0..10)], style=point);
x C1
f := x/ 2
x C4
u := n/f u n K1
u 0 := 0

0,3

0,2

0,1

0
0

10

Calcul des termes d'une suite


On peut calculer simplement la valeur des termes d'une suite et mme le
calcul de plusieurs d'entre eux ( l'aide de la demande de boucle seq par
example)
On notera par ailleurs qu'il peut tre bon de travailler avec des nombres
en virgule flottante ("1." et non par "1") , afin que Maple ne travaille pas
de manire symbolique.
Considrons l'exemple 1 du pragraphe ci-dessous. donner les valeurs de
u en 1 , 3 et 5, puis les valeurs de u sur une ligne pour tout n entre 1 et
10.
O restart;
O f:=x->1/(x+1);
u:=n->f(u(n-1));
u(0):=1.;

1
x C1
u := n/f u n K1
u 0 := 1.
f := x/

(1.3.1)

O u(1);u(3);u(5);
0.5000000000
0.5999999999
0.6153846154
O seq(u(n), n=1..10);
0.5000000000, 0.6666666667, 0.5999999999, 0.6250000000, 0.6153846154,
0.6190476192, 0.6176470588, 0.6181818181, 0.6179775282, 0.6180555556

(1.3.2)
(1.3.3)

Les suites rcurrentes simples du type u_n=f(u_{n-1}) :


Dfinition d'une telle suite
Les deux paragraphes prcdents donnent des exemples complet pour
dfinir une suite rcurrente simple (suite o u_n dpend de
u_{n-1}). On peut ajouter l'utilisation de la table "remember" pour
acclerer les appels.
O restart: f := proc(n) if n<2 then n else f(n-1)+f(n-2) fi
end;f(0);f(1);
f := proc n if n ! 2 then n else f n K 1 Cf n K 2 end if end proc
0
1
(2.1.1)
O restart:

f := proc(n) option remember;


if n<2 then n else f(n-1)+f(n-2) fi end;

f := proc n
option remember;
if n ! 2 then n else f n K 1 Cf n K 2 end if
end proc
O # On peut dfinir la fonction autrement
restart: f := proc(n) f(n-1)+f(n-2) end;
f(0):= 0;f(1):= 1;
f := proc n f n K 1 Cf n K 2 end proc
f 0 := 0
f 1 := 1

Reprsentation graphique d'une telle suite :

(2.1.2)

(2.1.3)

Ces suites ont un comportement relativement prvisible (vous verrez


dans un de vos cours de mathmatiques que ce comportement dpend
essentiellement du premier terme, de la monotonie ou du caractre
contractant de la fonction, etc.).
Exemple : Un premier trac l'aide de la fonction plot permet de voir le
comportement asymptotique de la suite
O restart;
O f:=x->1/(1+x): u:=n->f(u(n-1)): u(0):=1.:
plot([seq([n,u(n)],n=1..10)]);

0,66
0,64
0,62
0,60
0,58
0,56
0,54
0,52
0,50
1

10

On peut nanmoins le prciser en traant ce qui est appel l'escalier (ou


l'escargot selon le cas).
Pour cela, on est amen introduire une fonction ou une procdure
"escalier" qui va tracer l'escalier proprement dit :
O # Exemple
O restart;

O f:=x->1/(1+x): u:=n->f(u(n-1)): u(0):=1.:


O escalier:=i->([u(i),u(i)],[u(i),u(i+1)]):
[seq(escalier(i),i=1..10)];
0.5000000000, 0.5000000000 , 0.5000000000, 0.6666666667 , 0.6666666667,
0.6666666667 , 0.6666666667, 0.5999999999 , 0.5999999999, 0.5999999999 ,
0.5999999999, 0.6250000000 , 0.6250000000, 0.6250000000 , 0.6250000000,
0.6153846154 , 0.6153846154, 0.6153846154 , 0.6153846154, 0.6190476192 ,
0.6190476192, 0.6190476192 , 0.6190476192, 0.6176470588 , 0.6176470588,
0.6176470588 , 0.6176470588, 0.6181818181 , 0.6181818181, 0.6181818181 ,
0.6181818181, 0.6179775282 , 0.6179775282, 0.6179775282 , 0.6179775282,
0.6180555556 , 0.6180555556, 0.6180555556 , 0.6180555556, 0.6180257509

(2.2.1)

O plot([seq(escalier(i),i=1..20)]);

0,66
0,64
0,62
0,60
0,58
0,56
0,54
0,52
0,50
0,50

0,52

0,54

0,56

0,58

0,60

0,62

0,64

0,66

et pour retrouer l'aspect escalier qui rebondit sur la premire bissectrice,


on trace simultanment l'escalier et cette dernire :
O restart;
O f:=x->1/(1+x): u:=n->f(u(n-1)): u(0):=1:

O
O
O
O

escalier:=i->([u(i),u(i)],[u(i),u(i+1)]):
p1:=plot([seq(escalier(i),i=1..20)]):
p2:=plot(x,x=0..0.7):
with(plots):

O display(p1,p2,scaling=constrained);

0,7

0,6

0,5

0,4

0,3

0,2

0,1

0
0

0,1

0,2

0,3

0,4

0,5

0,6

et l'on peut bien videment faire apparatre la courbe de f:


O restart;
O f:=x->1/(1+x): u:=n->f(u(n-1)): u(0):=1:
O escalier:=i->([u(i),u(i)],[u(i),u(i+1)]):
O
O
O
O

p1:=plot([seq(escalier(i),i=1..20)]):
p2:=plot(x,x=0..1):
p3:=plot(f(x),x=0..1):
with(plots):

O display(p1,p2,p3,scaling=constrained);

0,7

1,0

0,8

0,6

0,4

0,2

0
0

0,2

0,4

0,6

0,8

Exercice :
O restart: # Correction de l'exercice
f:=x->(3*x-1)/(x+4):
g:=x->1/x:
u:=n->f(u(n-1))+g(u(n-1)): u(0):=0.2;
u 0 := 0.2
O
O
O
O
O

p1:=plot([seq([n,u(n)],n=1..10)], style=point):
escalier:=i->([u(i),u(i)],[u(i),u(i+1)]):
p2:=plot([seq(escalier(i), i=0..10)]):
p3:=plot(x,x=0..5):
with(plots):
display(p1,p2,p3);

1,0

(2.2.2)

0
0

10

Calculs de termes gnraux :

La fonction rsolve :
La fonction rsolve permet de calculer le terme gnral d'une suite ds lors
que celle-ci est dfinie par une expression de rcurrence.
Exemple : Dterminer le terme gnral des suites qui vrifient :
u(n+1)=R*u(n) avec u(0)=2
O restart;
O
O f:=x->R*x: u:=n->f(u(n-1)): u(0):=2:
O u(n);
Maple ne peut pas donner l'expression de u(n) en fonction de n, pour cela il faut utiliser rsolve
Error, (in u) too many levels of recursion
O rsolve(v(n)=R*v(n-1),v(n));
v 0 Rn
(2.3.1)

On notera que l'appel u(n) reste infructueux, bien que l'on esprait faire

apparatre le terme gnral. La fonction rsolve (s'utilise de la mme


manire que dsolve pour la rsolution d'quations diffrentielles que
nous n'aborderons pas dans notre cours).
On peut alors rcuprer ces solutions et travailler avec :

Soit u(n) la suite dfinie par u(n+1)=R*u(n) et u(0):=a.


Exprimer u(n) en fonction de n en utilisant rsolve
O restart;
O f:=x->R*x: u:=n->f(u(n-1)): u(0):=2:
O rsolve(v(n)=R*v(n-1),v(n));v(n);
n
v 0 R
v n

(2.3.2)

O w:=unapply(rsolve(v(n)=R*v(n-1),v(n)),n);
w := n/v 0 Rn

(2.3.3)

O w(n);
v 0 Rn
O v(0):=2: R:=0.1:
O seq(w(i),i=1..5);
0.2, 0.02, 0.002, 0.0002, 0.00002
O plot(w,0..10, style=point);

(2.3.4)

(2.3.5)

2,0

1,5

1,0

0,5

0
0

10

On va donner l'expression du terme gnrale de la suite dfinie par


u(n+1)=r+u(n),u(0)=2
O restart:
f:=x->x+r:
u:=n->f(u(n-1)):u(0):=2:
simplify(rsolve(v(n)=v(n-1)+r,v(n)));
v 0 Cr n

(2.3.6)

O w:=unapply(simplify(rsolve(v(n)=v(n-1)+r,v(n))),n);
w := n/v 0 Cr n

(2.3.7)

O w(n);

v 0 Cr n

O v(0):=2.;r:=0.5; seq(w(i), i=1..10);


v 0 := 2.
r := 0.5
2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0
O plot(w,0..10, style=point);

(2.3.8)

(2.3.9)

2
0

10

Exercices : suites rcurrentes simples


Exercice 1
Soit f la fonction dfinie par f(x)=2.7x(1-x) et la suite rcurrente donne par
u(n+1) =f(u(n)) et u(0)=0.1.
1. Pour n donn, crire avec une boucle "for" la squence des n premiers termes de la suite.
2. Observer la convergence de la suite vers la solution f(x)=x.
3. Tracer le graphe de u(n) en fonction de n.
4. Tracer sur un mme graphique la courbe reprsentant f, la bissectrice et la ligne brise
joinant les points (u(n),u(n)) et (u(n), f(u(n)).
Reprendre l'exercice avec f(x)=x(x+2)/(x+5) et u(0)=2.
O restart: f:=x->2.7*x*(1-x):u(n+1):=f(u(n)):u(0):=0.2:
w:=unapply(u(n+1),n);w(n);
w := n/2.7 u n 1 Ku n
2.7 u n 1 Ku n
(3.1.1)

Correction de l'exercice 1
O restart:
O f:=x->2.7*x*(1-x);

f := x/2.7 x 1 Kx

O u:=n->f(u(n-1));u(0):=0.1;
u := n/f u n K1
u 0 := 0.1

(3.2.1)

(3.2.2)

O liste:=proc(n)
local lis, i;
lis:=[];
for i from 1 to n do
lis:=[op(lis),u(i)]
od
end:liste(26);
# on observe que u convergente et sa limite est trs proche de 0.629, on peut vrifier ce rsultat
en cherchons le point fixe de f, c'est--dire rsoudre l'quation f(x)=x
0.243, 0.4966677, 0.6749700186, 0.5923408299, 0.6519775622, 0.6126376156,
(3.2.3)
0.6407444723, 0.6215156824, 0.6351316349, 0.6256964913, 0.6323410588,
0.6277117793, 0.6309621938, 0.6286920402, 0.6302835689, 0.6291707175,
0.6299502994, 0.6294048830, 0.6297868159, 0.6295195326, 0.6297066648,
0.6295756890, 0.6296673801, 0.6296032004, 0.6296481282, 0.6296166797
O p1:=plot(f(x),x=0..1):
p2:=plot(x,x=0..1):
with(plots):
display(p1,p2);

1,0

0,8

0,6

0,4

0,2

0
0

0,2

0,4

0,6

0,8

x
O # Graphe de u(n) en fonction de n
plot([seq([n,u(n)], n=0..50)], style =point);

1,0

0,6

0,5

0,4

0,3

0,2

0,1
0

10

20

30

O escalier:=i->([u(i),u(i)], [u(i),u(i+1)]):
p1:=plot([seq(escalier(i),i=0..20)]):
p2:=plot(x,x=0..1):
p3:=plot(f(x),x=0..1):
O with(plots):
O display(p1,p2,p3, scaling=constrained);

40

50

1,0

0,8

0,6

0,4

0,2

0
0

0,2

0,4

0,6

0,8

1,0

Exercice 2
Voici un exemple de suite rcurrente dfinie en utilisant une procdure qui utilise la fonctionalit
"remember". Interprter les rsultats obtenus.
O restart: fac:=proc(n::nonnegint)#nonnegint :entier non
ngatif
option remember;
if n=0 then 1 else n*fac(n-1)
fi
end:
O t:=time(); fac(1000):time()-t;
t := 6.160
0.031
(3.3.1)
O t:=time(); fac(1500):time()-t;
t := 6.191
0.

(3.3.2)

Correction de l'exercice 2
Si l'utilisateur utilise l'otion remember, tous les calculs effectus par la procdure seront gards
dans la table remember associe ainsi cre. Le temp de calcul de fac(1500) est court que celui de
fac(1000).
O

Exercice 3
Ecrire une procdure "escargot" qui permet une tude graphique pour les suites rcurrentes
simples, pour une valeur donne de u0, pour N fix et x entre a et b.

Correction de l'exercice 3
O restart:
O with(plots):
O escargot:=proc(f,u0,a,b,N)
local p1,p2,p3,u,escalier:
u:=n->f(u(n-1)):
u(0):=u0:
escalier:=i->([u(i),u(i)],[u(i),u(i+1)]):
p1:=plot([seq(escalier(i),i=1..N)]):
p2:=plot(x,x=a..b):
p3:=plot(f(x),x=a..b):
with(plots):
display(p1,p2,p3,scaling=constrained);
end:
O G:=x->0.2+1.3*x^2:escargot(G,0.02,0,0.5,20);

0,5

0,4

0,3

0,2

0,1

0
0

0,1

0,2

0,3

0,4

0,5

Suite contractante
Soient I un intervalle de R (non vide et non rduit un point), f une application de I dans R et k un
rel positif et strictement infrieur 1.
On dit que f est contractante si, pour tout x,y dans I,
|f(x)-f(y)| <= k |x-y|.
Une suite u recurrente (u(n)=f(u(n-1))) est dite contractante si, pour tout, n,m deux entiers, on a
|u(n+1)-u(m+1)| <= k|u(n)-u(m)|
Remarque : abs(x) c'est la valeur absolu de x
On va tudier la convergence des suites contractantes.
On considre la fonction f dfinie sur [1,2] par f (x)=x/2+1/x
1. Dfinir f et sa drive avec Maple.

Correction de 1
O restart: f:=x->x/2+1/x;
f := x/

1
1
xC
2
x

(4.1.1)

O f1:=D(f);
(4.1.2)

1
1
K 2
(4.1.2)
2
x
2. Montrer avec Maple que, pour tout x dans [1,2], f est valeur dans [1,2].(utiliser maximize et
minimize, (maximize(f(x),x=a..b) pour Maple 11 et maximize(f(x),{x},{x=1..2})
f1 := x/

Correction de 2
O
#evalf(maximize(f(x),{x},{x=1..2})) avec #Maple 5;
#sur Maple 11
maximize(f(x),x=1..2);
3
2

(4.2.1)

O minimize(f(x),x=1..2);
Nous remarquons alors que f est valeur dans [sqrt(2),3/2], qui est inclus dans [1,2].
2
(4.2.2)
3. Montrer que, pour tout x dans l'inteval [1,2], on a |D(f)(x)| est infrieure ou gale 1/2. En
dduire que, pour tout x,y dans l'interval [1,2], on a
|f(x)-f(y)| est infrieure ou gale 1/2 |x-y| .

Correction de 3
O maximize(f1(x), x=1..2);
1
4

(4.3.1)

O
On va utiliser maintenant le thorme des acroisement fini, puisque f est continue sur [1,2] et
drivable sur ]1,2[ et pour tout c entre 1 et 2, on a |f'(c)|<=1/2, alors pour tout x,y dans [1,2], on
a
|f(x)-f(y)| <= 1/2 |x-y| .
4. Montrer que la suite u dfinie par u0= 1 et u(n+1)=f(u(n)) converge et prciser sa limite a.
(dfinir la suite u par Maple et aprs dduire sa convergence en utilisant la question 3 et la
solution de l'quation f(x)-x=0)

Correction de 4
O

u:=n->f(u(n-1));u(0):=1;u(1);
u := n/f u n K1
u 0 := 1
3
2

O # On va chercher le point fixe de la fonction f


solve(f(x)-x=0,x);
K 2, 2

(4.4.1)

(4.4.2)

Donc sur l'interval [1,2], f possde un unique point fixe qui est
a= sqrt(2), (on ne prend pas la valeur -sqrt(2) car elle n'appartient pas l'interval [1,2])
d'aprs 3, on a |f(x)-f(a)|<=1/2|x-a|, donc pour tout n, on a |f(u(n))-a|<=1/2|u(n-1)-a|, on peut
montrer par rcurrence que |u(n)-a|<=(1/2)^n|u(0)-a|, donc lorsqu'on fait tendre n vers l'infini on
dduit que u est une suite convergente et qu'elle converge vers a=sqrt(2).
5. Visualiser cette convergence avec la procdure Escargot vue en cours.

Correction de 5
O escargot:=proc(f,u0,a,b,N)
local p1,p2,p3,u,escalier:
u:=n->f(u(n-1)):
u(0):=u0:
escalier:=i->([u(i),u(i)],[u(i),u(i+1)]):
p1:=plot([seq(escalier(i),i=1..N)]):
p2:=plot(x,x=a..b):
p3:=plot(f(x),x=a..b):
with(plots):
display(p1,p2,p3,scaling=constrained);
end:escargot(f,1,1,2,10);

2,0

1,8

1,6

1,4

1,2

1,0
1,0

1,2

1,4

1,6

1,8

2,0

6. Pour tout n entier positif, donner une majoration de lerreur |u(n)-a| (par une expression ne
contenant pas a). On rappelle que, pour tout n entier positif, on a
|u(n)-a| <= k^n/(1-k)|u(1)-u(0)| (avec k=1/2 dans ce cas)
Nous remarquons alors que k^n/(1-k)|u(1)-u(0)| est un majorant de |u(n)-a|

Correctin de 6
O # On note M un majorant de |(u(n)-a|,
M:=evalf((1/2)^n/(1-1/2)*(abs(u(1)-u(0))));
M := 0.5000000000n
7. Dterminer un entier p partir du quel |u(p)-a|< 10^(-5), o a est la limite de u. (faire une
8. boucle while)

Correction de 7
O i:=0:
while evalf(abs(u(i)-sqrt(2)))>=10^(-5) do
i:=i+1:

(4.6.1)

od:
print(p=i);
p =3
(4.7.1)
9. Daprs la question prcdente u(p) est une valeur approche de a=sqrt(2) 10^(-5) prs.
crire un bloc de commande Maple permettant de calculer u(p) .
O i:=0:
while evalf(abs(u(i)-sqrt(2)))>=10^(-5) do
i:=i+1:
od:
print(u[p]=u(i));
577
up =
408
O
O

(4.1)