MODULE DU CALCUL DUAL
Présentation des constructeurs duaux
Afin de donner un avant goût de la programmation avec les outils définis dans le module dualstruc.map, nous allons présenter des exemples simples, mais qui illustrent déjà quelques différences de style avec le calcul classique sur le système Maple. Les fonctions du module – dualstruc.map doivent explicitement être chargées avant utilisation.Fig. 7.1: Session de travail sur Maple matriciels, vectoriels et scalaires. La définition des constructeurs duaux est conforme aux idées développées dans le module defstruc.map à la différence près que dans le présent module ces constructeurs permettent de définir de façon autonome des objets de type dual. C’est à dire qu’au niveau morphologique de l’objet, les champs sont des symboles qui représentent des scalaires (i.e. entités élémentaires) de type dual. Exemple La manière la plus simple pour construire une matrice duale est de spécifier toutes ses composantes. L’opération principale permettant une telle définition est l’affectation: > Dmat:=array([[l.+7.*eps,e],[3,a+eps*b]]); [ 1. +7 . eps Dmat : = [ C e ] ] r a + eps da + eps b ]
Présentation des constructeurs duaux Partie 3 où le symbole eps désigne l’unité duale e.
Constructeur de classes Comme nous l’avons déjà évoqué au chapitre précédent, un constructeur est une fonction d’initialisation que l’on peut appeler (avec des sélecteurs spécifiques) chaque fois que l’on souhaiterait créer une instance d’une classe donnée. Grâce à son constructeur de classes make_duobj, le module dualstruc.map offre la possibilité de définir des entités duales de façon plus autonome. Le constructeur make_duobj permet de créer un objet à partir de son nom et de la spécification de sa nature (classe d’appartenance) et de sa dimension. La syntaxe d’un tel constructeur est: make_duobj(iden,struc,dira) où: iden : désigne l’identificateur de l’objet qu’on souhaite créer, struc : désigne la structure qu’on souhaite créer, dim : désigne la dimension de l’objet. La déclaration de la dimension dim est inutile lorsque la structure stru c désigne le type scalaire. Exemple s > make_duobj(A,matrix,3); Class: dual matrix(3,3) > object(A); [ rA[i , 1] + eps dA[l, 1] rA[l, 2] + eps dA[l, 2] rA[l, 3] + eps dÂ[i, 3] ] [ ] [ rA[2, 1] + eps dA[2, 1] rA[2, 2] + eps dA[2, 2] rA[2, 3] + eps dA[2, 3] ] [ ] [ rA[3, 1] + eps dA[3, 1] rA[3, 2] + eps dA[3, 2] rA[3, 3] + eps dA[3, 3] ] > make_duobj(V,vector,2); Class: dual vector(2) > object(V); [ rV[l] + eps dV[l], rV[2] + eps dV[2] ] > make_duobj(a,scalar); Class: dual scala r > object(a); r a + eps da La fonction object permet ainsi de visualiser la structure morphologique d’un objet construit à partir de make.duobj. Les objets duaux, ainsi créés, comportent une partie réelle dont le nom est un symbole racine préfixée par la lettre r et une partie duale préfixée par la lettre d. Partie 3 Chapitre 7. MODULE DU CALCUL DUAL
Opérateur ad d’un torseur
A partir de la donnée des coordonnées duales X d’un torseur X, l’opérateur ad permet de calculer la matrice duale associée à l’opérateur adX et telle que: adXY = [-X\^] pour tout torseur Y de D, Exemples > make.duobj(X,vector,3) ; > EE:=ad(X Class: dual vector(3) EE 0 – rX[3] – eps dX[3] rX[2] + eps dX[2] 3 1 rX[3] + eps dX[3] 0 – rX[l] – eps dX[i] ] 1 – rX[2] – eps dX[2] rX[i] + eps dXCl] 0 ] 7.2.3 Déplacements autour des axes d’un repère La matrice d’un déplacement cylindrique exprimée relativement à une famille fondamentale f ~ (£> ^i C) ^e l’algèbre de Lie D dont l’un des axes est celui du déplacement, s’écrit de façon relativement simple. Le module dualstruc .map offre la possibilité de définir de telles matrices. Les fonctions RDI, RD2 et RD3 permettent de construire les déplacements cylindriques respectivement suivant les premier, second et troisième axes de la famille f. Exemple s Si a est le scalaire dual défini dans l’exemple précédent, la rotation duale, à’angle dual a et d’axe A¡c s’exprime dans la famille fondamentale f par: > Depl;=RDl(a); [ 1 [ Depl := [ 0 cos(ra) – eps da sin(ra) – sin(ra) – eps da cos(ra) [ [ 0 sin(ra) + eps da cos(ra) cos(ra) – eps da sin(ra) > Dep2:=RD3(Pi/2+eps*c); Dep2 : = [ – eps c [ [ 1 [ [ 0 -1 – eps c 0 i—i r—i O 0 ] 1 ] La matrice de tout autre déplacement peut être obtenue à partir des trois matrices RDI, RD2 et RD3 (grâce à différentes cartes du groupe de Lie O).