Re: [eigen] mpreal + MatrixFunctions

[ Thread Index | Date Index | More Archives ]

On Sun, 21 Aug 2011, 何震邦 wrote:

Thanks for your suggestions!  I've written a computeUV() to take care of
all non-specialized types (inclusive of mpfr::mpreal), while
computeUV(float), computeUV(double), computeUV(long double) are still
there for built-in real scalars.  It runs smoothly so far. :)

Can you explain to me how to use this with mpfr:mpreal? When I tried it, I get a compiler error that computeUV(....) in MatrixExponential.h:203 is ambiguous. There also seems to be a typo on lines 305 and 306 (m_M instead of A).

Additionally, I'm not sure overloading computeUV() is the correct approach. Your patch computes A.sinh() and A.cosh(): two calls to A.matrixFunction(). Instead, we can compute the exponential with only one call to A.matrixFunction(); see the example at
This is probably faster and more accurate.

於 2011/8/21 上午 06:14, Gael Guennebaud 提到:
> Actually I think that this computeUV() method should be implemented in
> a different way: first, I don't see why it has an argument. Second,
> since its implementation really depends on the scalar type, it should
> rather call a free function (or a static method of an helper class)
> that one can specialize for his own scalar type.

You're probably right. It was the first time that I really used Eigen and templates. The function has an argument to select the correct overload; a templated function is a cleaner solution. I don't quite remember why I did not implement it as a free function, but I probably wanted to have everything in one class. I now see that this causes problems when one want to support a custom scalar type, so I will change it in the future. Thanks for the suggestion.


Mail converted by MHonArc 2.6.19+