Simple site définie par récurrence

TheJoker

Simple site définie par récurrence

Message par TheJoker » 26 mars 2006 15:18

Bonjour à tous,

J'ai la suite réelle suivante :
u(0) = 0, u(1)=0, u(2)=1, u(n+2)= - u(n+1) + 5u(n) - 3u(n-1).

Je dois élaborer un programme Maple permettant de calculer u(15).

Je me suis dit autant calculer u(n) ! ^^ (De toute façon dans la programmation du truc ça revient au même).
Voilà ce que j'ai pondu :

Code : Tout sélectionner

u := proc (n)
local i, result00, result0;
global result;
result00 := 0;
result0 := 0;
result := 1;
if n = 0 then result := result00 elif n = 1 then result := result0 elif n>2 then
for i from 3 to n do
result := -1*result + 5*result0 - 3*result00;
result00 := result0;
result0 := result;
od; fi;
print(result);
end;
Pour u(0), u(1) et u(2) il me retourne bien les bonnes valeurs (évidemment, vu mon "if"), mais après ça se gâte tout de suite : u(3) retourne -1 au lieu de 4 !

Quelqu'un pourrait-il m'aider ? :)
Merci par avance.

tomato

Message par tomato » 26 mars 2006 15:33

Et pourquoi pas -1 ?

TheJoker

Message par TheJoker » 26 mars 2006 15:40

Oui pardon je dis n'importe quoi : ça marche pour u(3) !

C'est à partir de u(4) qu'il déraille : il répond -4 au lieu de 6.

tomato

Message par tomato » 26 mars 2006 16:07

C'est peut être parce que tu affectes à result0 le résultat du calcul (result) au lieu de l'ancien result. Essaie avec une variable locale supplémentaire ptet.

TheJoker

Message par TheJoker » 26 mars 2006 16:56

C'est peut être parce que tu affectes à result0 le résultat du calcul (result) au lieu de l'ancien result. Essaie avec une variable locale supplémentaire ptet.
Ben justement, c'est fait exprès !

Pour moi :
- result correspond à u(n)
- result0 correspond à u(n-1)
- result00 correspond à u(n-2)
(en gros, c'est juste pour donner l'idée)

Donc après avoir calculé u(n) [result], je dois bien le mettre dans u(n-1) [result0] ainsi que l'ancien u(n-1) dans u(n-2) pour la boucle suivante...

Invité

Message par Invité » 26 mars 2006 18:18

le probleme vient a mon avis de la
result := -1*result + 5*result0 - 3*result00;
result00 := result0;
result0 := result;

dans la derniere ligne c'est a mon avis la valeur de result avant la modification que tu devrais mettre nan ? il faudrait alors mettre une variable de 'transfert' qui donnerait un truc comme ca :

t:=result;
result := -1*result + 5*result0 - 3*result00;
result00 := result0;
result0 := t;

TheJoker

Message par TheJoker » 26 mars 2006 19:11

Effectivement, ça marche avec ça, même si je ne comprends pas pourquoi il ne faut pas mettre la nouvelle valeur de result (u(n)) dans result0 (u(n-1)) pour la boucle suivante... Enfin bon, tant pis, y'a des choses comme ça que je ne comprendrai jamais de ma vie ! :lol:

Merci en tout cas ! :)

Répondre