According to this textbook (page 14), the exponential map of some Lie algebras (like $SO(2)$) can be thought of as repeated multiplication of matrices with infinitesimally small rotations.
$$ \lim_{k\to\infty} \left(\mathbf{I} + \alpha_a\frac{X_a}{k}\right)^k = \sum_{m=0}^{\infty} \frac{1}{m!}\left(\alpha_aX_a\right)^m \equiv e^{\alpha_aX_a}, $$
where $X_a$ is the $a$-th generator (basis vector) of the Lie algebra and $\alpha_a$ is the coefficient of the $a$-th basis vector (the textbook seems to be using Einstein's summation notation).
I feel like this derivation of the exponential map for "sphere-like" manifolds like $SO(2)$ or $SO(3)$ makes sense and thus I wanted to test whether this intuitive definition via a limit, when simplified, can indeed lead to the analytical version of the exponential map.
I therefore first decided to use Python's symbolic math package SymPy to verify whether the equation holds for the Lie algebra of $SO(2)$ and SymPy was able to simplify the symbolic limit into the analytical form of the exponential map (3.6) in the textbook. I plugged the generator $X_{SO(2)}$ into the limit and after simplification, I got the expected analytical form $\exp_{SO(2)}(x)$.
$$ \begin{aligned} X_{SO(2)} &= \begin{bmatrix}0 & -x\\x & 0\end{bmatrix}\\ \exp_{SO(2)}(x) &= \begin{bmatrix}\cos x & -\sin x\\\sin x & \cos x\end{bmatrix} \end{aligned} $$
However, when I tried to simplify the limit with generators for $SO(3)$, the analytical expression and the limit were not the same!
I wondered whether the same limit could be used to derive the analytical form of the exponential map of $SO(3)$, so I found the generator $X_{SO(3)}$ of $SO(3)$ and the expected analytical exponential map $\exp_{SO(3)}(X)$ in this paper (page 5, Example 3 and 4):
$$ \begin{aligned} X_{SO(3)} &= \begin{bmatrix}0 & -z & y\\ z & 0 & -x\\ -y & x & 0\end{bmatrix}\\ \exp_{SO(3)}(X) &= \mathbf{I} + X_{SO(3)} \sin{\theta} + X^2_{SO(3)} (1 - \cos{\theta}) \end{aligned} $$
I assume that $\theta = \sqrt{x^2+y^2+z^2}$.
I expected the following to be true: $$ \lim_{k\to\infty} \left(\mathbf{I} + \frac{X_{SO(3)}}{k}\right)^k \stackrel{?}{=} \mathbf{I} + X_{SO(3)} \sin{\theta} + X^2_{SO(3)} (1 - \cos{\theta})\\ \lim_{k\to\infty} \left(\mathbf{I} + \frac{X_{SO(3)}}{k}\right)^k - \left(\mathbf{I} + X_{SO(3)} \sin{\theta} + X^2_{SO(3)} (1 - \cos{\theta})\right) \stackrel{?}{=} \begin{bmatrix}0 & 0 &0\\0 & 0 &0\\0 & 0 &0\end{bmatrix} $$
However, after attempting to use SymPy to simplify the expression above, I did not get a $\mathbf{0}$ matrix. It seems like one of the following is true:
- I might be using a wrong analytical form $\exp_{SO(3)}(x,y,z)$.
- I might misunderstood what $\theta$ stands for in $\exp_{SO(3)}(x,y,z)$.
- I made a mistake when re-writing the expressions into SymPy.
- SymPy is unable to correctly simplify the expression.
- The limit does not hold for $SO(3)$.
What did I do wrong? And if the limit does not hold for $SO(3)$, what are some other ways to derive the exponential map for $SO(3)$ in an intuitive and satisfying way?
Below is the Python/SymPy code I used:
from sympy import *
init_printing()
x, y, z = symbols('x y z')
G = Matrix([
[0, -z, y],
[z, 0, -x],
[-y, x, 0]
])
The analytic expression of the exponential map
omega = sqrt(xx + yy + zz)
analytic_expression = Identity(3).as_explicit() + sin(omega) G + (1 - cos(omega)) * G**2
Expressing the exponential map as a limit
n = symbols('n', integer=True)
limit_expression = (Identity(3).as_explicit() + G/n)**n
limit_expression = limit_expression.limit(n, oo)
If both expressions are exactly the same, their difference should be the zero matrix
diff_matrix = simplify(analytic_expression - limit_expression)
diff_matrix is NOT zero. Why?
print(diff_matrix)
EDIT:
To rule-out the possibility of a bug in SymPy, I have also tried to simplify the expression using Wolfram Mathematica (I assume Mathematica is more reliable than SymPy). However, not even Mathematica simplified the difference between the limit and the analytical solution into the $\mathbf{0}$ matrix. The Mathematica code:
Clear["Global`*"]
X = {
{0, -z, y},
{z, 0, -x},
{-y, x, 0}
}
omega = Sqrt[x^2 + y^2 + z^2]
analyticExpression = IdentityMatrix[3] + Sin[omega]X + (1 - Cos[omega]) (X.X)
limitExpression = Limit[MatrixPower[IdentityMatrix[3] + X/n, n], n -> Infinity]
(analyticExpression - limitExpression) // FullSimplify // MatrixForm