The Special Orthogonal Group mathrmSO(n)

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.

$\mathrm{SO}(n) = \bigl\{R \in \mathbb{R}^{n\times n} \big| RR^{\mathrm{T}} = R^{\mathrm{T}}R = \mathrm{I}_n, \operatorname{det}(R) = 1 \bigr\}$

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.

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.

source
Manopt.SOPointType.
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$.

source
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

$T_x\mathrm{SO}(n) = \bigl\{x\xi \in \mathbb R^{n\times n} \big| \xi + \xi^T = 0 \bigr\}.$

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.

source

Functions

Base.expFunction.
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 . The formula reads

$\operatorname{exp}_{x}(tξ) = x \cdot \operatorname{Exp}(tξ)$

where $\operatorname{Exp}$ denotes matrix exponential.

source
Base.logMethod.
log(M,x,y)

compute the logarithmic map on the Rotations manifold M$=\mathrm{SO}(n)$, which is given by

$\operatorname{log}_{x} y = \frac{1}{2} \bigl(\operatorname{Log}(x^{\mathrm{T}}y) - (\operatorname{Log} x^{\mathrm{T}}y)^{\mathrm{T}}),$

where $\operatorname{Log}$ denotes the matrix logarithm.

source
LinearAlgebra.dotMethod.
dot(M,x,ξ,ν)

compute the Riemannian inner product for two SOTVectors ξ and ν from $T_x\mathcal M$ of the Rotations manifold M given by

$\langle \xi, \nu \rangle_x = \operatorname{tr}(\xi^T\nu)$

i.e. the inner product in the embedded space $\mathbb R^{n\times n}$.

source
LinearAlgebra.normMethod.
norm(M,x,ξ)

compute the norm of the SOTVector ξ in the tangent space $T_x\mathcal M$ at SOPoint x of the Rotations manifold M.

$\lVert \xi \rVert_x = \sqrt{\sum_{i,j=0}^n \xi_{ij}^2}$

where $\xi_{ij}$ are the entries of the skew-symmetric matrix ξ, i.e. the norm is given by the Frobenius norm of ξ.

source
Manopt.distanceMethod.
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

$d(x,y) = \lVert \operatorname{log}_{x}y \rVert_x$

where $\operatorname{log}_{\cdot}\cdot$ denotes the logarithmic map on the Rotations $\mathcal M=\mathrm{SO}(n)$.

source
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

$ξ = -\frac{1}{2}(x^{\mathrm{T}}ys - (x^{\mathrm{T}}ys)^{\mathrm{T}})$

where $s$ is the solution to the Sylvester equation

$x^{\mathrm{T}}ys + s(x^{\mathrm{T}}y)^{\mathrm{T}} + 2\mathrm{I}_n = 0.$
source
inverseRetractionQR(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 retractionQR from the SOPoint x after time 1.

source
manifoldDimension(M)

return the dimension of the Rotations manifold M$= \mathrm{SO}(n)$. The dimension is defined by

$\frac{n(n-1)}{2}.$
source
manifoldDimension(x)

return the dimension of the Rotations manifold M$= \mathrm{SO}(n)$, the SOPoint x, itself embedded in $\mathbb R^{n\times n}$, belongs to. The dimension is defined by

$\frac{n(n-1)}{2}.$
source
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 ξ.

source
Manopt.randomMPointFunction.
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

$QR = A$

be the QR decomposition of a random matrix $A$, then the formula reads

$x = QD$

where $D$ is a diagonal matrix with the signs of the diagonal entries of $R$, i.e.

$D_{ij}=\begin{cases} \operatorname{sgn}(R_{ij}) & \text{if} \; i=j \\ 0 & \, \text{otherwise} \end{cases}.$

It can happen that the matrix gets -1 as a determinant. In this case, the first and second columns are swapped.

source
Manopt.randomTVectorFunction.
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.

source
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

$USV = x + txξ$

be the singular value decomposition, then the formula reads

$\operatorname{retr}_x\xi = UV^\mathrm{T}$
source
Manopt.retractionQRFunction.
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

$QR = x + txξ$

be the QR decomposition, then the formula reads

$\operatorname{retr}_x\xi = QD$

where the matrix $D$ is given by

$D_{ij}=\begin{cases} \operatorname{sgn}(R_{ij}+0,5) & \text{if} \; i=j \\ 0 & \, \text{otherwise.} \end{cases}$
source
Manopt.zeroTVectorMethod.
zeroTVector(M,x)

return a zero SOTVector $\xi$ from the tagent space $T_x\mathrm{SO}(n)$ of SOPoint x on the Rotations manifold M, i.e. a zero matrix.

source