Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 24 Oct 2013 12:56 Sujet du message: Résolution DAE (2) |
|
|
Bonjour,
Ce post fait suite au poste Résolution DAE.
Je cherche à résoudre une DAE que j'obtiens suite à la mise en équations d'un système mécanique bouclée.
Pour ce faire, j'utilise la méthode des partitions de coordonnées afin de transformer ma DAE en ODE.
Les opérations suivantes sont réalisées :
Enfin, je dois faire des calculs matriciels comprenant des inversions de matrices sur de grosses matrices et comportant des fonctions trigonométriques.
Pour exemple, Auu est une matrice 12*12.
Le calcul n'arrive pas se faire dans maple.
J'obtiens :
J'ai apparemment un problème d'allocation mémoire.
C'est dommage car pour un système plus simple, j'ai pu appliqué la méthode.
Y a t il une technique pour simplifier les inversions de matrices (comprenant des fonctions trigo du genre cos(gamma(t)) ... et avec d'autres paramètres) ?
En fait, j'ai l'impression que la difficulté de maple provient du fait qu'il cherche des expressions analytiques des matrices inversions.
Or je n'en ai pas forcément besoin car derrière je cherche à résoudre numériquement un système d'équations différentiels.
Avez-vous des idées ? notamment pour pouvoir effectuer ces calculs matrices A chapeau et Q chapeau (cf impression écran)
Code: | AA:=evalm(Avv-Avu&*MatrixInverse(Cu)&*Cv+tCv&*MatrixInverse(tCu)&*Auu&*MatrixInverse(Cu)&*Cv-tCv&*MatrixInverse(tCu)&*Auv);
Error, (in trig/reduce/reduce) Maple was unable to allocate enough memory to complete this computation. Please see ?alloc
QQ:=evalm(Qqv_Bv-Avu&*MatrixInverse(Cu)&*DD+tCv&*MatrixInverse(tCu)&*Auu&*MatrixInverse(Cu)&*DD-tCv&*MatrixInverse(tCu)&*Qqu_Bu);
Error, (in type/SymbolicInfinity) Maple was unable to allocate enough memory to complete this computation. Please see ?alloc
|
Je vous remercie pour votre aide.
J'espère avoir pu être suffisamment compréhensible |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 24 Oct 2013 16:40 Sujet du message: |
|
|
Bonjour,
Voir dans l'aide alloc ou efficienty.
Sinon, on peut forcer le calcul non littéral en rajoutant par ci par là des evalf, s'il y a des valeurs numériques affectées aux variables.
A+
ALS |
|
Revenir en haut de page |
|
|
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 24 Oct 2013 19:13 Sujet du message: |
|
|
Bonjour merci pour ton aide.
Je ne voyais pas trop comment expliquer mon problème mais en fait, en faisant des copier/coller dans un autre fichier, j'ai pu définir les matrices utilisées et le calcul matriciel qui pose problème.
J'ai mis le fichier en copie
http://dl.free.fr/p8fP9XqWn
Je pense aussi que le problème vient du fait que Maple cherche à faire du calcul symbolique ou littéral.
Pour ma part, je suis seulement intéressé pour qu'il fasse le calcul de manière numérique. Ce calcul est ensuite utilisé pour la résolution d'un système différentiel de manière numérique.
Est-ce que tu pourrais des idées où je dois mettre les evalf ?
Merci pour ton aide |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 25 Oct 2013 7:44 Sujet du message: |
|
|
Bonjour,
On ne peut rien faire de mieux avec des evalf supplémentaires car il reste toujours des variables littérales dans les expressions.
Déjà le calcul à part de la matrice inverse de Cu ne se fait pas, j'ai du interrompre la computation.
Une idée, en passant par les matrices adjointes, le calcul semble se faire pour Cu et tCu mais à la fin le calcul de AA se fait mais on ne peut afficher le résultat ( [La longueur de sortie dépasse la limite de 1% noeuds]).
A+
ALS
Code: |
> adjCu := Adjoint(Cu): InvCu := adjCu/Determinant(Cu):
> adjtCu := Adjoint(tCu): InvtCu := adjtCu/Determinant(tCu):
> AA:=evalm(Avv-Avu&*InvCu&*Cv+tCv&*InvtCu&*Auu&*InvCu&*Cv-tCv&*InvtCu&*Auv);
[La longueur de sortie d←passe la limite de 1% noeuds]
|
|
|
Revenir en haut de page |
|
|
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 25 Oct 2013 9:50 Sujet du message: |
|
|
D'accord merci pour ton aide.
Si le calcul ne s'affiche pas, celà ne me gène pas si je peux utiliser ensuite la matrice AA pour la résolution de mon système différentiel.
Je vais essayer. |
|
Revenir en haut de page |
|
|
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 26 Oct 2013 10:01 Sujet du message: |
|
|
Bonjour,
Avec ta méthode, les étapes de calcul se font jusqu'à la résolution du système différentiel.
Maintenant, c'est la résolution du système différentiel qui ne s'arrête jamais.
Dans le fichier joint, j'ai mis la mise en place du système différentiel à l'aide de la définition du système ainsi que la fonction dsolve pour résoudre le système.
http://dl.free.fr/i675gLpFA
La définition de certaines matrices prend une place très importante mais c'est parce que j'ai copier le résultat des matrices que j'ai obtenu après la mise en place des équations qui n'est pas précisé dans ce fichier.
J'espère que je vais arriver à avancer sur ce calcul. Maintenant, ce n'est pas évident quand le programme ne renvoie pas d'erreur mais ne stoppe jamais.
Si tu as d'autres idées, je suis bien sur très intéressé.
Merci pour ton aide. |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 04 Nov 2013 9:07 Sujet du message: |
|
|
Bonjour,
Difficile de savoir si les expressions ont été effectivement calculées, car pour AA, QQ, et les derniers calculs de la feuille, il y a toujours l'affichage: La longueur de sortie dépasse la limite de 1% noeuds.
Ce n'est semble-t-il pas satisfaisant pour la résolution du système différentiel.
Dans le menu Outils, sous-menu Options, onglet Précision, en essayant d'augmenter les nombres, et dans l'onglet Affichage puis Niveau de composition, en choisissant Etendue, je ne sais pas si cela change grand chose!!
Peut-être poser la question sur mapleprimes.com.
Pas d'autre idée au retour des vacances.
Désolé.
ALS |
|
Revenir en haut de page |
|
|
|