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 <: Manifold
The 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 <: MPoint
A 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 <: TVector
A 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.