-
Notifications
You must be signed in to change notification settings - Fork 64
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
Mv.dual() method return wrong result #514
Comments
The current implementation of Mv.dual() only multiply the input multivector by the pseudoscalar I in different ways according to the dual mode, but according to this: https://youtu.be/2AKt6adG_OI?t=1611&si=Z8VbJiqwMEVUlCW1, the implementation will not give correct result in some situations, the dual multivector *v of v should always produce this result: v (*v) = I, where I is the pseudoscalar. |
Hi @utensil, I found galgebra have no "dual inverse" (hodge star inverse
I am not sure how exactly they work when the pseudoscalar can not be normalized because of degenerate basis set, but definition 1 is specifically defined for projective GA which is always degenerate. However, https://www.rigidgeometricalgebra.org/wiki/index.php?title=Geometric_norm state for any degenerate basis like the pseudo scalar in projective GA, although it can not be normalized because the basis square to 0, the dual of a degenerate basis is always non-degenerate (like the dual of a degenerate pseudo scalar I is always a scalar which is non-degenerate), so we can "normalize" a degenerate basis like I by doing dual-inverse(normalize(dual(I))). It is absolutely beyond my math understanding so I am just mentioning this as a record.
|
With the latest branch , per http://www.faculty.luther.edu/~macdonal/GAlgebraPrimer.pdf , the behavior you desire can be restored by adding a This means the dual will be calculated by
GAlgebra embraces as many conventions as possible, via modes. |
@utensil thanks for the explanation 👍 |
@mammalwong Issues reported by you are mostly fixed in the latest branch, except the ones marked with The branch will be included in the |
Ah, sorry, I missed that one. Thanks! |
To reproduce the bug, run this in a Jupyter/Colab cell:
Which outputs:
(-e_xyz, -e_xyz, 'I+')
Expected correct result:
(e_xyz, e_xyz, 'I+')
The text was updated successfully, but these errors were encountered: