A806 Méfiez-vous des calculettes et des tableurs [*** à la main et avec une calculette programmable/un ordinateur]
Solution de Jean Michel Ferrard : Etude d'une suite avec Maple
La relation de récurrence:
> restart:rel:=u(n+3)=17-101/u(n+2)+247/(u(n+1)*u(n+2))- 210/(u(n)*u(n+1)*u(n+2));
:=
rel u(n3)17 101
( )
u n2
247
( )
u n1 u(n2)
210 ( )
u n u(n1)u(n2) Les conditions initiales:
> ci:=u(0)=5/2,u(1)=2,u(2)=1/2;
:=
ci u 0( )5, ,
2 u 1( )2 u 2( )1 2 La fonction intégrée rsolve échoue à trouver l'expression de u(n):
> rsolve({rel,ci},u);
rsolve u(n3)17 101
( )
u n2
247
( )
u n1 u(n2)
210 ( )
u n u(n1)u(n2) u 0( )5
, 2,
{
( )
u 1 2 u 2( )1 , 2},u
On peut facilement écrire une fonction U donnant les valeurs exactes des termes de la suite u:
> U:=proc(n::nonnegint) option remember;
if n<=2 then [5/2,2,1/2][n+1] else
17-101/U(n-1)+247/(U(n-2)*U(n-1))-210/(U(n-3)*U(n-2)*U(n- 1))
fi end:
Voici la liste des 15 premiers termes de la suite u.
> seq(U(k),k=0..9); evalf(%);
, , , , , , , , ,
5 2 2 1
2 -22 191 22
1198 191
6719 1198
35782 6719
185471 35782
947038 185471
2.500000000 2. 0.5000000000 -22. 8.681818182 6.272251309 5.608514190, , , , , , , 5.325494865 5.183360349 5.106124408, ,
Voici l'expression exacte de u(100), suivie de sa valeur approchée avec 50 chiffres significatifs:
> U(100);
3944304526105059027057869760132833131369477483850466591942341492037311 788860905221011805411470876522420224007688204544140194133927876903062
> evalf(U(100),50);
5.0000000000000000000006533186235000709060969036798
Voici les valeurs approchées des termes u(10), u(20), u(50), u(100) (avec 20 chiffres significatifs)
La suite semble donc converger vers 5.
Attention: ce sont des valeurs numériques fiables, car obtenues par arrondi des valeurs exactes!
> for k in [10,20,50,100] do 'U'(k)=evalf(U(k),20) od;
( )
U 10 5.0623512467292759108
( )
U 20 5.0003656826936996453 ( )
U 50 5.0000000000808281277
( )
U 100 5.0000000000000000000 On définit la suite v définie par v(0)=1 et les égalités u(n)=v(n+1)/v(n).
> u:=n->v(n+1)/v(n);
:=
u nv(n1) ( ) v n Voici ce que deviennent les conditions initiales:
> ci;
, ,
( )
v 1 ( ) v 0
5
2 v 2( )
( )
v 1 2 v 3( )
( ) v 2
1 2
On les résout pour trouver v(1), v(2) et v(3). On obtient ainsi les conditions initiales sur la suite v:
> ci:={v(0)=1} union solve({v(0)=1, ci},{v(0),v(1),v(2),v(3)});
:=
ci {v 0( )1,v 3( )5, , } 2 v 2( )5 v 1( )5
2 Voici ce que devient maintenant la formule de récurrence:
> rel;
( )
v n4
( )
v n3 17101 (v n2)
( )
v n3
247 (v n1)
( )
v n3
210 ( )v n
( )
v n3 On en extrait le numérateur:
> rel:=numer(lhs(rel)-rhs(rel));
:=
rel v(n4)17 (v n3)101 (v n2)247 (v n1)210 ( )v n On trouve l'expression générale de v(n):
> v:=unapply(rsolve({rel,op(ci)},v),n);
:=
v n5
43n 1 45n On en déduit l'expression générale de u(n):
> u:=unapply(normal(u(n)),n);
:=
u n5 3(n1)5(n1)
5 3n 5n
On vérifie avec la fonction U définie précédemment:
> 'u'(100)=u(100); 'U'(100)=U(100);
( )
u 100
3944304526105059027057869760132833131369477483850466591942341492037311 788860905221011805411470876522420224007688204544140194133927876903062
( )
U 100
3944304526105059027057869760132833131369477483850466591942341492037311 788860905221011805411470876522420224007688204544140194133927876903062 Voici quelle est la "vraie" limite de la suite u:
> limit(u(n),n=infinity);
5
Voici maintenant comment fonctionnerait un calculateur numérique pour évaluer la suite u.
> badU:=proc(n::nonnegint) option remember;
if n<=2 then [2.5,2.0,0.5][n+1] else
17-101/badU(n-1)+247/(badU(n-2)*badU(n-1)) -210/(badU(n-3)*badU(n-2)*badU(n-1))
fi end:
Voici la liste des 10 premiers termes de la suite u "approchée"
> seq(badU(k),k=0..9);
2.5 2.0 0.5 -22.00000000 8.681818184 6.272251313 5.608514193 5.325494871, , , , , , , , 5.183360360 5.106124419,
Voici les valeurs approchées des termes u(10), u(20), u(50), u(100) (avec 20 chiffres significatifs), pour la suite "approchée".
On s'aperçoit qu'après avoir "frolé" la valeur 5, la suite approchée sembme tendre vers 7.
> Digits:=20: for k in [10,20,50,100] do 'badU'(k)=badU(k) od;
Digits:=10:
( )
badU 10 5.062351257
( )
badU 20 5.0003658247898992458
( )
badU 50 5.0034283726425609869
( )
badU 100 6.9999424808306039300
Voici une simulation graphique du phénomène (ici avec 10 chiffres significatifs) On a tracé de u(4) à u(150) (pour éliminer la valeur u(3) un peu anecdotique)
On voit bien un premier plateau à la valeur 5 (ou presque) puis un deuxième plateau qui se stabilise en la valeur 7.
> plot([seq([k,badU(k)],k=4..150)]);