Boost logo

Ublas :

From: Paul C. Leopardi (paul.leopardi_at_[hidden])
Date: 2008-04-29 19:22:43


Hi Johan,
My reply is below.
On Tue, 29 Apr 2008, Johan Compen wrote:
> On Mon, Apr 28, 2008 at 5:41 PM, Andreas Klöckner
>
> <lists_at_[hidden]> wrote:
> > On Montag 28 April 2008, Johan Compen wrote:
> > > Hi,
> > >
> > > I'm using the vector and matrix classes in Boost to convert some
> > > Matlab code to C++. I'm having troubles with this code:
> > >
> > > typedef boost::numeric::ublas::vector<double> Vector_t;
> > > Vector_t a(3);
> > > a(0) = 0; a(1)=1; a(2)=2;
> > >
> > > Vector_t b = a * 0.5; //works
> > > Vector_t c = a + 0.5; //compiler error
> > >
> > > error C2678: binary '+' : no operator found which takes a left-hand
> > > operand of type 'Vector_t' (or there is no acceptable conversion)
> > >
> > > How can I solve this? How can I add a constant value to each element
> > > in a vector?
> >
> > c = a + scalar_vector<double>(a.size(), 0.5);
>
> Ok this works, but why isn't there an operator+ that adds a constant
> value to each element in a vector?
> It seems inconsistent to me that this works
> Vector_t b = a * 0.5;
> but this doesn't
> Vector_t c = a + 0.5;
>
> Johan.

Understandable from your point of view.

The abstract definition of a vector space over a field (in mathematics, not
necessarily in uBLAS) includes the operations of addition of two vectors and
multiplication by an element of the field, but does not define the addition
of a vector and a field element.

In Clifford algebras over a field, the addition of a vector and a field
element is defined, but it does something different from what you would
expect, because the field element 1 is different from the vector of all ones.

So while it might be useful for uBLAS to have an operator+ with the definition
you expect, it isn't really any more consistent to do so.
Best, Paul