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
Opérateur sur une suite
Modérateur : xcasadmin
Re: Opérateur sur une suite
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
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
je confirme !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
Merci de la rapidité de votre réponse.
Re: Opérateur sur une suite
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
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).