|
Loading...
Searching...
No Matches
Go to the documentation of this file.
28#ifndef _BASEVECTORS_H_
29#define _BASEVECTORS_H_
33#define SOPLEX_DEBUG_BASEVECTORS
47#define SOPLEX_VECTOR_MARKER 1e-100
70 for( int i = 0; i < vec. size(); ++i)
72 assert(vec. index(i) < dim());
88 for( int i = vec. size() - 1; i >= 0; --i)
90 assert(vec. index(i) < dim());
128 assert(vec. dim() <= dim());
134 for( int i = vec. size() - 1; i >= 0; --i)
136 val[*idx] = vec. val[*idx];
154 for( int i = vec. size() - 1; i >= 0; --i)
156 assert(vec. index(i) >= 0);
172 assert(dim() == vec. dim());
176 for( int i = vec. size() - 1; i >= 0 ; --i)
181 for( int i = dim() - 1; i >= 0; --i)
196 for( int i = vec. size() - 1; i >= 0; --i)
198 assert(vec. index(i) >= 0);
199 assert(vec. index(i) < dim());
214 assert(dim() == vec. dim());
218 for( int i = vec. size() - 1; i >= 0; --i)
223 for( int i = dim() - 1; i >= 0; --i)
237 assert(dim() >= vec. dim());
241 for( int i = vec. size() - 1; i >= 0; --i)
254 assert(dim() == vec. dim());
262 for( int i = vec. size() - 1; i >= 0; --i)
264 x += val[*idx] * vec. val[*idx];
271 return operator*( static_cast<const VectorBase<R>& >(vec));
278template < class S, class T >
282 for( int i = vec. size() - 1; i >= 0; --i)
284 assert(vec. index(i) < dim());
295template < class S, class T >
299 for( int i = vec. size() - 1; i >= 0; --i)
301 assert(vec. index(i) < dim());
312template < class S, class T >
316 assert(vec. dim() <= dim());
322 for( int i = vec. size() - 1; i >= 0; --i)
323 val[idx[i]] += x * vec[idx[i]];
327 assert(vec. dim() == dim());
329 for( int i = dim() - 1; i >= 0; --i)
387template < class S, class T >
398 for( int i = vec. size() - 1; i >= 0; --i)
406 if(isNotZero(x, this->tolerances()->epsilon()))
416 x = xx * vec. value(i);
418 if(isNotZero(x, this->tolerances()->epsilon()))
430 int* endptr = idx + num;
432 for(; iptr < endptr; ++iptr)
436 if(isNotZero(x, this->tolerances()->epsilon()))
442 num = int(iiptr - idx);
446 VectorBase<R>::multAdd(xx, vec);
448 assert(isConsistent());
456template < class S, class T >
461 assert(dim() == x. dim());
462 assert(x. dim() == y. dim());
471 int n = x. size() - 1;
480 while(i < n && j < m)
496 while(i < n && xi != yj)
499 while(j < m && xi != yj)
508 assert(isConsistent());
517template < class S, class T >
521 assert(A. num() == dim());
527 for( int i = dim() - 1; i >= 0; --i)
531 if(isNotZero(y, this->tolerances()->epsilon()))
538 assert(isConsistent());
546#define SOPLEX_SHORTPRODUCT_FACTOR 0.5
548template < class S, class T >
553 int& nCallsSparse, int& nCallsFull
556 assert(A. num() == x. dim());
562 if(timeSparse != nullptr)
565 assign2product1(A, x);
568 if(timeSparse != nullptr)
576 if(timeSparse != nullptr)
579 assign2productShort(A, x);
582 if(timeSparse != nullptr)
589 if(timeFull != nullptr)
592 assign2productFull(A, x);
595 if(timeFull != nullptr)
601 assert(isConsistent());
610template < class S, class T >
615 assert(x. size() == 1);
618 const int nzidx = x. idx[0];
619 const T nzval = x. val[nzidx];
623 if(isZero(nzval, this->tolerances()->epsilon()) || Ai. size() == 0)
629 for( int j = num - 1; j >= 0; --j)
637 assert(isConsistent());
646template < class S, class T >
660 int curidx = x. idx[0];
661 const T x0 = x. val[curidx];
664 int xsize = x. size();
669 if(isZero(x0, this->tolerances()->epsilon()) || num == 0)
676 for( int j = 0; j < num; ++j)
679 const R product = x0 * elt. val;
682 idx[nonzero_idx] = elt. idx;
692 for( int i = 1; i < xsize; ++i)
695 const T xi = x. val[curidx];
701 if(isNotZero(xi, this->tolerances()->epsilon()) || Aisize == 0)
704 for( int j = 0; j < Aisize; ++j)
707 idx[nonzero_idx] = elt. idx;
719 oldval += xi * elt. val;
736 for( int i = 0; i < nonzero_idx; ++i)
744 idx[nz_counter] = curidx;
751 assert(isConsistent());
760template < class S, class T >
773 bool A_is_zero = true;
774 int xsize = x. size();
777 for( int i = 0; i < xsize; ++i)
779 const int curidx = x. idx[i];
780 const T xi = x. val[curidx];
784 if(A_is_zero && Aisize > 0)
787 for( int j = 0; j < Aisize; ++j)
804template < class S, class T >
822 for( int i = 0; i < end; ++i)
831 if(isNotZero(xval, this->tolerances()->epsilon()))
834 x. idx[ nzcount++ ] = i;
836 for( int j = Ai. size() - 1; j >= 0; --j)
853 assert(isConsistent());
871 for( int i = 0; i < s; ++i)
873 int k = rhs. index(i);
876 if(isZero(v, this->tolerances()->epsilon()))
887 assert(isConsistent());
905 for( int i = 0; i < s; ++i)
907 int k = rhs. index(i);
921 assert(isConsistent());
958 for( int i = vec. dim() - 1; i >= 0; --i)
989 for( int i = vec. dim() - 1; i >= 0; --i)
1016 assert(max() >= sv. size());
1023 for( int i = 0; i < nnz; ++i)
1027 if(sv. value(idx) != 0.0)
1051 for( int i = size() - 1; i >= 0; --i)
1110 assert(isConsistent());
1123 assert( this != &vec);
1126 makeMem(vec. size());
1149 for(i = 0; i < vec. dim() - 1; ++i)
1150 s << vec[i] << ", ";
1166 for( int i = 0; i < res. dim(); ++i)
1184 for( int i = 0; i < v. size(); ++i)
1210 while(s.get(c).good())
1212 if(c != ' ' && c != '\t' && c != '\n')
1224 if(i >= vec. dim() - 1)
1229 while(s.get(c).good())
1231 if(c != ' ' && c != '\t' && c != '\n')
1258 for( int i = 0, j = 0; i < v. size(); ++i)
1263 os << " - " << -v. value(i);
1265 os << " + " << v. value(i);
1270 os << " x" << v. index(i);
1273 if((i + 1) % 4 == 0)
1287 for( int i = 0; i < s. num(); ++i)
1296#ifdef SOPLEX_DEBUG_BASEVECTORS
1298#undef SOPLEX_DEBUG_BASEVECTORS
#define SOPLEX_SHORTPRODUCT_FACTOR Assigns SSVectorBase to for a setup x.
#define SOPLEX_VECTOR_MARKER
bool isConsistent() const Consistency check.
void allocMem(int n) Allocate memory for n nonzeros.
void add(const SVectorBase< S > &vec) Append nonzeros of sv.
int num number of used indices
int * idx array of indices
Sparse vector nonzero element.
int idx Index of nonzero element.
R val Value of nonzero element.
bool setupStatus Is the SSVectorBase set up?
R value(int n) const Returns value of the n 'th nonzero element.
int index(int n) const Returns index of the n 'th nonzero element.
int dim() const Dimension of VectorBase.
const int * indexMem() const Returns array indices.
bool isSetup() const Returns setup status.
int size() const Returns the number of nonzeros.
int memSize() const Used nonzero memory.
int num() const Current number of SVectorBases.
Nonzero< R > & element(int n) Reference to the n 'th nonzero element.
int & index(int n) Reference to index of n 'th nonzero.
R & value(int n) Reference to value of n 'th nonzero.
int dim() const Dimension of the vector defined as maximal index + 1.
SVectorBase< R > & operator=(const VectorBase< S > &vec) Assignment operator.
int size() const Number of used indices.
Wrapper for the system time query methods.
virtual void start()=0 start timer, resume accounting user, system and real time.
virtual Real stop()=0 stop timer, return accounted user time.
void reDim(int newdim, const bool setZero=true) Resets VectorBase's dimension to newdim.
int dim() const Dimension of vector.
std::vector< R > val Values of vector.
Everything should be within this namespace.
std::istream & operator>>(std::istream &s, VectorBase< R > &vec)
std::ostream & operator<<(std::ostream &s, const VectorBase< R > &vec) Output operator.
VectorBase< R > operator-(const SVectorBase< R > &v, const VectorBase< R > &w) Subtraction.
DSVectorBase< R > operator*(const SVectorBase< R > &v, R x) Scaling.
Debugging, floating point type and parameter definitions.
|