Boost logo

Boost Users :

Subject: Re: [Boost-users] Multiplying a matrix and vector ===> vector
From: Vipin Varma (varma_at_[hidden])
Date: 2012-10-27 06:47:26


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 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