New user self-registration is disabled due to spam. Please email eigen-core-team @ lists.tuxfamily.org if you need an account.
Before reporting a bug, please make sure that your Eigen version is up-to-date!
Bug 1735 - Support non-commutative multiplication "Scalar" types
Summary: Support non-commutative multiplication "Scalar" types
Status: CONFIRMED
Alias: None
Product: Eigen
Classification: Unclassified
Component: Core - general (show other bugs)
Version: 3.4 (development)
Hardware: All All
: Normal Feature Request
Assignee: Nobody
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-08-01 20:32 UTC by Dirk Toewe
Modified: 2019-08-07 16:49 UTC (History)
3 users (show)



Attachments

Description Dirk Toewe 2019-08-01 20:32:01 UTC
"Scalar" types with a non-commutative multiplication would be useful in many different areas. Here are two example of such data types that come to my mind:

  * Matrices of matrices as requested in this other issue:
    http://eigen.tuxfamily.org/bz/show_bug.cgi?id=574
  * Quaternions as used for example in Signal Processing:
    http://sepwww.stanford.edu/sep/jeff/Quaternions.pdf

In v3.3.7, I could get Quaternions to work as scalar type albeit with many caveats, limitations and under ear-deafening toothgrinding. With the latest github-mirror versions however, it does not work at all anymore. This leads me to the following feature request: Would it be possible to step-by-step add support for Scalar types with non-commutative Scalar types? Maybe just starting with adding a new "IsMultiplicationCommutative" member to NumTraits, then supported basic operations like matrix multiplication and element-wise multiplication. That would allow me to add support of quaternions to the JacobiSVD.
Comment 1 Christoph Hertzberg 2019-08-07 16:49:04 UTC
No objections, though probably not too trivial to implement.

I guess the main work will be adapting all product implementations (e.g., some optimizations like (a*A)*(b*B) == (a*b)*(A*B) are not possible anymore).

After resolving Bug 560, Matrix<Quaterniond, ...> would be possible.

Note You need to log in before you can comment on or make changes to this bug.