|
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: 01 Oct 2015 8:33 Sujet du message: Determination de la nature d'un objet et de son contenu |
|
|
Bonjour,
J'utilise MapleSim qui est un logiciel de simulation multiphysique couplé avec Maple. Il existe un certain nombre de fonctions dites API de Maplesim qui sont des packages ou modules Maple permettant d'extraire les résultats de MapleSim dans Maple.
Un aperçu est donné à cette page:
http://www.maplesoft.com/support/help/MapleSim/view.aspx?path=MapleSim
Je cherche à connaître la nature et le contenu d'un de ces objets. Comment est-ce que je peux ?
Par exemple, "MapleSim" est un module et contient "LinkModel" qui est un autre module et deux packages "Tools" et "Analysis".
1) Comment est-ce que je peux connaitre la nature d'un objet ? Je pense qu'il doit exister une fonction à cet effet ?
2) Comment est-ce que je peux peux explorer le contenu d'un module ? En d'autres termes, savoir les enfants d'un module et ainsi de suite si un module est contenu dans le module principal, les enfants de ce module ...
Le contexte de ma question est MapleSim mais je pense que ma question est générale à Maple.
Merci d'avance pour votre aide. |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 01 Oct 2015 10:58 Sujet du message: |
|
|
Bonjour,
Je n'ai pas MapleSim mais j'ai essayé de répondre à votre question à partir d'un exemple de module trouvé dans la doc de Maple.
Code: |
> LinkedList := module()
> option package;
> export New, Prepend;
> local DisplayNode;
>
> New := proc( data )
> module()
> export Val, Next;
> local ModulePrint;
>
> Val := data;
> Next := 0;
>
> ModulePrint := proc()
> DisplayNode(thismodule);
> end proc;
> end module;
> end proc;
>
> Prepend := proc( llist, val )
> local node;
> node := New(val);
> node:-Next := eval(llist);
> return node;
> end proc;
>
> DisplayNode := proc( node )
> if node = 0 then
> return NULL;
> else
> return node:-Val, DisplayNode(node:-Next);
> end if;
> end proc;
>
> end module:
>
> with(LinkedList);
>
[New, Prepend]
> print(LinkedList);
>
module()
local DisplayNode;
export New, Prepend;
option package;
end module
> o:=op(eval(LinkedList));
o := New, Prepend, module()
local DisplayNode;
export New, Prepend;
option package;
end module,
DisplayNode
|
o:=op(eval(mymodule)); donne la liste des composants du module.
L'aide sur "module" parle de 3 opérandes:
Citation: |
• Modules have three operands, which are accessible using op.
* op 1 is the eseq of exports
* op 2 is a pointer to a module definition "shell"
* op 3 is the lseq of locals
|
Effectivement, on arrive à les récupérer ainsi :
Code: |
> op(1,eval(LinkedList));
New, Prepend
> op(2,eval(LinkedList));
module()
local DisplayNode;
export New, Prepend;
option package;
end module
> op(3,eval(LinkedList));
DisplayNode
|
Sinon, après l'aide parle de Moddefs, qui a 8 opérandes mais je ne vois pas comment y accéder.
Citation: |
Moddefs have eight operands, which are accessible using op.
* op 1 is the sequence of (implicit) parameters
* op 2 is the expression sequence of local variables
* op 3 is the expression sequence of options
* op 4 is the expression sequence of exports
* op 5 is the expression sequence of description strings
* op 6 is the expression sequence of globals
* op 7 is the sequence of lexicals
* op 8 is the name of a named module
|
J'ai essayé ceci:
Code: |
> for k to 8 do if (op(k,op(2,eval(LinkedList)))=NULL) then print("NULL") else print(op(k,op(2,eval(LinkedList)))) fi od;
thismodule
DisplayNode
package
New, Prepend
"NULL"
"NULL"
"NULL"
"NULL"
|
Mais cela ne semble pas la même chose ...
@+ |
|
Revenir en haut de page |
|
|
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 07 Oct 2015 14:02 Sujet du message: |
|
|
Super, je te remercie pour ton aide.
Par contre, je n'ai pas encore bien compris la structure de ce module.
Pour y voir plus clair, j'ai essayé d'indenter le code (je te l'ai envoyé par mail).
Mais, je ne vois pas à quoi correspond la ligne module() sous New := proc( data ) et la ligne end module; associé. A quoi correspond ce module ?
J'ai relu le point "cours" que tu avais fait au sujet des modules. Sur ce point, si je comprends bien, un module peut contenir des données, des fonctions (procédures). Cependant, ne peut-il pas aussi contenir d'autres modules non ?
Des plus, est-ce que tu aurais des idées pour identifier la nature de chacun des composants du module (fonctions, modules enfants, ...) ?
Sinon, j'ai lancé ta commande sur le module GetMultibody de MapleSim. Cà a l'air interessant.
Voici le résultat
Code: | Code:
for k to 8 do if (op(k,op(2,eval(MB)))=NULL) then print("NULL") else print(op(k,op(2,eval(MB))))
fi od;
thismodule
SetOptions, SetAdditionalKinData, SetAdditionalDynData,
PostProcessDyEQs, DFPModule, Print, vPd, vPd_dot, xJi, xJdInv,
xG, vDepVels, vDepAccels, vDynamicEQs, AnalyseModel,
KinAnalysis, DynAnalysis, SetGenCoords, SetQiQd, SetJacPos,
SetJacVel, SetJdInvAndG, SetDepVels, SetDepAccels,
SetQiDepEdgeInfo, ReducePosCons, ProcessPosCons, GetVelAccCons,
ModType, lmQiSys, lmQdSys, lmQiPreSolved, lmQdPreSolved,
llmSubSysCons, tePosConstraintInfo, teZeroReactionSubs,
leJdInvSubs, leGSubs, leDepAccSubs, leMFSubs, vPosCons,
vVelCons, vAccCons, vDynEQs, leConstParams, leVarParams,
leReParamSubs, leConsistentSubs, leParamSubs, leICGuesses,
leSummary, bSolvePosition, bSubMF, sDynSimpType, sKinSimpType,
bSubEmbed, bSimpEmbed, sAugType, sFormType, leBaumgarte,
bGenSubSys, bSilentMode, bCalledFromMapleSimGUI, mLGM, mMath,
pTFunc, sModType
"NULL"
GetParams, GetInputs, GetPosCons, GetVelCons, GetAccCons,
GetDynEQs, GetKinTrans, GetSysEQs, GetFrameMotion,
GetInterFrameForce, GetBaumgarte, SetBaumgarte, GetNodeNames,
GetSysODEs, GetAYBSysODEs, GetSimCodeData, GetLGM, GetMass,
GetCoM, GetInertia, Reparameterize, ApplySimplification,
AddConstraints, PrintSummary, vQ, vQdot, vP, vPdot, vX, vXdot,
vKinTransRHS, xJacPos, xJacVel, vVelRHS, vAccRHS, xM, vLambda,
xC, vF, vReactions, mExprMan, leTo2ndOrderSubs, sDFPVersion,
sLibFile
"NULL"
"NULL"
"NULL"
"NULL"
|
Je vais voir si je peux accéder à ces fonctions.
Merci pour ton aide. |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 08 Oct 2015 8:52 Sujet du message: |
|
|
Bonjour,
C'est un code de module que j'ai trouvé dans la doc de Maple: je pense qu'il s'agit d'une création d'une liste chainée de données. New crée une nouvelle donnée à la liste et Prepend en ajoute une en tête de liste.
Mais peu importe ...
Effectivement on peut mettre un module en résultat de sortie d'une procédure d'un module, comme dans la procédure New(data).
Le résultat sur MapleSim semble prometteur.
J'ai essayé la fonction whattype sur les éléments mais j'obtiens symbol ou exprseq (séquence).
Code: |
> for k to 8 do if (op(k,op(2,eval(LinkedList)))=NULL) then print("NULL") else print(op(k,op(2,eval(LinkedList)))):print(whattype( op(k,op(2,eval(LinkedList)))))
fi od;
thismodule
symbol
DisplayNode
symbol
package
symbol
New, Prepend
exprseq
"NULL"
"NULL"
"NULL"
"NULL"
|
On n'est pas plus avancés. Sorry! |
|
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.
|