bizarrerie avec sequence

jeandavid54 shared this question 1 year ago
Answered

Bonjour,

j'ai une fonction que j'essaie faire une approximation de fonction avec la méthode euler

mais j'ai un problème à l'exécution d'une séquence sur une liste de points.

ma fonction : f(x)=e^(-0.5*x) et sa dérivée f'(x)

Liste1={(0,f(0)} //mon premier point

liste1=CopyFreeObject(Liste1) //liste dynamique

l=Length(liste1)

et je rajoute avec setvalue le point suivant à partir des coordonnées du premier point

point suivant = (x+h, y+h*f(x))

h=0.1 le pas

n=2 répétition de ma séquence

Execute({"liste1=CopyFreeObject(Liste1)","l=Length(liste1)"}) // initialisation avant sequence

Execute({"Sequence(SetValue(liste1,l+1,(x(Element(liste1,l))+h,y(Element(liste1,l))+h*f'(x(Element(liste1,l))))),i,1,n)"})

Là tout va bien !

même quand je réexécute plusieurs fois la commande ci-dessus !

si je mets n=3

Execute({"liste1=CopyFreeObject(Liste1)","l=Length(liste1)","Sequence(SetValue(liste1,l+1,(x(Element(liste1,l))+h,y(Element(liste1,l))+h*f'(x(Element(liste1,l))))),i,1,n)"})

Là ça ne va plus !!

La séquence me pond n'importe quoi !

pour n > 2 j'ai plus une liste de points correcte ! Pourquoi ?

Comments (4)

photo
1

Bonsoir,

je n'ai pas la réponse mais une autre suggestion :


liste1=CopyFreeObject(IterationList((x(A)+h,y(A)+h f'(x(A))), A,{(0,f(0))},n)).


ou dans l'esprit de ce que tu as proposé mais en mettant toutes les commandes au "même niveau" :


Execute(Flatten({{"liste1=CopyFreeObject(Liste1)", "l=Length(liste1)"}, Sequence("SetValue(liste1,l+1,(x(Element(liste1,l))+h,y(Element(liste1,l))+h*f'(x(Element(liste1,l)))))",i,1,n)}))

photo
1

Merci ! La première commande est super compacte et efficace !

oui, ça marche mieux ! en effet !

mais avec flatten + liste de liste + séquence (qui n'est plus entre guillemets ?) // bref je suis un perdu mais c'est pas grave

merci encore

photo
1

Je précise donc :

- à l'origine tu exécutais une liste de 3 commandes :

1) l'affectation, à liste1, de la copie libre de la liste,

2) l'affectation, à l, de la longueur de liste1

3) UNE commande constituée d'une liste de commandes (dont chacune d'entre elles n'est pas au même niveau que celles du 1) et 2) : peut être que l ou liste1 n'est pas réactualisé à chacune d'entre elles mais seulement une fois.

- J'ai opté pour écrire une seule liste de n+2 commandes uniques (donc au même niveau, donc plus de chance que les précédentes soient réactualisées) en mettant à plat

{1) , 2)} et CHACUNE des commandes qui se trouvaient dans ta séquence du 3)

c'est pour cela que j'ai utilisé Sequence("<commandes>",,,) plutôt que "Sequence(<commandes>,,,)" (les guillemets sont toujours là car Execute ne peut utiliser qu'une liste de textes)

- mais c'est peut être un hasard et la raison pour laquelle cela ne marchait pas avant et cela marche après, est ailleurs.

photo
1

Ok merci c'est plus clair avec sequence !

photo
© 2019 International GeoGebra Institute