|
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: 27 Déc 2013 0:05 Sujet du message: manipulation trigonométrique 2 |
|
|
Bonjour,
Dans un problème de mécanique, je dois traiter résoudre un système d'équations trigonométriques (donc forcément non linéaires). Les variables sont gamma[1](t), psi[1](t), phi[1](t), alpha(t), beta(t), x(t). Les autres sont des paramètres..
J'aimerais obtenir des relations explicites entre gamma[1](t), psi[1](t), phi[1](t) et alpha(t), beta(t), x(t).
En d'autres termes, j'aimerais avoir
gamma[1](t)= f(alpha(t), beta(t), z(t) ).
psi[1](t)= f(alpha(t), beta(t), z(t)).
phi[1](t)= f(alpha(t), beta(t), z(t)).
Bien sur, ces expressions de alpha(t), beta(t), et x(t) seront très complexes. Néanmoins, celà me permettrait d'éviter de résoudre des algorithmes numériques pour résoudre ces équations de contraintes.
Normalement, celà doit être faisable.
Lorsque l'on a seulement une équation et pas un système, vous m'avez appris que la fonction isolate est très utile.
Mais, dans ce cas, je ne réussis pas à avoir mes relations.
Avez-vous des idées pour obtenir ces relations ?
gamma[1](t)= f(alpha(t), beta(t), z(t) ).
psi[1](t)= f(alpha(t), beta(t), z(t)).
phi[1](t)= f(alpha(t), beta(t), z(t)).
Voici le code des expressions de contraintes
Code: |
restart:
with(LinearAlgebra):
with(Student[MultivariateCalculus]):
with(plots):
constants:= ({constants} minus {gamma})[]:
`evalf/gamma`:= proc() end proc:
`evalf/constant/gamma`:= proc() end proc:
unprotect(gamma);
eq_liai[1]:= rF[1]*cos(a[1])-cos(a[1])*cos(gamma[1](t))*e[1]-l[1]*(cos(phi[1](t))*cos(a[1])*cos(gamma[1](t))*cos(psi[1](t))-cos(phi[1](t))*cos(a[1])*sin(gamma[1](t))*sin(psi[1](t))-sin(a[1])*sin(phi[1](t)))-cos(alpha(t))*rBTP[1]*cos(a[1])-sin(alpha(t))*sin(beta(t))*rBTP[1]*sin(a[1])-sin(alpha(t))*cos(beta(t))*h = 0;
eq_liai[2]:= rF[1]*sin(a[1])-sin(a[1])*cos(gamma[1](t))*e[1]-l[1]*(cos(phi[1](t))*sin(a[1])*cos(gamma[1](t))*cos(psi[1](t))-cos(phi[1](t))*sin(a[1])*sin(gamma[1](t))*sin(psi[1](t))+cos(a[1])*sin(phi[1](t)))-cos(beta(t))*rBTP[1]*sin(a[1])+sin(beta(t))*h = 0;
eq_liai[3] := h[1]+sin(gamma[1](t))*e[1]+l[1]*(sin(gamma[1](t))*cos(psi[1](t))+cos(gamma[1](t))*sin(psi[1](t)))*cos(phi[1](t))+sin(alpha(t))*rBTP[1]*cos(a[1])-cos(alpha(t))*sin(beta(t))*rBTP[1]*sin(a[1])-cos(alpha(t))*cos(beta(t))*h-z(t) = 0;
|
ou directement avec le fichier maple en copie
Merci pour votre aide. |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 27 Déc 2013 9:13 Sujet du message: |
|
|
Bonjour,
En remplaçant cos(gamma[1](t))=C1(t),cos(psi[1](t))=C2(t),cos(phi[1](t))=C3(t),sin(gamma[1](t))=S1(t),sin(psi[1](t))=S2(t),sin(phi[1](t))=S3(t), on obtient un système sys2 que l'on peut résoudre par la fonction solve.
Code: |
> sys:={eq_liai[1],eq_liai[2],eq_liai[3]}:
> sys2:=subs(cos(gamma[1](t))=C1(t),cos(psi[1](t))=C2(t),cos(phi[1](t))=C3(t),sin(gamma[1](t))=S1(t),sin(psi[1](t))=S2(t),sin(phi[1](t))=S3(t),sys);
> solve(sys2,{C1(t),C2(t),C3(t),S1(t),S2(t),S3(t)}) assuming C1(t)^2+S1(t)^2=1,C2(t)^2+S2(t)^2=1,C3(t)^2+S3(t)^2=1;
|
On pourra en déduire tan(gamma[1](t)) puis gamma[1](t), etc... en fonction de alpha(t),beta(t),gamma(t).
Piste à creuser... |
|
Revenir en haut de page |
|
|
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 29 Déc 2013 0:07 Sujet du message: |
|
|
Bonjour,
J'ai lancé la résolution du système.
J'avoue que j'ai du mal à analyser la solution.
Il semblerait qu'il y ait deux groupes de solutions.
Questions :
1) quel groupe serait le bon?
2) Si on prend par exemple le groupe 1, C2(t)=C2(t) et S2(t)=S2(t) on ne peut donc pas extraire psi(t)?
De même pour le deuxième groupe de solutions où C1(t)=C1(t) et S1(t)=S1(t)
3) Certains C1(t)^2+S1(t)^2 ne semblent pas simplifier à 1
Si tu as d'autres conseils pour la résolution de ce système, je suis bien sur très intéressé.
Je te remercie pour ton aide.[/code] |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 29 Déc 2013 10:24 Sujet du message: |
|
|
Bonjour,
Oui effectivement, ça me semble compliqué à exploiter au vu des résultats affichés par Maple.
L'idée par contre de résoudre le système en les variables cos(gamma[1](t))=C1(t),... me parait bonne.
Peut-être remplacer les sinus par des racines carrées de 1-cos^2, à condition qu'ils soient positifs?
A+ |
|
Revenir en haut de page |
|
|
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 29 Déc 2013 16:09 Sujet du message: |
|
|
Cà avance. On a l'air de s'approcher
J'ai pu revoir des techniques de simplification des équations de contraintes que j'avais vu en cours d'agreg. Il y a un moment maintenant.
Pour mieux comprendre, voici un extrait de la méthode de construction de mes équations de contraintes.
https://www.nextsend.com/download/lbziyOi2qIKY586r57ugYNnH1Z6UuKV6npure7FZbKaXfq+DZlOs/
Une des techniques pour obtenir les relations que je souhaite est de faire directement sur l'équation vectorielle de fermeture des manipulations. En l’occurrence, il s'agit ici de calculer la norme de BC². Celà permet d'avoir une relation directement entre gamma[i] et alpha, beta, z.
Sur le lien suivant, voici les manipulations effectuées ainsi que l'obtention des équations de contraintes.
https://www.nextsend.com/download/lbziyOi2qIKY586r57ugYNnH1Z6UuKV6npure7JQZKaXfq+DZlSk/
J'arrive donc à une relation entre gamma[i] et alpha, beta, z. Je pourrais ensuite exprimer psi et phi en fonction de alpha, beta, z à partir des équations de contraintes.
Code: | DotProduct(BC_BB[1], BC_BB[1], conjugate = false)=simplify(DotProduct(-(OFA_F[1]+AB_F[1]+COBTP_F[1]+OBTPOF_F), -(OFA_F[1]+AB_F[1]+COBTP_F[1]+OBTPOF_F), conjugate = false));
2 2
l[1] = 2 cos(beta(t)) cos(a[1]) rBTP[1] rF[1]
- 2 cos(gamma[1](t)) e[1] rF[1] - 2 cos(beta(t)) rBTP[1] rF[1]
2 2 2 2 2 2
+ h + rF[1] + e[1] + rBTP[1] + h[1] + z(t) - 2 z(t) h[1]
2
- 2 cos(beta(t)) cos(a[1]) cos(gamma[1](t)) e[1] rBTP[1]
+ 2 z(t) cos(alpha(t)) sin(beta(t)) sin(a[1]) rBTP[1]
- 2 sin(alpha(t)) cos(beta(t)) cos(a[1]) h rF[1]
+ 2 sin(alpha(t)) cos(a[1]) sin(gamma[1](t)) e[1] rBTP[1]
- 2 cos(alpha(t)) sin(beta(t)) sin(a[1]) h[1] rBTP[1]
- 2 cos(alpha(t)) cos(beta(t)) sin(gamma[1](t)) h e[1]
- 2 sin(beta(t)) sin(a[1]) cos(gamma[1](t)) h e[1]
2
+ 2 cos(alpha(t)) cos(a[1]) cos(gamma[1](t)) e[1] rBTP[1]
- 2 z(t) sin(gamma[1](t)) e[1] + 2 sin(gamma[1](t)) e[1] h[1]
+ 2 cos(beta(t)) cos(gamma[1](t)) e[1] rBTP[1]
2
- 2 cos(alpha(t)) cos(a[1]) rBTP[1] rF[1]
- 2 z(t) sin(alpha(t)) cos(a[1]) rBTP[1]
+ 2 z(t) cos(alpha(t)) cos(beta(t)) h
+ 2 sin(alpha(t)) cos(a[1]) h[1] rBTP[1]
- 2 cos(alpha(t)) cos(beta(t)) h h[1]
+ 2 sin(beta(t)) sin(a[1]) h rF[1]
- 2 sin(alpha(t)) sin(beta(t)) cos(a[1]) sin(a[1]) rBTP[1] rF[
1]
+ 2 sin(alpha(t)) cos(beta(t)) cos(a[1]) cos(gamma[1](t)) h e[
1] - 2 cos(alpha(t)) sin(beta(t)) sin(a[1]) sin(gamma[1](t)) e[
1] rBTP[1] + 2 sin(alpha(t)) sin(beta(t)) cos(a[1]) sin(a[1])
cos(gamma[1](t)) e[1] rBTP[1] |
Le seul soucis qui me reste maintenant est que sur l'équation obtenue la fonction isolate pour obtenir gamma[i] en fonction de alpha, beta, z n'aboutit pas. Maple calcule mais le calcul ne se termine jamais.
Code: | isolate(%,gamma[1](t));
Warning, computation interrupted |
As tu des idées par rapport à la fonction isolate qui bloque ? Peut-être il faut que je fasse la technique à la main ?
Citation: | A(alpha, béta, z) cos yi + B(alpha, béta, z) sin yi + C(alpha, béta, z) = 0, qui se résout explicitement ou presque en posant :
cos t = A/(A**2+B**2)**(1/2)
sin t = B/(A**2+B**2)**(1/2)
il vient :
cos(yi-t) = -C/(A**2+B**2)**(1/2) |
En tout cas, merci beaucoup pour ton aide. |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 30 Déc 2013 10:37 Sujet du message: |
|
|
Bonjour,
Je n'arrive pas non plus à isoler gamma[1](t) sous Maple 17.
Sinon, ton idée de transformer une expression du type A cos x + B sin x en K cos(x+phi) avec K=(A^2+B^2)^(1/2) est intéressante.
J'ai essayé de la mettre en oeuvre mais je n'arrive pas à récupérer les coefficients en cos et sin de gamma[1](t) dans l'équation.
La fonction coeff ne marche que pour des polynômes.
On approche du but, courage! |
|
Revenir en haut de page |
|
|
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 31 Déc 2013 11:18 Sujet du message: |
|
|
Encore quelques avancées.
J'ai trouvé une difficulté avec l'utilisation de la fonction coeff. Cette fonction ne marche pas sur des équations mais sur des expressions.
Par mail, je vous envoie donc le code qui marche.
J'ai pu déterminer gamma[1](t) en fonction de alpha(t), beta(t) and z(t).
Il me reste maintenant à exprimer :
psi[1](t) en fonction de alpha(t), beta(t) and z(t).
et phi[1](t) en fonction de alpha(t), beta(t) and z(t).
Normalement, çà devrait être plus facile que les manipulations faites pour obtenir gamma[1](t).
Pour faire çà, je dois utiliser les trois premières équations de mon programme eq_liaison[1, 1],eq_liaison[1, 2],eq_liaison[1, 3].
J'ai, par contre, des difficultés pour savoir dans quel ordre je dois manipuler mes équations. Il y a là aussi peut-être une astuce visant à faire une projection bien choisie sur un axe de l'équation vectorielle.
Par mail, je t'envoie le dernier état de mon programme.
Aurais-tu des idées pour obtenir
psi[1](t) en fonction de alpha(t), beta(t) and z(t).
et phi[1](t) en fonction de alpha(t), beta(t) and z(t) ?
Merci pour ton aide. |
|
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.
|