 |
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 18 Déc 2012 11:50 Sujet du message: Formation de matrices à partir d'équations |
|
|
Bonjour,
J'ai un système d'équations différentielles du type :
M*diff(v(t),t,t)+Kv(t)=...
avec v(t):=<z(t),alpha(t),beta(t)> (un vecteur à trois composantes)
J'aimerais à partir de mes trois équations retrouver les matrices M et K de mon système d'équations différentielles.
Voici les lignes de code que j'ai faites en m'inspirant des postes précédents.
Code: |
sys := 591.0596655*(diff(z(t), t, t))-74.52111888*(diff(alpha(t), t, t))+.306694576*(diff(beta(t), t, t)) = -7.534340754*10^(-7)+10340.75873*z(t)-4547.450460*alpha(t)+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)) = 2.463320830*10^(-7)-4547.450482*z(t)+3600.281384*alpha(t)+1.78071546*beta(t), -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);
v:=<z(t),alpha(t),beta(t)>;evalm(v);
v_dd:=map(h->diff(h,t,t),v): evalm(v_dd);
sys:=[sys];
M:=NULL:
K:=NULL:
for eq in sys do
LM:=NULL:
for c in v_dd do
LM:=LM,sign(c)*coeff(lhs(eq)-rhs(eq),`if`(sign(c)>0,c,-c))
od:
M:=M,[LM]:
od:
for eq in sys do
LK:=NULL:
for c in v do
LK:=LK,sign(c)*coeff(lhs(eq)-rhs(eq),`if`(sign(c)>0,c,-c))
od:
K:=K,[LK]:
od:
M:=Matrix([M]):
evalm(M);
K:=Matrix([K]):
evalm(K);
|
J'obtiens le message d'erreur suivant :
Error, unable to compute coeff
Est-ce que vous voyez l'erreur ?
Merci d'avance pour votre aide. |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 18 Déc 2012 12:12 Sujet du message: |
|
|
Bonjour,
Non, l'erreur apparait illogique étant donné que cela fonctionne très bien pour la matrice M.
J'ai contourné le problème en ne faisant pas intervenir lhs(eq) pour le calcul de K, ce qui n'est pas gênant vu qu'il n'y a pas z(t),... mais z"(t),... dans le premier membre de eq.
Code: |
> sys := 591.0596655*(diff(z(t), t, t))-74.52111888*(diff(alpha(t), t, t))+.306694576*(diff(beta(t), t, t)) = -7.534340754*10^(-7)+10340.75873*z(t)-4547.450460*alpha(t)+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)) = 2.463320830*10^(-7)-4547.450482*z(t)+3600.281384*alpha(t)+1.78071546*beta(t), -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);
> v:=<z(t),alpha(t),beta(t)>;evalm(v);
> v_dd:=map(h->diff(h,t,t),v): evalm(v_dd);
> sys:=[sys];
> M:=NULL:
> K:=NULL:
> for eq in sys do
> LM:=NULL:
> for c in v_dd do
> LM:=LM,sign(c)*coeff(lhs(eq)-rhs(eq),`if`(sign(c)>0,c,-c))
> od:
> M:=M,[LM]:
> od:
> M:=Matrix([M]):
> evalm(M);
> for eq in sys do
> LK:=NULL:
> for c in v do
> LK:=LK,-coeff(rhs(eq),c)
> od:
> K:=K,[LK]:
> od:
> K:=Matrix([K]):
> evalm(K);
|
A+ |
|
Revenir en haut de page |
|
 |
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 18 Déc 2012 16:20 Sujet du message: |
|
|
Ok merci.
C'est bizarre en effet mais déjà on peut continuer. |
|
Revenir en haut de page |
|
 |
|
|
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
|

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.
|