Bonjour,
Je suis nouveau sur ce forum, alors tout d'abord je suis bird12358. Je suis étudiant en maths et j'ai un problème ...
Je dois appliquer une exponentielle d'un vecteur dans le groupe de Lie. Le problème c'est que je ne connais rien en groupe Lie mais je dois juste créer un programme me permettant de calculer l'exponentielle et le logarithme d'un vecteur.
Quelqu'un pourrait me donner une piste?
D'avance merci.
"Le groupe de Lie" ne veut pas dire grand chose. Ne peux-tu pas être plus spécifique ? Quel est le groupe de Lie en question ?
Dans quel cadre as-tu ce problème ?
Merci pour votre réponse.
Je l'utilise dans le cadre de transformée dans l'espace (rotation translation) du groupe SE3.
Oui la dimension des vecteurs est 6 et c'est sur l'espace Euclidien.
Existe-il des librairies permettant de faire ces calculs?Ou ya-t-il une documentation qui explique comment faire le calcul numérique ?
Tes "vecteurs" sont des torseurs , je le répète.
Un torseur correspond à un "déplacement infinitésimal".
Tu dois faire un programme pour réaliser l'exponentiation ou tu veux une librairie toute faite ? Je ne comprends pas bien ce que tu cherches. Et quel rapport avec la math sup ? Qui te demande de faire ça ?
Je dois faire un programme sous matlab permettant le calcul de l'exponentielle des torseurs.
Comment on doit faire si on a exp(v) ou v = (v1 v2 v3... v5)?
Je suppose que ce n'est pas l'exponentielle de chaque valeur du torseur?
J'ai des notions en groupe de SE3 pour le déplacement dans l'espace (rotation et translation) mais pas pour ca.
v1..v5, pour 6 coordonnées, ça ne le fait pas
Le principe est expliqué dans le document que j'ai mis en lien. Y as-tu jeté au moins un oeil ?
Oui effectivement j'en ai louper un
J'ai lu les deux documents mais j'ai pas vu la méthode pour permettre de calculer exp(V).
D'apres ce que j'ai compris dans des documents ca permet connaissant la position a un instant t, d'estimer la nouvelle position d'apres les faibles déplacements et rotation issues du torseur v? C'est ca?
Genre Pos_t = exp(v)*Pos_t_1?? avec V = [w v] w est la rotation sur chacun des axes et v la translation entre les deux positions?
Je parle du premier document mis en lien. Il me semble que ça explique comment associer une matrice 4x4 à un torseur. Précisément si le torseur est (résultante et moment), la matrice est
(avec les notations du document). Il ne reste plus qu'à prendre l'exponentielle de cette matrice :
, (
matrice de rotation), ce qui donne le déplacement
.
Donc si j'ai bien compris, la matrice U est la matrice de rotation, et si le vecteur V = [wx wy wz tx ty tz] on a U = R_x(wx)*R_y(wy)*R_z(wz) et T = [tx ty tz]?
Absolument pas. Je croyais avoir expliqué juste ci-dessus qu'on commençait par fabriquer une matrice à partir du torseur, puis qu'on prenait l'exponentielle de cette matrice.
Je recommence, en espérant que tu finisses pas capter. Je donne une version plus "recette de cuisine".
Tu fabriques à partir du vecteur résultant (les trois premières coordonnées du torseur
) une matrice antisymétrique
. Tu prends l'exponentielle de cette matrice
; ça te donne la matrice de rotation du déplacement. Tu appliques cette matrice de rotation au vecteur moment (trois dernières coordonnées du torseur) :
. Ca te donne la partie "translation" du déplacement. Le déplacement est
.
Pour résumer je n'ai qu'a calculer une matrice M = (exp(A) T;0 1) Ou exp(A) = somme 1/k*(A)^k pour k de 0 à l'infini
Si on considère que les 3 1er paramètres du torseur V sont très faible la valeur de exp(A) = somme 1/k*(A)^k pour k de 0 à n (ou n = 2)??
Merci en tout cas pour les explications c'est vrai que A qui correspond à la matrice antisymétrique j'avais pas deviné . J'ai malheureusement pas encore assez de connaissance en maths ...
Question supplémentaire : Le logorithme de la matrice M donne le torseur V?
Pour les 3 derniers paramètres, on les obtient facilement mais pour les 3er paramètres de V comment on les retrouve a partir de exp(A)?
Ya-t-il une méthode ?
C'est a dire de manière unique ? Meme dans le cas spécifique de l'application aux torseurs SE3?
Comment fait-on alors?
Et oui !
Trouver un logarithme, pour une matrice de rotation, revient essentiellement à déterminer son axe et une mesure de son angle. Et une telle mesure n'est définie qu'à près.
Un petit exemple en Maple : un aller-retour exponentielle puis logarithme qui ne revient loin de la matrice antisymétrique de départ :
Effectivement, cela signifie quoi? Qu'il faut appliquer une méthode particulière?
Comment fait-on pour pouvoir retomber sur la matrice anti-symétrique et donc le torseur de départ?
Ah oui dsl j'avais pas vu le poste. Et comment fait-on pour trouver une solution?
Quelle méthode doit-on appliquer?
D'apres ce que j'ai cru lire pour obtenir le logarithme de la matrice U il faut la décomposer selon la méthode de Cholesky A = P*D*P⁽-1) ou D est une matrice diagonale.
Le logarithme de A vaut P*L*P^(-1) ou L est une matrice diagonale dont les coefficients de la diagonale correspondent au logarithme des valeurs respectives de la diagonale de D ? (si D a tous ces coefficients positifs)
Mais la méthode que j'ai présenté est correcte pour trouver le log d'une matrice ?
Si oui, il faut donc je trouve une méthode pour décomposer la matrice A et trouver sa diagonale. Et si cette matrice diagonale a que des paramètres positifs c'est gagné !!!
Bon, plusieurs choses.
1°) Tu parles de décomposition de Cholesky alors que tu écris une diagonalisation. Ce n'est pas du tout pareil.
2°) On peut effectivement diagonaliser une matrice de rotation d'angle sur les complexes. Ses valeurs propres sont
. C'est assez rare que
soit un réel positif.
En fait je parlais de la décomposition de Cholesky alternative:
http://fr.wikipedia.org/wiki/Factorisation_de_Cholesky
Sinon quel serait la méthode à employer pour trouver une solution au problème?
Non, ce que tu as écrit (avec l'inverse de P) est bien une diagonalisation et pas une décomposition de Choleski (même alternative). Ne vois-tu pas la différence entre la transposée et l'inverse ? La décomposition de Cholesky ne mène à rien pour le problème.
Il est relativement facile de trouver l'axe et l'angle à partir de la matrice U d'une rotation : l'axe est la droite propre associée à la valeur propre 1, le cosinus de l'angle est la moitié de (trace(U)-1). Il reste toujours le problème que l'angle n'est mesuré qu'à un multiple entier de près.
J'ai pas bien compris la derniere partie pour retrouver les paramètres du torseur?
J'ai cru comprendre que dans le cas d'un matrice antisymétrique l'exponentielle de cette matrice donnée:
R = I + sin(norm(w))* anti(w)/norm(w) + (1-cos(norm(w))*anti(w)^2/norm(V)^2 C'est ca?
J'ai fait un teste sur Matlab entre le résultat de exp(anti(w)) et la formule du dessus je n'obtiens pas le même résultat.
Je voudrais savoir pourquoi tu cherches ça. Qui te demande de faire ça ? Dans quel cadre ?
J'ai déjà répondu à beaucoup de tes questions, mais toi tu ne m'as toujours pas répondu sur ce point.
J'attends.
Je dois refaire une bibliotheque permettant de faire les calculs de base sur matrice dans le cadre d'un projet de maths appliqué à la programmation embarqué.
Ca a l'air sérieux ^^J'ai fais quelque chose de mal ?
En fait je n'ai pas de connaissance en math je suis en licence 1er année mais c'est un projet qu'on nous a proposé.
Quand j'aide quelqu'un en lui donnant des informations mathématiques, j'aime bien savoir dans quel cadre ça se passe. Tu ne trouves pas ça normal ?
Par exemple ici il y a quelque chose qui me semble bizarre : s'il s'agit d'un projet proposé par tes enseignants, ils savent que tu n'as pas les connaissances nécessaires en maths. Tout enseignant dans cette situation encadre l'étudiant en lui fournissant des explications ou au moins des références.
La formule que tu cites est bien correcte : elle donne la matrice de rotation connaissant le vecteur unitaire qui dirige et oriente l'axe (w/||w||) et la mesure de l'angle ( ||w|| ). Si tu ne trouves pas la même chose, c'est que tu t'es trompé dans ton code.
J'ai mon vecteur V = [1 2 3]
A = [0 -3 2;3 0 -1; -v2 v1 0]
Pour exp(A) j'ai :
1.0000 0.0498 7.3891
20.0855 1.0000 0.3679
0.1353 2.7183 1.0000
et avec la formule : U = eye(3)+sin(norm(V))*A./norm(V)+A.^2*(1-cos(norm(V)))./(norm(V.^2)) j'ai
1.0000 2.1122 0.4357
1.2067 1.0000 0.3353
1.0394 0.0335 1.0000
C'est étrange pourtant je pense pas avoir de problème de formule ?
Aucune des deux n'est bonne.
Relis le manuel de Matlab pour savoir comment faire des opérations sur des matrices. Là, tu fais les opérations sur chacun des coefficients.
Oui effectivement je me trompé de fonction. J'ai la bonne matrice. Par contre la valeur du logarithme n'est pas tres bon:
>> logm(expm(A))
ans =
-0.0000 2.0378 -1.3585
-2.0378 -0.0000 0.6793
1.3585 -0.6793 -0.0000
Toujours avec A = [1 2 3]. Sous Mapple vous obtenez également des valeurs identiques?
Tu as la tête dure. Combien de fois faudra-t-il que je t'explique qu'il ne faut pas s'attendre à ce qu'on retombre sur ses pieds avec les logarithme de l'exponentielle, vu que le logarithme n'est pas défini de manière unique ?
Le vecteur obtenu a même direction que le vecteur
de départ (c'est normal, c'est l'axe de la rotation). Mais la norme du vecteur
est égale à
. C'est aussi normal, vu que la mesure de l'angle de rotation n'est défini que modulo
.
Ah oui ok.
Donc en fait si je réutilise le torseur avec les données issues de logarithme de la matrice U, ce sera valable mais à 2PI près?
Et pour réaliser la fonction logarithme il faut que je fasse une décomposition svd comme ca:
[u d v] = svd(U) et v_estim = u(1,*(trace(U)-1), je vais dans le bon sens?
Je reprend juste ce que vous m'avez dit quelques post plus haut: "Il est relativement facile de trouver l'axe et l'angle à partir de la matrice U d'une rotation : l'axe est la droite propre associée à la valeur propre 1, le cosinus de l'angle est la moitié de (trace(U)-1)."
Pour trouver le vecteur propre associé a une valeur propre j'utilise la fonction SVD. La droite propre doit être le vecteur propre de la 1er valeur propre? C'est le vecteur v initiale normalisé?
et pour trouver la valeur dénormalisée faut faire le vecteur propre de la 1er valeur propre u(:,1) * (trace(U)-1)??
La décomposition en valeurs singulières d'une matrice de rotation n'apporte aucune information. Où as-tu été pêcher ça ?
Ben, à la droite propre associée à la valeur propre 1 (rappel de la définition : l'espace des tels que
).
Où vois-tu un vecteur dirigeant l'axe dans cette décomposition en valeurs singulières ?
J'ai fais une recherche sur la fonction nullspace mais je ne sais pas à quoi elle sert?
Une fois que l'on obtient l'axe on calcule la valeur de l'angle et apres comment fait-on pour obtenir la les paramètres de la matrice antisymétrique à partir de ses valeurs?
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :