6 #ifndef CoinPackedMatrix_H 7 #define CoinPackedMatrix_H 165 #ifndef COIN_FAST_CODE 167 throw CoinError(
"bad index",
"vectorFirst",
"CoinPackedMatrix");
174 #ifndef COIN_FAST_CODE 176 throw CoinError(
"bad index",
"vectorLast",
"CoinPackedMatrix");
182 #ifndef COIN_FAST_CODE 184 throw CoinError(
"bad index",
"vectorSize",
"CoinPackedMatrix");
188 #ifndef CLP_NO_VECTOR 191 #ifndef COIN_FAST_CODE 193 throw CoinError(
"bad index",
"vector",
"CoinPackedMatrix");
231 #ifndef CLP_NO_VECTOR 247 const int *vecind,
const double *vecelem);
248 #ifndef CLP_NO_VECTOR 265 const double * element,
int numberRows=-1);
266 #ifndef CLP_NO_VECTOR 282 const int *vecind,
const double *vecelem);
283 #ifndef CLP_NO_VECTOR 300 const double * element,
int numberColumns=-1);
314 void deleteCols(
const int numDel,
const int * indDel);
316 void deleteRows(
const int numDel,
const int * indDel);
322 const int numReplace,
const double * newElements);
328 bool keepZero=
false);
368 const int numMajor,
const int * indMajor);
373 const int numMajor,
const int * indMajor);
379 const int numMajor,
const int * indMajor,
380 const int numMinor,
const int * indMinor);
389 void copyOf(
const bool colordered,
390 const int minor,
const int major,
const CoinBigIndex numels,
391 const double * elem,
const int * ind,
393 const double extraMajor=0.0,
const double extraGap=0.0);
417 const int minor,
const int major,
419 double *& elem,
int *& ind,
421 const int maxmajor = -1,
const CoinBigIndex maxsize = -1);
459 void times(
const double * x,
double * y)
const;
460 #ifndef CLP_NO_VECTOR 469 #ifndef CLP_NO_VECTOR 515 void dumpMatrix(
const char* fname = NULL)
const;
531 #ifndef CLP_NO_VECTOR 537 const double *vecelem);
538 #ifndef CLP_NO_VECTOR 548 const double *vecelem);
549 #ifndef CLP_NO_VECTOR 568 const double * element);
623 void timesMajor(
const double * x,
double * y)
const;
624 #ifndef CLP_NO_VECTOR 634 void timesMinor(
const double * x,
double * y)
const;
635 #ifndef CLP_NO_VECTOR 647 #ifndef CLP_NO_VECTOR 655 template <
class FloatEqual>
bool 758 const double extraMajor,
const double extraGap);
761 const int minor,
const int major,
const CoinBigIndex numels,
762 const double * elem,
const int * ind,
764 const double extraMajor,
const double extraGap);
767 const int minor,
const int major,
const CoinBigIndex numels,
768 const double * elem,
const int * ind,
782 const int * rowIndices,
783 const int * colIndices,
784 const double * elements,
805 int extraForMajor,
int extraElements,
811 int numberRows,
const int * whichRows,
812 int numberColumns,
const int * whichColumns);
841 int verifyMtx(
int verbosity = 1,
bool zeroesAreError =
false)
const ;
848 const int minor,
const int major,
const CoinBigIndex numels,
849 const double * elem,
const int * ind,
851 const double extraMajor=0.0,
const double extraGap=0.0);
854 const int minor,
const int major,
855 const double * elem,
const int * ind,
858 const int minor,
const int major,
const CoinBigIndex numels,
859 const double * elem,
const int * ind,
875 const double * element,
int numberOther=-1);
887 const double * element,
int numberOther=-1);
void majorAppendSameOrdered(const CoinPackedMatrix &matrix)
Append the columns of the argument to the right end of this matrix.
void transpose()
Transpose the matrix.
void removeGaps(double removeValue=-1.0)
Remove the gaps from the matrix if there were any Can also remove small elements fabs() <= removeValu...
void reserve(const int newMaxMajorDim, const CoinBigIndex newMaxSize, bool create=false)
Reserve sufficient space for appending major-ordered vectors.
Error Class thrown by an exception.
int appendMajor(const int number, const CoinBigIndex *starts, const int *index, const double *element, int numberOther=-1)
Append a set of rows (columns) to the end of a row (colum) ordered matrix.
bool isColOrdered() const
Whether the packed matrix is column major ordered or not.
bool colOrdered_
A flag indicating whether the matrix is column or row major ordered.
void appendRow(const CoinPackedVectorBase &vec)
Append a row to the end of the matrix.
void submatrixOfWithDuplicates(const CoinPackedMatrix &matrix, const int numMajor, const int *indMajor)
Extract a submatrix from matrix.
CoinBigIndex size_
the number of nonzero entries
void deleteMajorVectors(const int numDel, const int *indDel)
Delete the major-dimension vectors whose indices are listed in indDel.
void deleteCols(const int numDel, const int *indDel)
Delete the columns whose indices are listed in indDel.
void appendCols(const int numcols, const CoinPackedVectorBase *const *cols)
Append a set of columns to the end of the matrix.
int * getMutableVectorLengths() const
The lengths of the major-dimension vectors.
CoinBigIndex maxSize_
max space allocated for entries
int * length_
Lengths of major-dimension vectors.
int * index_
List of nonzero element minor-dimension indices.
double getCoefficient(int row, int column) const
Return one element of packed matrix.
int getNumCols() const
Number of columns.
double extraMajor_
his much times more space should be allocated for major-dimension vectors when the matrix is resized...
int eliminateDuplicates(double threshold)
Eliminate all duplicate AND small elements in matrix The column starts are not affected.
void modifyCoefficient(int row, int column, double newElement, bool keepZero=false)
Modify one element of packed matrix.
void nullStartArray()
NULLify start array.
void setDimensions(int numrows, int numcols)
Set the dimensions of the matrix.
void nullLengthArray()
NULLify length array.
const double * getElements() const
A vector containing the elements in the packed matrix.
void dumpMatrix(const char *fname=NULL) const
Dump the matrix on stdout.
void setNumElements(CoinBigIndex value)
Change the size of the bulk store after modifying - be careful.
void gutsOfCopyOfNoGaps(const bool colordered, const int minor, const int major, const double *elem, const int *ind, const CoinBigIndex *start)
When no gaps we can do faster.
CoinBigIndex * getMutableVectorStarts() const
The positions where the major-dimension vectors start in element_ and index_.
int maxMajorDim_
max space allocated for major-dimension
void setExtraGap(const double newGap)
Set the extra gap to be allocated to the specified value.
int getVectorSize(const int i) const
The length of i'th vector.
CoinBigIndex * start_
Starting positions of major-dimension vectors.
int minorDim_
size of other dimension
double * element_
List of nonzero element values.
void appendCol(const CoinPackedVectorBase &vec)
Append a column to the end of the matrix.
const CoinBigIndex * getVectorStarts() const
The positions where the major-dimension vectors start in elements and indices.
bool isEquivalent2(const CoinPackedMatrix &rhs) const
Test for equivalence and report differences.
void submatrixOf(const CoinPackedMatrix &matrix, const int numMajor, const int *indMajor)
Extract a submatrix from matrix.
Abstract base class for various sparse vectors.
void reverseOrderedCopyOf(const CoinPackedMatrix &rhs)
Make a reverse-ordered copy.
void clear()
Clear the data, but do not free any arrays.
int getMajorDim() const
Major dimension.
int majorDim_
number of vectors in matrix
CoinPackedMatrix & operator=(const CoinPackedMatrix &rhs)
Assignment operator.
int * countOrthoLength() const
Count the number of entries in every minor-dimension vector and return an array containing these leng...
void transposeTimes(const double *x, double *y) const
Return x * A in y.
void nullIndexArray()
NULLify index array.
int appendMinor(const int number, const CoinBigIndex *starts, const int *index, const double *element, int numberOther=-1)
Append a set of rows (columns) to the end of a column (row) ordered matrix.
int getNumRows() const
Number of rows.
void minorAppendSameOrdered(const CoinPackedMatrix &matrix)
Append the columns of the argument to the bottom end of this matrix.
void times(const double *x, double *y) const
Return A * x in y.
double getExtraMajor() const
Return the current setting of the extra major.
Equality to a scaled tolerance.
void appendMinorVectors(const int numvecs, const CoinPackedVectorBase *const *vecs)
Append several minor-dimension vectors to the end of the matrix.
int getSizeVectorStarts() const
The size of the vectorStarts array.
CoinBigIndex getNumElements() const
Number of entries in the packed matrix.
CoinBigIndex getVectorFirst(const int i) const
The position of the first element in the i'th major-dimension vector.
CoinBigIndex getVectorLast(const int i) const
The position of the last element (well, one entry past the last) in the i'th major-dimension vector...
const int * getIndices() const
A vector containing the minor indices of the elements in the packed matrix.
void setMinorDim(int value)
Set minor dimension.
void deleteMinorVectors(const int numDel, const int *indDel)
Delete the minor-dimension vectors whose indices are listed in indDel.
void orderMatrix()
Sort all columns so indices are increasing.in each column.
int * getMutableIndices() const
A vector containing the minor indices of the elements in the packed matrix.
void printMatrixElement(const int row_val, const int col_val) const
Print a single matrix element.
void assignMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, double *&elem, int *&ind, CoinBigIndex *&start, int *&len, const int maxmajor=-1, const CoinBigIndex maxsize=-1)
Assign the arguments to the matrix.
bool isEquivalent(const CoinPackedVectorBase &rhs, const FloatEqual &eq) const
equivalent - If shallow packed vector A & B are equivalent, then they are still equivalent no matter ...
void bottomAppendPackedMatrix(const CoinPackedMatrix &matrix)
Append the argument to the "bottom" of the current matrix.
void resizeForAddingMajorVectors(const int numVec, const int *lengthVec)
void minorAppendOrthoOrdered(const CoinPackedMatrix &matrix)
Append the rows of the argument to the bottom end of this matrix.
const int * getVectorLengths() const
The lengths of the major-dimension vectors.
void timesMajor(const double *x, double *y) const
Return A * x (multiplied from the "right" direction) in y.
void setMajorDim(int value)
Set major dimension.
virtual ~CoinPackedMatrix()
Destructor.
void deleteRows(const int numDel, const int *indDel)
Delete the rows whose indices are listed in indDel.
void gutsOfCopyOf(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len, const double extraMajor=0.0, const double extraGap=0.0)
int getSizeVectorLengths() const
The size of the vectorLengths array.
bool hasGaps() const
Whether the packed matrix has gaps or not.
void appendMinorVector(const CoinPackedVectorBase &vec)
Append a minor-dimension vector to the end of the matrix.
int compress(double threshold)
Eliminate all elements in matrix whose absolute value is less than threshold.
const CoinShallowPackedVector getVector(int i) const
Return the i'th vector in matrix.
void majorAppendOrthoOrdered(const CoinPackedMatrix &matrix)
Append the rows of the argument to the right end of this matrix.
int verifyMtx(int verbosity=1, bool zeroesAreError=false) const
Scan the matrix for anomalies.
Sparse Matrix Base Class.
void reverseOrdering()
Reverse the ordering of the packed matrix.
void copyOf(const CoinPackedMatrix &rhs)
Copy method.
double getExtraGap() const
Return the current setting of the extra gap.
void replaceVector(const int index, const int numReplace, const double *newElements)
Replace the elements of a vector.
double extraGap_
This much times more space should be allocated for each major-dimension vector (with respect to the n...
double * getMutableElements() const
A vector containing the elements in the packed matrix.
int * getMajorIndices() const
Returns an array containing major indices.
void nullElementArray()
NULLify element array.
void appendMajorVector(const CoinPackedVectorBase &vec)
Append a major-dimension vector to the end of the matrix.
void appendMajorVectors(const int numvecs, const CoinPackedVectorBase *const *vecs)
Append several major-dimensonvectors to the end of the matrix.
void gutsOfOpEqual(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len)
void CoinPackedMatrixUnitTest()
Test the methods in the CoinPackedMatrix class.
int getMaxMajorDim() const
Current maximum for major dimension.
void timesMinor(const double *x, double *y) const
Return A * x (multiplied from the "right" direction) in y.
void setExtraMajor(const double newMajor)
Set the extra major to be allocated to the specified value.
CoinPackedMatrix()
Default Constructor creates an empty column ordered packed matrix.
void resizeForAddingMinorVectors(const int *addedEntries)
friend void CoinPackedMatrixUnitTest()
Test the methods in the CoinPackedMatrix class.
bool isEquivalent(const CoinPackedMatrix &rhs, const FloatEqual &eq) const
Test for equivalence.
void swap(CoinPackedMatrix &matrix)
Swap the content of two packed matrices.
void appendRows(const int numrows, const CoinPackedVectorBase *const *rows)
Append a set of rows to the end of the matrix.
int getMinorDim() const
Minor dimension.
void rightAppendPackedMatrix(const CoinPackedMatrix &matrix)
Append the argument to the "right" of the current matrix.
void appendMinorFast(const int number, const CoinBigIndex *starts, const int *index, const double *element)
Append a set of rows (columns) to the end of a column (row) ordered matrix.
int cleanMatrix(double threshold=1.0e-20)
Really clean up matrix.
void copyReuseArrays(const CoinPackedMatrix &rhs)
Copy method.