Apprendre Maple Index du Forum Apprendre Maple
Site dédié au logiciel de calcul formel Maple
 
  Page d'accueilPage d'accueil   FAQFAQ    RechercherRechercher    Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs 
S'enregistrerS'enregistrer    ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Trace de fonctions à partir de sol équations différentielles

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Maple en analyse
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 18 Déc 2012 16:31    Sujet du message: Trace de fonctions à partir de sol équations différentielles Répondre en citant

Bonjour,

J'ai résolu numériquement un système d'équations différentielles de type ODE.

M*diff(v(t),t,t)+Kv(t)=...

avec v(t):=<z(t),alpha(t),beta(t)> (un vecteur à trois composantes)

J'ai du coup puis tracer les composantes de mon vecteur v(t) à savoir z(t),alpha(t),beta(t).

J'aimerais maintenant pouvoir tracer les fonctions gamma1(t), psi1(t), phi1(t), gamma2(t), ... dont j'ai les expressions en fonction de z(t), alpha(t) et beta(t) (voir plus loin dans mon code).

Problème : je n'ai pas l'expression explicite de z(t), alpha(t) et beta(t). J'ai pu seulement les tracer numériquement.

Par contre, je ne cherche pas non plus à avoir l'expression de gamma1(t).... J'aimerais seulement pouvoir les tracer connaissant leurs relations en fonction de z(t), alpha(t), beta(t).

Code:
restart:
with(LinearAlgebra):
with(Student[MultivariateCalculus]):
with(plots):
eq := [591.0596655*(diff(z(t), t, t))-74.52111888*(diff(alpha(t), t, t))+.306694576*(diff(beta(t), t, t)) = -10340.75873*z(t)+4547.450460*alpha(t)+7.534340754*10^(-7)-9.981362748*beta(t), -74.52111911*(diff(z(t), t, t))+651.6599947*(diff(alpha(t), t, t))+0.4493637197e-1*(diff(beta(t), t, t)) = 4547.450482*z(t)-3600.281384*alpha(t)-1.78071546*beta(t)-2.463320830*10^(-7), -1.79156781*(diff(z(t), t, t))+524.3648959*(diff(alpha(t), t, t))+58.29937041*(diff(beta(t), t, t)) = 1.401049556*10^(-7)-1.78071567*alpha(t)-37.21714178*beta(t)-9.981362048*z(t)];

Cinit:=D(z)(0)=0,z(0)=1,D(alpha)(0)=0,alpha(0)=0,D(beta)(0)=0,beta(0)=0;
   D(z)(0) = 0, z(0) = 1, D(alpha)(0) = 0, alpha(0) = 0, D(beta)(0) = 0,

     beta(0) = 0
sol:=dsolve({sys,Cinit},numeric);
proc(x_rkf45)  ...  end;
tz:=odeplot(sol,[t,z(t)],0..10,numpoints=200,color=blue,legend="z"):
display(tz);
talpha:=odeplot(sol,[t,alpha(t)],0..10,numpoints=200,color=blue,legend="alpha"):
display(talpha);
tbeta:=odeplot(sol,[t,alpha(t)],0..10,numpoints=200,color=blue,legend="beta"):
display(tbeta);

