-
Notifications
You must be signed in to change notification settings - Fork 56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
lie_bracket
and adjoint_action
#381
Conversation
Codecov Report
@@ Coverage Diff @@
## master #381 +/- ##
==========================================
+ Coverage 97.73% 97.77% +0.03%
==========================================
Files 76 78 +2
Lines 5876 6060 +184
==========================================
+ Hits 5743 5925 +182
- Misses 133 135 +2
Continue to review full report at Codecov.
|
We might need some more documentation, especially, it would be nice to have the general case ( https://en.wikipedia.org/wiki/Lie_bracket_of_vector_fields ) on Manifolds, too (at least have it in mind here). |
Yes, I'll add more documentation here. For this PR I'm going to restrict the Lie bracket to Lie algebras, and the more general case can be added later (I don't even know what could it be useful for). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good! It may be the case that the approach for SpecialEuclidean
works more generally for semidirect product groups. i.e. the normal subgroup's part of the lie bracket looks like the lie bracket of the normal subgroup. We'd have to think more carefully about the other part of the tangent vector though.
There is such a thing as a semidirect sum of Lie algebras but it looks like in practice the structure can be most easily obtained by embedding is some higher dimensional general linear group. There are some more general details here: https://en.wikipedia.org/wiki/Lie_algebra_extension#By_semidirect_sum . |
Co-authored-by: Seth Axen <seth.axen@gmail.com>
Yeah that looks identical to what we see in the special case of semidirect products embedded in |
Co-authored-by: Seth Axen <seth.axen@gmail.com>
…od of lie_bracket
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
I've read a bit about the representation theory of the adjoint representation and it is very nontrivial. I am no longer sure this is the right design 😕 . |
What in particular are your concerns? |
Mostly the fact that adjoint representations of many groups and algebras are not faithful, and that we still won't have any generic faithful representations that would work on |
OK, after thinking a bit more about it I think these methods can be useful anyway. I'd still like to finish differentials of translations and adjoint action on SE(n) (primarily SE(3)). |
@sethaxen Where did you get the formula for |
I don't remember or if I worked it out myself. Can you share a snippet that fails? |
I guess nearly any invocation of julia> using Manifolds, LinearAlgebra
julia> G = SpecialEuclidean(3);
julia> t = Vector{Float64}.([1:3, 2:4, 4:6]);
julia> ω = [[1.0, 2.0, 3.0], [3.0, 2.0, 1.0], [1.0, 3.0, 2.0]];
julia> p = Matrix(I, 3, 3);
julia> Rn = Rotations(3);
julia> pts = [ProductRepr(ti, exp(Rn, p, hat(Rn, p, ωi))) for (ti, ωi) in zip(t, ω)];
julia> X = ProductRepr([-1.0, 2.0, 1.0], hat(Rn, p, [1.0, 0.5, -0.5]));
julia> q = ProductRepr([0.0, 0.0, 0.0], p);
julia> translate_diff(G, pts[1], q, X)
ProductRepr with 2 submanifold components:
Component 1 =
3-element Vector{Float64}:
2.2112553975587987
0.5176292379367051
0.9178287088559302
Component 2 =
3×3 Matrix{Float64}:
0.0 0.5 0.5
-0.5 0.0 -1.0
-0.5 1.0 0.0
julia> X
ProductRepr with 2 submanifold components:
Component 1 =
3-element Vector{Float64}:
-1.0
2.0
1.0
Component 2 =
3×3 Matrix{Float64}:
0.0 0.5 0.5
-0.5 0.0 -1.0
-0.5 1.0 0.0 When calculating things using the embedding in GL(n+1) the left |
I wonder if maybe the difference is the choice in representation. For |
That might be it. Why did you choose that convention? I think having semidirect products easily identifiable as subgrups of GL(M) would make defining new ones much easier and consistent, and this convention makes this identification hard. |
Because it involved less divisions by points for |
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ronny Bergmann <git@ronnybergmann.net>
Co-authored-by: Ronny Bergmann <git@ronnybergmann.net>
…s/Manifolds.jl into mbaran/lie-bracket
I think I've addressed all issues now, except the |
What do we do about the vector transports that are documented for identity but implemented more general? I hope I have marked all resolved questions as resolved, so could you once more check the ones I did not yet mark? For the name: What about |
I've improved documentation of vector transports today, is it still inconsistent somewhere? The currently unresolved comments are:
|
Thanks for the summary, the ones where the line got changed too much did not show up in the “Files Changed” view so I must have missed them that way; I only have the one open one left I just commented on. Thanks for carefully working on all my remarks. |
Co-authored-by: Ronny Bergmann <git@ronnybergmann.net>
Thanks for a review. This is a quite significant set of changes so it's good to have them checked 🙂. |
Once the tests have passed, I think this can be merged, though we loose two lines in coverage (if you want, you could check for these) but it is within the limit of our tolerance. |
Great! These two lines reported as not covered look like false positives to me so I'd ignore that. |
Julia 1.4 CI seems broken 😕 |
It seems that the call to |
Weird, from my tests it looks like |
Well, on 1.6 with all the other packages loaded it also takes way too long. |
This PR adds two things that seem to be missing from our Lie group/Lie algebra support, as identified in #366 .