Page 1 sur 1

Opérateur sur une suite

Publié : mer. nov. 14, 2012 4:25 pm
par Denizou
Bonjour,

Je souhaiterai à partir d'une série alternée de terme général (-1)^k U(k) l'accélérer avec la transformée d'Euler. Pour cela j'avais pensé définir l'opérateur sur U : D(U)(k):=U(k)-U(k+1) pour pour pouvoir le composer avec @@ et faire calculer à Xcas sum((D@@k)(U)(0)/2^(k+1),k=0..1000) par exemple.

Je tape donc D(U)(k):=U(k)-U(k+1) (U n'étant a priori pas définie) Xcas renvoie "sto (D(U))(k)=U(k)-(U(k+1)) not allowed! Erreur: Type Argument Incorrect"

J'ai cru qu'il fallait définir U ( U(k):=1/(k+1) par exemple) mais j'ai alors "unapply(U(k)-(U(k+1))) dans D( (k)->(-1)^k/(k+1)) instruction #1 erreur, essayez debug(D( (k)->(-1)^k/(k+1)))
Type Argument Incorrect"

J'ai essayé D(U,k):=unapply(U(k)-U(k+1),U) je ne peux pas composer puisque D(U,0) renvoie en fait la fonction constante 3/2

J'ai alors essayé D(U):=unapply(U(k)-U(k+1),U) que Xcas interprète mais D(U)(0) renvoie 0 (j'avoue que je ne vois pas pourquoi)

Si j'essaie avec U:=1/(k+1) alors D(U)(0) renvoie 1/(k(k)+1)-(1/(k(k+1)+1)) et 0 n'a visiblement pas été à k...

Ma question est donc comment puis - je définir un opérateur sur une suite de manière à pouvoir le composer et faire calculer D^k(U)(n) sans chercher les coefficients des U(ni) (c'est à dire faire faire les calculs à Xcas sans avoir besoin de réfléchir).

Merci par avance

Re: Opérateur sur une suite

Publié : mer. nov. 14, 2012 4:57 pm
par parisse
D(U):=unapply(U(k+1)-U(k),k)
Ensuite D(U)(n) renvoie bien U(n+1)-(U(n)) si U n'est pas définie, et si par exemple U(n):=1/n alors D(U)(n) renvoie 1/(n+1)-1/n et par exemple (D@@3)(U)(n) renvoie 1/(n+3)-(1/(n+2))-(1/(n+2))+1/(n+1)-(1/(n+2))+1/(n+1)+1/(n+1)-(1/n)

Attention toutefois, D@@k est très couteux à exécuter, il vaudra mieux faire une boucle et calculer successivement les D(D(...(D())))) dans une boucle que de faire une sum sur des D@@k

Re: Opérateur sur une suite

Publié : mer. nov. 14, 2012 6:33 pm
par Denizou
parisse a écrit :D(U):=unapply(U(k+1)-U(k),k)
Effectivement, j'avais mal utilisée unapply

Attention toutefois, D@@k est très couteux à exécuter, il vaudra mieux faire une boucle et calculer successivement les D(D(...(D())))) dans une boucle que de faire une sum sur des D@@k
je confirme !

Merci de la rapidité de votre réponse.

Re: Opérateur sur une suite

Publié : mer. nov. 14, 2012 6:39 pm
par Denizou
Au fait, pourquoi la première expression D(U)(k):=U(k)-U(k+1) n'est-elle pas acceptée ?

Re: Opérateur sur une suite

Publié : mer. nov. 14, 2012 7:05 pm
par parisse
Il faudrait debugguer au niveau du parser pour savoir précisément pourquoi cette erreur est retournée, mais c'est sur que c'est invalide, car on ne sait pas si on définit U->D(U) ou k->D(U)(k).