Re: [eigen] Optimization advice for a specific expression |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
On 2016-02-04 17:02, Alberto Luaces wrote:
Other than that: * What exactly do you mean by homogeneous?
G = [ v3x3 | 0]
[ 0ᵀ | 1]
where "v3x3" is a 3x3 matrix, and "0" a vector of 3 zero-valued elements.
Can you make any assumptions on the determinant of G? (Calculating the
det didn't not seem to be the bottleneck, though)
No, I cannot, but as you point, removing the determinant computation for
testing purposes does not yield any improvement.
Given the above, you have:
G.determinant() == v3x3.determinant(),
which should be significantly faster than the full determinant.
If v3x3 happens to be a rotation matrix, G.determinant()==1;
Does it have any special form (e.g. low rank, or Identity+lowRank)
It is just symmetric:
Eplus << 2 , 1 , 1 , 5,
1 , 2 , 1 , 5,
1 , 1 , 2 , 5,
5 , 5 , 5 , 20;
The upper left is Identity + [1,1,1]^T*[1,1,1]. I'll abbreviate V=v3x3.
If you then define w=V*[1,1,1]^T == V.rowwise().sum(), the resulting
summand is (without the determinant factor):
[ V*V^T + w*w^T, 5*w ]
[ 5*w^T , 20 ]
Again, if V happens to be a rotation, then V*V^T=Identity
So with a bit of hand-coding you may gain a lot efficiency here. It may
be tricky to get it right that vectorization can still be used. E.g.,
instead of V.rowwise().sum() you can calculate Vector4d
w=G.leftCols<3>().rowwise().sum(), which should be near optimal [again,
check the generated assembly]
Multiplication by 5 can be done at the end (if I4x4 initially is 0), and
the lower right element is just 20*{sum of determinants}.
Cheers,
Christoph
--
Dipl. Inf., Dipl. Math. Christoph Hertzberg
Universität Bremen
FB 3 - Mathematik und Informatik
AG Robotik
Robert-Hooke-Straße 1
28359 Bremen, Germany
Zentrale: +49 421 178 45-6611
Besuchsadresse der Nebengeschäftsstelle:
Robert-Hooke-Straße 5
28359 Bremen, Germany
Tel.: +49 421 178 45-4021
Empfang: +49 421 178 45-6600
Fax: +49 421 178 45-4150
E-Mail: chtz@xxxxxxxxxxxxxxxxxxxxxxxx
Weitere Informationen: http://www.informatik.uni-bremen.de/robotik