Problème avec Maple

Répondre
Partager Rechercher
Pour ceux qui connaissent, Maple est un logiciel de calcul formel.
Mon problème : j'ai un système d'équations différentielles impossible à résoudre (du type x'=-y*x, y'=y*x+y), ou en tout cas trop difficile pour moi et pour Maple.
Mon but est d'obtenir une courbe montrant l'évolution de x(t) et y(t).

L'idée géniale : faire une boucle sur un intervalle de temps, avec un pas assez réduit, et lui faire afficher un point à chaque itération, jusqu'à obtenir une jolie courbe. Mais je ne sais pas comment programmer ça en Maple ...
J'ai bien réussi à obtenir un petit truc, en calculant toutes les valeurs puis en en sélectionnant quelques unes avec "$", mais c'est pas très précis, et vraiment trop lourd au niveau des calculs, ce qui m'empêche de faire quelques applications un peu plus compliquées.

Donc voila, si y a des utilisateurs chevronnés qui sauraient comment faire ...
Re: Problème avec Maple
Citation :
Provient du message de Greumlins
Problème avec Maple
Tout est dans le titre

Plus serieusement, tu a pas moyen de mettre toutes tes valeurs dans une matrice, et ensuite d'afficher les valeurs de la matrice ?

Enfin ca fait un bail que jai pas utilisé Maple, mais je doit encore avoir mes TPs qui trainent qq part a la fac, si jamais je trouves un truc utile je te passes ca lundi
Je réécris le problème sous la forme :
x'=f(x,y)
y'=g(x,y)
x(0)=x_0 et y(0)=y_0


L'algorithme
Soit dt = le pas de temps (par exemple dt=0.01)
Soit N = le nombre d'itération (si tu prends N=100 ça dessinera la solution jusqu'au temps t=1)
Tu fais :
x_0->A
y_0->B

pour i variant de 1 à N faire la boucle

début de boucle
A+dt*f(A,B)->C
B+dt*g(A,B)->D
tracer la ligne entre les points (A,B) et (C,D)
C->A
D->B
fin de la boucle


Edit : programme testé avec maple 7

with(plottools):
with(plots):
dt:=0.01:
N:=100:
L:=NULL:
A:=x_0:
B:=y_0:
for i to N do
C:=A+dt*f(A,B):
E:=B+dt*g(A,B):
L:=L,line([A,B],[C,E]);
A:=C:
B:=E:
od:
plots[display](L);
Citation :
Provient du message de Melchiorus

début de boucle
A+dt*f(A,B)->C
B+dt*g(A,B)->D
tracer la ligne entre les points (A,B) et (C,D)
C->A
D->B
fin de la boucle
La boucle, je l'avais, mais mon problème c'est justement pour tracer ...
Je connaissais pas l'instruction "line", avec ça ça devrait marcher.

Pour Grugnita : merci, mais faut que je fasse ça en Maple presqu'obligatoirement (ou sinon, en Caml, mais je connais pas encore ses fonctions graphiques).

Pour Sarga : gneu ? J'ai pas trop compris ... De toute façon, même si j'arrive à mettre les valeurs dans la matrice, faut quand même que j'arrive à en tirer une courbe, et ça promet d'être coton ...
Le truc, c'est que je veux les fonctions x(t) et y(t) en fonction du temps, donc il me faut 2 courbes !

Avec ça, j'obtiens quelques chose :
Citation :
A:=0.9: B:=0.1:
> for t from 0 to Tmax do
> dA:=-r*A*B; dB:=r*A*B-a*B:
> C:=A+dt*dA: d:=B+dt*dB:
> L1:=L1,line([t,A],[t+dt,C]):
> L2:=L2,line([t,B],[t+dt,d]):
> A:=C: B:=d:
> od:
Mais c'est pas très beau.

J'obtiens ça :
http://greumlins.free.fr/divers/maple1.jpg

Avec ma méthode de bourrin, j'obtiens ça, et je trouve trop "carré" :
http://greumlins.free.fr/divers/maple2.jpg
Citation :
A:=0.9: B:=0.1:
> for t from 0 to Tmax do
> dA:=-r*A*B; dB:=r*A*B-a*B:
> C:=A+dt*dA: d:=B+dt*dB:
> L1:=L1,line([t,A],[t+dt,C]):
> L2:=L2,line([t,B],[t+dt,d]):
> A:=C: B:=d:
> od:
Le problème est dans ton programme.

Tu fais : for t from 0 to Tmax do
t augmente de 1 à chaque boucle, alors qu'il devrait augmenter de dt.


Remplace le par : for t from 0 by dt to Tmax do
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés