JuliaGeometry / Rotations.jl

Julia implementations for different rotation parameterizations
https://juliageometry.github.io/Rotations.jl
MIT License
176 stars 44 forks source link

Jacobian of `exp(RotationVecGenerator(...))` at 0 results in `NaN` #280

Open cafaxo opened 9 months ago

cafaxo commented 9 months ago

This should not result in NaN:

julia> f(p) = exp(RotationVecGenerator(p[1], p[2], p[3]));

julia> ForwardDiff.jacobian(f, [0.0, 0.0, 0.0])
9×3 Matrix{Float64}:
 NaN  NaN  NaN
 NaN  NaN  NaN
 NaN  NaN  NaN
 NaN  NaN  NaN
 NaN  NaN  NaN
 NaN  NaN  NaN
 NaN  NaN  NaN
 NaN  NaN  NaN
 NaN  NaN  NaN

The correct output is

 julia> f2(p) = exp(SMatrix(RotationVecGenerator(p[1], p[2], p[3])));

julia> ForwardDiff.jacobian(f2, [0.0, 0.0, 0.0])
9×3 Matrix{Float64}:
  0.0   0.0   0.0
  0.0   0.0   1.0
  0.0  -1.0   0.0
  0.0   0.0  -1.0
  0.0   0.0   0.0
  1.0   0.0   0.0
  0.0   1.0   0.0
 -1.0   0.0   0.0
  0.0   0.0   0.0