The Manifold $\operatorname{SO}(n)$ of rotations
The manifold $\mathcal M = \mathrm{SO}(n)$ of orthogonal matrices with determinant $+1$ in $\mathbb R^{n\times n}$, i.e.
The $\mathrm{SO}(n)$ is a subgroup of the orthogonal group $\mathrm{O}(n)$ and also known as the special orthogonal group or the set of rotations group.
Applications
The manifold of rotations appears for example in Electron Backscatter diffraction (EBSD), where orientations (modulo a symmetry group) are measured. For more details on symmetry groups, see for example the MTEX toolbox, where several image processing methods are implemented on $\mathrm{SO}(3)$-valued data, taking also the symmetries in the crystal orientations into account.
A paper concerned with discrete regression on $\mathrm{SO}(n)$ is
Boumal, N; Absil, P.–A.: A discrete Recgression Method on Manifolds and its Application to Data on $\mathrm{SO}(n)$, IFAC Proceedings Volume 44, Issue 1, pp 2284–2289. doi: 10.3182/20110828-6-IT-1002.00542
which also includes the formulae for several functions implemented for this manifold within Manopt.jl.
Types
The manifold posesses the following instances of the abstract types Manifold, MPoint, and TVector.
Manopt.Rotations — Type.Rotations <: ManifoldThe manifold $\mathcal M = \mathrm{SO}(n)$ represented by $n\times n$ real-valued orthogonal matrices with determinant $+1$.
Abbreviation
SO
Constructor
Rotations(n)generates the manifold $\mathrm{SO}(n)$ where the integer n is the number of rows or columns of the matrices.
Manopt.SOPoint — Type.SOPoint <: MPointA point $x$ on the manifold $\mathcal M = \mathrm{SO}(n)$ is represented by an orthogonal matrix with determinant $+1$ from $\mathbb R^{n\times n}.$
Constructor
SOPoint(x)where x is an orthogonal matrix with determinant $+1$ of dimension $n×n$.
Manopt.SOTVector — Type.SOTVector <: TVectorA tangent vector $\xi \in T_x\mathcal M$ on the manifold $\mathcal M = \mathrm{SO}(n)$. The tangent space is given by as
Since the manifold of rotations is a Lie group, it suffices to store just the skew-symmetric matrix $\xi$. This has to be taken into account in all formulae.
Constructor
SOTVector(ξ)where ξ is an $n\times n$ Matrix that is skew-symmetric.
Functions
Base.exp — Function.exp(M,x,ξ,[t=1.0])compute the exponential map on the Rotations manifold M$=\mathrm{SO}(n)$ with respect to the SOPoint x and the SOTVector ξ, which can be shortened with t to tξ. The formula reads
where $\operatorname{Exp}$ denotes matrix exponential.
Base.log — Method.log(M,x,y)compute the logarithmic map on the Rotations manifold M$=\mathrm{SO}(n)$, which is given by
where $\operatorname{Log}$ denotes the matrix logarithm.
LinearAlgebra.dot — Method.LinearAlgebra.norm — Method.Manopt.distance — Method.distance(M,x,y)compute the Riemannian distance on Rotations manifold M $= \mathrm{SO}(n)$ embedded in $\mathbb R^{n\times n}$, which is given by
where $\operatorname{log}_{\cdot}\cdot$ denotes the logarithmic map on the Rotations $\mathcal M=\mathrm{SO}(n)$.
Manopt.injectivityRadius — Method.injectivityRadius(M)return the injectivity radius of the Rotations manifold M$=\mathrm{SO}(n)$.
Manopt.inverseRetractionPolar — Method.inverseRetractionPolar(M,x,y)return a SOTVector ξ of the tagent space $T_x\mathrm{SO}(n)$ of the SOPoint x on the Rotations manifold M with which the SOPoint y can be reached by the retractionPolar after time 1. The formula reads
where $s$ is the solution to the Sylvester equation
Manopt.inverseRetractionQR — Method.Manopt.manifoldDimension — Method.manifoldDimension(M)return the dimension of the Rotations manifold M$= \mathrm{SO}(n)$. The dimension is defined by
Manopt.manifoldDimension — Method.Manopt.parallelTransport — Method.parallelTransport(M,x,y,ξ)compute the parallel transport of the SOTVector ξ from the tangent space $T_x\mathcal M$ at SOPoint x to $T_y\mathcal M$ at SOPoint y on the Rotations M along $g$ provided that the corresponding geodesic $g(\cdot;x,y)$ is unique. Since we have only stored the skew-symmetric matrix as a SOTVector ξ, the function returns the the SOTVector ξ.
Manopt.project — Method.project(M,x,v)project a $n\times n$ Matrix v on the tangent space of the SOPoint x.
Manopt.randomMPoint — Function.randomMPoint(M[, type=:Gaussian, σ=1.0])return a random SOPoint x on the manifold Rotations M by generating a (Gaussian) random orthogonal matrix with determinant $+1$. Let
be the QR decomposition of a random matrix $A$, then the formula reads
where $D$ is a diagonal matrix with the signs of the diagonal entries of $R$, i.e.
It can happen that the matrix gets -1 as a determinant. In this case, the first and second columns are swapped.
Manopt.randomTVector — Function.randomTVector(M,x[, type=:Gaussian, σ=1.0])return a random SOTVector in the tangent space $T_x\mathrm{SO}(n)$ of the SOPoint x on the Rotations manifold M by generating a random skew-symmetric matrix. The function takes the real upper triangular matrix of a (Gaussian) random matrix $A$ with dimension $n\times n$ and subtracts its transposed matrix. Finally, the matrix is normalized.
Manopt.retractionPolar — Function.retractionPolar(M,x,ξ [,t=1.0])move the SOPoint x in the direction of the SOTVector ξ on the Rotations manifold M. This SVD-based retraction is a second-order approximation of the exponential map. Let
be the singular value decomposition, then the formula reads
Manopt.retractionQR — Function.retractionQR(M,x,ξ [,t=1.0])move the SOPoint x in the direction of the SOTVector ξ on the Rotations manifold M. This QR-based retraction is a first-order approximation of the exponential map. Let
be the QR decomposition, then the formula reads
where the matrix $D$ is given by
Manopt.zeroTVector — Method.