eq_liaison := [delta_gamma[1](t) = 11.49607803*z(t)-8.506242612*alpha(t)+5.098893804*beta(t), delta_psi[1](t) = -12.70120519*z(t)+10.63528704*alpha(t)-6.375106103*beta(t), delta_phi[1](t) = -3.366683824*10^(-10)*z(t)+.5110206786*alpha(t)+.8525115518*beta(t), delta_gamma[2](t) = 11.49607803*z(t)-8.506242612*alpha(t)-5.098893804*beta(t), delta_psi[2](t) = -12.70120519*z(t)+10.63528704*alpha(t)+6.375106103*beta(t), delta_phi[2](t) = 3.366683824*10^(-10)*z(t)-.5110206786*alpha(t)+.8525115518*beta(t), delta_gamma[3](t) = 9.500509585*z(t)+4.484548837*alpha(t)-3.689268280*beta(t), delta_psi[3](t) = -10.42343752*z(t)-5.952605138*alpha(t)+4.896982531*beta(t), delta_phi[3](t) = -1.500311843*10^(-10)*z(t)-.6971644895*alpha(t)-.8474494025*beta(t), delta_gamma[4](t) = 9.500509586*z(t)+4.435516292*alpha(t)+3.748076031*beta(t), delta_psi[4](t) = -10.42343752*z(t)-5.887521360*alpha(t)-4.975041513*beta(t), delta_phi[4](t) = -5.542485671*10^(-10)*z(t)+.7082774450*alpha(t)-.8381836770*beta(t)];
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 19 Déc 2012 7:09    Sujet du message: Répondre en citant

Bonjour, votre code produit une erreur.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 19 Déc 2012 9:42    Sujet du message: Répondre en citant

Bonjour,

Oui en effet désolé.
J'ai du faire un mauvais copier/coller.
Je pense que maintenant çà va aller.

Code:

restart:
with(LinearAlgebra):
with(Student[MultivariateCalculus]):
with(plots):
eq := [591.0596655*(diff(z(t), t, t))-74.52111888*(diff(alpha(t), t, t))+.306694576*(diff(beta(t), t, t)) = -10340.75873*z(t)+4547.450460*alpha(t)+7.534340754*10^(-7)-9.981362748*beta(t), -74.52111911*(diff(z(t), t, t))+651.6599947*(diff(alpha(t), t, t))+0.4493637197e-1*(diff(beta(t), t, t)) = 4547.450482*z(t)-3600.281384*alpha(t)-1.78071546*beta(t)-2.463320830*10^(-7), -1.79156781*(diff(z(t), t, t))+524.3648959*(diff(alpha(t), t, t))+58.29937041*(diff(beta(t), t, t)) = 1.401049556*10^(-7)-1.78071567*alpha(t)-37.21714178*beta(t)-9.981362048*z(t)];
sys:=seq(eq[i],i=1..3);
Cinit:=D(z)(0)=0,z(0)=1,D(alpha)(0)=0,alpha(0)=0,D(beta)(0)=0,beta(0)=0;
sol:=dsolve({sys,Cinit},numeric);
tz:=odeplot(sol,[t,z(t)],0..10,numpoints=200,color=blue,legend="z"):
display(tz);
talpha:=odeplot(sol,[t,alpha(t)],0..10,numpoints=200,color=blue,legend="alpha"):
display(talpha);
tbeta:=odeplot(sol,[t,alpha(t)],0..10,numpoints=200,color=blue,legend="beta"):
display(tbeta);


merci d'avance pour votre aide
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 19 Déc 2012 14:45    Sujet du message: Répondre en citant

Bonjour,
Oui maintenant, cela fonctionne. Vous rajoutez les lignes suivantes au code pour récupérer les listes lz, lalpha et lbeta des points des 3 courbes tz, talpha, tbeta.
Pour cela, je vais chercher à l'intérieur de la structure de chaque objet graphique en récupérant les tableaux des points enregistrés uz, ualpha et ubeta, que je transfome ensuite en [abscisse, ordonnée].


Code:

> uz := ArrayElems(op(1, op(1, tz))):
> lz:=[seq([op(map(x->rhs(x), convert(uz[2*k .. 2*k+1], list)))], k = 1 .. 1/2*nops(uz))];

> ualpha := ArrayElems(op(1, op(1, talpha)));
> lalpha:=[seq([op(map(x->rhs(x), convert(ualpha[2*k+1 .. 2*k+2], list)))], k = 0 .. 1/2*nops(ualpha)-1)];

