Returns a manifold structure to optimize over the special Euclidean group function M = specialeuclideanfactory(n) function M = specialeuclideanfactory(n, k) The special Euclidean group (the manifold of rigid transformations): This is a product manifold of the rotations group SO(n) and the translation group R^n, copied k times. (See note below.) Points on the manifold are represented as structures X with two fields. X.R is a 3D array of size nxnxk such that each slice X.R(:, :, i) corresponds to a rotation matrix (orthogonal with determinant 1). X.t is a matrix of size nxk such that each column X.t(:, i) corresponds to a translation vector. Tangent vectors are represented as structures with the same fields. Note that rotational components of the tangent vectors are represented in the Lie algebra, i.e., each slice Xdot.R(:, :, i) is a skew-symmetric matrix. Use M.tangent2ambient(X, Xdot) to obtain a representation in the ambient space. This is often necessary when defining problem.ehess(X, Xdot). This is a description of SE(n)^k with the induced metric from the embedding space (R^nxn)^k x (R^n)^k, i.e., this manifold is a Riemannian submanifold of the embedding Euclidean space with the usual inner product. By default, k = 1. Note: this is a product geometry: it may not be the "appropriate" geometry to give to SE(n) for your application. In particular, this is not the Lie geometry of SE(n), because SE(n) is not a direct product of SO(n) and R^n: it is only a semidirect product. Following a comment by Martijn Zeestraten on the Manopt forum, see this file for more information about the Lie geometry: http://ethaneade.com/lie.pdf See rotationsfactory and euclideanfactory for details. See also: rotationsfactory euclideanfactory
0001 function M = specialeuclideanfactory(n, k) 0002 % Returns a manifold structure to optimize over the special Euclidean group 0003 % 0004 % function M = specialeuclideanfactory(n) 0005 % function M = specialeuclideanfactory(n, k) 0006 % 0007 % The special Euclidean group (the manifold of rigid transformations): 0008 % This is a product manifold of the rotations group SO(n) and the 0009 % translation group R^n, copied k times. (See note below.) 0010 % 0011 % Points on the manifold are represented as structures X with two fields. 0012 % X.R is a 3D array of size nxnxk such that each slice X.R(:, :, i) 0013 % corresponds to a rotation matrix (orthogonal with determinant 1). 0014 % X.t is a matrix of size nxk such that each column X.t(:, i) corresponds 0015 % to a translation vector. 0016 % 0017 % Tangent vectors are represented as structures with the same fields. Note 0018 % that rotational components of the tangent vectors are represented in the 0019 % Lie algebra, i.e., each slice Xdot.R(:, :, i) is a skew-symmetric matrix. 0020 % Use M.tangent2ambient(X, Xdot) to obtain a representation in the ambient 0021 % space. This is often necessary when defining problem.ehess(X, Xdot). 0022 % 0023 % This is a description of SE(n)^k with the induced metric from the 0024 % embedding space (R^nxn)^k x (R^n)^k, i.e., this manifold is a Riemannian 0025 % submanifold of the embedding Euclidean space with the usual inner 0026 % product. 0027 % 0028 % By default, k = 1. 0029 % 0030 % Note: this is a product geometry: it may not be the "appropriate" 0031 % geometry to give to SE(n) for your application. In particular, this is 0032 % not the Lie geometry of SE(n), because SE(n) is not a direct product of 0033 % SO(n) and R^n: it is only a semidirect product. Following a comment by 0034 % Martijn Zeestraten on the Manopt forum, see this file for more 0035 % information about the Lie geometry: 0036 % http://ethaneade.com/lie.pdf 0037 % 0038 % See rotationsfactory and euclideanfactory for details. 0039 % 0040 % See also: rotationsfactory euclideanfactory 0041 0042 % This file is part of Manopt: www.manopt.org. 0043 % Original author: Nicolas Boumal, Sep. 23, 2014. 0044 % Contributors: 0045 % Change log: 0046 0047 0048 if ~exist('k', 'var') || isempty(k) 0049 k = 1; 0050 end 0051 0052 elements = struct(); 0053 elements.R = rotationsfactory(n, k); 0054 elements.t = euclideanfactory(n, k); 0055 0056 M = productmanifold(elements); 0057 0058 end