Boost logo

Boost Users :

Subject: Re: [Boost-users] Multiplying a matrix and vector ===> vector
From: Oswin Krause (Oswin.Krause_at_[hidden])
Date: 2012-10-28 06:26:20


Hi,

without knowing what CLN should be (would have been nice to know
beforehand, that you are using an unusual value_typ for
vectors/matrics...)

I suspect you are compiling in debug mode and the error goes away in
release. This is because the debug test for numeric stability fails.

Try to define this before including anything from ublas (or set as
compile flag):
BOOST_UBLAS_TYPE_CHECK=0

On 2012-10-27 11:47, Vipin Varma wrote:
> Yes, in fact I just realised that I can do all the usual algebra for
> standard data types like double, float etc. But when I try to use CLN
> rational numbers - which is what I want - the below step fails with
> the following compile error:
> <ERROR>
> /usr/include/boost/numeric/ublas/traits.hpp:97: error: no matching
> function for call to 'sqrt(const cln::cl_RA&)'
> /usr/include/bits/mathcalls.h:157: note: candidates are: double
> sqrt(double)
> /usr/include/c++/4.3/cmath:434: note: long double
> std::sqrt(long double)
> /usr/include/c++/4.3/cmath:430: note: float
> std::sqrt(float)
> <ERROR>
>
> However I can still multiply a scalar CLN number with a CLN matrix
> and assign it to a new CLN matrix; it's multiplication of a CLN
> vector
> with a CLN matrix that gives the problem.
>
> Thanks,
> Vipin
>
> On Fri, 26 Oct 2012, Oswin Krause wrote:
>
>> Have you tried:
>>
>> vector z = prod(m,x);
>>
>> On 2012-10-26 13:08, Vipin Varma wrote:
>>> Dear all,
>>> My basic requirement is to multiply a matrix and a vector and then
>>> to
>>> store it into a vector using Boost's UBLAS.
>>> When I multiply a boost::numeric::ublas::compressed_matrix with a
>>> boost::numeric::ublas::vector using prod(matrix, vector), the
>>> output
>>> is a boost::numeric::ublas::matrix_vector_binary1. E.g.
>>> <PSEUDOCODE>
>>> boost::numeric::ublas::compressed_matrix m;
>>> boost::numeric::ublas::vector x;
>>> boost::numeric::ublas::matrix_vector_binary1<compressed_matrix,
>>> vector, ?
>>>> tmp;
>>> tmp = prod(m,x);
>>> <PSEUDOCODE>
>>> The problem is that in the third field --- which expects the
>>> operation type --- in line 3, I do not know what to enter or how to
>>> specify the type of operation; I tried '*' and 'prod' and 'vector'
>>> and
>>> 'compressed_matrix' but none work.
>>> Alternatively, I can avoid the tmp variable altogether and get a
>>> working program to copy the result of matrix-vector multiplication
>>> onto a new vector y but then I would need two multiplications. E.g.
>>> <CODE>
>>> std::copy(prod(m,x).begin(), prod(m,x).end(), y.begin());
>>> <CODE>
>>> Any suggestions on how to declare a matrix_vector_binary1 correctly
>>> or how to get the finaly result efficiently onto a vector will be
>>> appreciated.
>>> Regards,
>>> Vipin
>>> _______________________________________________
>>> Boost-users mailing list
>>> Boost-users_at_[hidden]
>>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>
>> _______________________________________________
>> Boost-users mailing list
>> Boost-users_at_[hidden]
>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net