Boost logo

Ublas :

From: Preben Hagh Strunge Holm (preben_at_[hidden])
Date: 2007-03-12 03:50:00


> On Sunday 11 March 2007 10:02, Preben Hagh Strunge Holm wrote:
>> Assertion failed in file
>> ../../RobWork/ext/boost/numeric/ublas/detail/vector_assign.hpp at line 371:
>> detail::expression_type_check (v, cv)
>> terminate called after throwing an instance of
>> 'boost::numeric::ublas::external_logic'
>> what(): external logic
>
> Ok. This is usually thrown if the matrix and vector contain much noise. This
> happens frequently when computing the resiudual: r = b - Ax; and afterwards
> apply some iterations: d = Ar. Here 'r' is usually small and has only few
> significant bits left. Thus the (runtime) checks fails because the result of
> the dense product differs too much from the result of the optimized product.

How can the "dense product difference" be measured without
multiplication like dense?
And why is the result not exactly the same?

Multiplication of a dense matrix with a lot of members exactly 0
compared to a compressed matrix?

> You can define
> #define BOOST_UBLAS_TYPE_CHECK_EPSILON 1.0e-10
> in order to weaken this check. You can (dynamically) disable such checks by
> declaring (AFAIR)
>
> template< class T >
> bool disable_type_check<T>::value = false;
>
> just after all includes.

dGv is actually supposed to be very small! Actually this is a measure of
the error!

This is really a strange "error" for me since the product of a matrix
and a vector should be able to be anything!

And why is the problem not present running without optimization and a
problem when using optimization!

Thanks for helping

Best regards,
Preben Holm