next up previous contents index
suivant: Les séries monter: Les suites récurrentes définies précédent: Un exemple : la   Table des matières   Index

Suites récurrentes definies par une fonction de m variables

On suppose maintenant que la suite est définie par une relation de récurrence definie par une fonction f de m variables : pour définir la suite on se donne les m premiers termes :
u0, u1,.., um-1 et la relation :
un = f (un-m, un-m+1,.., un-1) pour n $ \geq$ m.
On veut calculer un, et on suppose que les valeurs de u0, u1,.., um-1 sont dans la liste l0.
On écrit :
urec(f,n,l0):={
local s,k,uk;
s:=size(l0);
l0:=op(l0);
for (k:=s;k<=n;k++) {
    uk:=f(l0);
    l0:=tail(l0),uk;
}
return uk;
}
On utilise op au début, pour transformer la liste l0 en une séquence et tail(l0) pour enlever le premier élément et ainsi l0:=tail(l0),uk est une séquence qui a toujours s éléments.

On peut aussi considérer que le paramètre l contient toutes les variables à savoir l = f, n, u0,.., um-1 . On écrit mais c'est inutilement compliqué (!) :

urecs(l):={
local f,n,s,k,uk;
f:=l[0];
n:=l[1];
l:=tail(tail(l));
s:=size(l);
//f est une fonction de s variables
for (k:=s;k<=n;k++) {
    uk:=f(l);
    l:=tail(l),uk;
}
return uk;
}

Pour avoir tous les termes uk de la suite pour k allant de 0 à n, On considère que le paramètre l contient toutes les variables à savoir l = f, n, u0,.., um-1.
On écrit :

urec_termes(l):={
local f,n,s,k,uk,lres;
f:=l[0];
n:=l[2];
l:=tail(tail(tail(l)));
s:=size(l);
//f est une fonction de s variables
lres:=l;
for (k:=s;k<=n;k++) {
    uk:=f(l);
    lres:=lres,uk;
    l:=tail(l),uk;
}
return lres;
}
Par exemple on définit :
f(x,y):=normal(x+y)
On tape :
urec_termes(f,5,1,1)
On obtient la suite de Fibonacci :
1,1,2,3,5,8
On tape :
urec_termes(f,5,1,(sqrt(5)+1)/2)
On obtient :
1,(sqrt(5)+1)/2,(sqrt(5)+3)/2,sqrt(5)+2,
(3*sqrt(5)+7)/2,(5*sqrt(5)+11)/2

On tape, pour vérifier que l'on a obtenu la suite géométrique de raison (sqrt(5)+1)/2 :
seq(normal(((sqrt(5)+1)/2)^k),k=0..5)
On obtient :
1,(sqrt(5)+1)/2,(sqrt(5)+3)/2,sqrt(5)+2,
(3*sqrt(5)+7)/2,(5*sqrt(5)+11)/2

Pour avoir tous les termes uk de la suite pour k allant de k0 à n, On considère que le paramètre l contient toutes les variables à savoir l = f, k0, n, u0,.., um-1.
On écrit :

urec_termekn(l):={
local f,n,s,k,uk,k0,lres;
f:=l[0];
k0:=l[1];
n:=l[2];
l:=tail(tail(tail(l)));
s:=size(l);
//f est une fonction de s variables
for (k:=s;k<k0;k++) {
    uk:=f(l);
    l:=tail(l),uk;
};
if k0>1 res:=NULL else 
  if k0==0 {res:=a,b;k0:=2;} else 
    if k0==1 {res:=b;k0:=2};
for (k:=k0;k<=n;k++) {
    uk:=f(l);
    lres:=lres,uk;
    l:=tail(l),uk;
}
return lres;
}
Par exemple on définit :
f(x,y):=normal(x+y)
On tape :
urec_termekn(f,5,10,1,1)
On obtient la suite de Fibonacci :
8,13,21,34,55,89
On tape :
urec_termes(f,5,9,1,(sqrt(5)+1)/2)
On obtient :
5*sqrt(5)+11)/2,4*sqrt(5)+9,(13*sqrt(5)+29)/2,
(21*sqrt(5)+47)/2,17*sqrt(5)+38


next up previous contents index
suivant: Les séries monter: Les suites récurrentes définies précédent: Un exemple : la   Table des matières   Index
Documentation de giac écrite par Renée De Graeve