Re: [eigen] mpreal + MatrixFunctions |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen 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
http://eigen.tuxfamily.org/dox-devel/unsupported/group__MatrixFunctions__Module.html#matrixbase_matrixfunction
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.
Jitse