> ubeta := ArrayElems(op(1, op(1, tbeta))):
> lbeta:=[seq([op(map(x->rhs(x), convert(ubeta[2*k+1 .. 2*k+2], list)))], k = 0 .. 1/2*nops(ubeta)-1)];



Je n'ai pas les relations en fonction de z(t), alpha(t) et beta(t) des fonctions gamma1(t), psi1(t), phi1(t), gamma2(t), ...

A+
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 19 Déc 2012 14:59    Sujet du message: Répondre en citant

En fait, les relations étaient dans mes dernières de code.

Code:
eq_liaison := [delta_gamma[1](t) = 11.49607803*z(t)-8.506242612*alpha(t)+5.098893804*beta(t), delta_psi[1](t) = -12.70120519*z(t)+10.63528704*alpha(t)-6.375106103*beta(t), delta_phi[1](t) = -3.366683824*10^(-10)*z(t)+.5110206786*alpha(t)+.8525115518*beta(t), delta_gamma[2](t) = 11.49607803*z(t)-8.506242612*alpha(t)-5.098893804*beta(t), delta_psi[2](t) = -12.70120519*z(t)+10.63528704*alpha(t)+6.375106103*beta(t), delta_phi[2](t) = 3.366683824*10^(-10)*z(t)-.5110206786*alpha(t)+.8525115518*beta(t), delta_gamma[3](t) = 9.500509585*z(t)+4.484548837*alpha(t)-3.689268280*beta(t), delta_psi[3](t) = -10.42343752*z(t)-5.952605138*alpha(t)+4.896982531*beta(t), delta_phi[3](t) = -1.500311843*10^(-10)*z(t)-.6971644895*alpha(t)-.8474494025*beta(t), delta_gamma[4](t) = 9.500509586*z(t)+4.435516292*alpha(t)+3.748076031*beta(t), delta_psi[4](t) = -10.42343752*z(t)-5.887521360*alpha(t)-4.975041513*beta(t), delta_phi[4](t) = -5.542485671*10^(-10)*z(t)+.7082774450*alpha(t)-.8381836770*beta(t)];


C'est un système donnant plutôt gamma1(t), psi1(t), phi1(t), gamma2(t), ... en fonction de z(t), alpha(t) et beta(t).

Je veux bien encore un petit coup de pouce pour l'obtention de gamma1(t), psi1(t), phi1(t), gamma2(t), ...

Merci d'avance pour votre aide
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 20 Déc 2012 14:11    Sujet du message: Répondre en citant

Bonjour,

Il suffit de rajouter le code suivant :

Code:

> listefonctions := [seq(lhs(op(k, eq_liaison)), k = 1 .. nops(eq_liaison))];
  listeexpressions := [seq(rhs(op(k, eq_liaison)), k = 1 .. nops(eq_liaison))];

> for k to nops(listefonctions) do
     expr := listeexpressions[k];
     t[listefonctions[k]] := NULL;
     for i to nops(lz) do
        t[listefonctions[k]] := t[listefonctions[k]], [lz[i][1], coeff(expr, z(t))*lz[i][2]+coeff(expr, alpha(t))*lalpha[i][2]+coeff(expr, beta(t))*lbeta[i][2]]
     end do;
     t[listefonctions[k]] := [t[listefonctions[k]]];
     display(plot(t[listefonctions[k]], legend = listefonctions[k]))
  end do;



Ca fonctionne bien, je l'ai testé.
Maintenant, comme j'ai passé du temps avec votre problème, je vais je l'espère pouvoir bénéficier de la trêve des confiseurs.
Alors à l'année prochaine.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 20 Déc 2012 20:22    Sujet du message: Répondre en citant

Merci pour votre aide et bonnes fêtes.
J'aurais eu du mal à écrire cette partie de code.
De plus, vous avez réussi à faire un code assez synthétique.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Maple en analyse Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


phpBB

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com


Apprendre Maple - ©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.