#include <IpExpansionMatrix.hpp>
These matrices allow to lift a vector to a vector with larger dimension, keeping some elements of the larger vector zero. This operation is achieved by the MultVector operation. The transpose operation then filters some elements from a large vector into a smaller vector.
Public Member Functions | |
const Index * | ExpandedPosIndices () const |
Return the vector of indices marking the expanded position. | |
const Index * | CompressedPosIndices () const |
Return the vector of indices marking the compressed position. | |
Constructors / Destructors | |
ExpansionMatrix (const ExpansionMatrixSpace *owner_space) | |
Constructor, taking the owner_space. | |
~ExpansionMatrix () | |
Destructor. | |
Protected Member Functions | |
Overloaded methods from Matrix base class | |
virtual void | MultVectorImpl (Number alpha, const Vector &x, Number beta, Vector &y) const |
X = beta*X + alpha*(Matrix S^{-1} Z). | |
virtual void | TransMultVectorImpl (Number alpha, const Vector &x, Number beta, Vector &y) const |
X = beta*X + alpha*(Matrix S^{-1} Z). | |
virtual void | AddMSinvZImpl (Number alpha, const Vector &S, const Vector &Z, Vector &X) const |
X = beta*X + alpha*(Matrix S^{-1} Z). | |
virtual void | SinvBlrmZMTdBrImpl (Number alpha, const Vector &S, const Vector &R, const Vector &Z, const Vector &D, Vector &X) const |
X = S^{-1} (r + alpha*Z*M^Td). | |
virtual void | PrintImpl (const Journalist &jnlst, EJournalLevel level, EJournalCategory category, const std::string &name, Index indent, const std::string &prefix) const |
X = beta*X + alpha*(Matrix S^{-1} Z). |
ExpansionMatrix | ( | const ExpansionMatrixSpace * | owner_space | ) |
Constructor, taking the owner_space.
~ExpansionMatrix | ( | ) |
Destructor.
const Index * ExpandedPosIndices | ( | ) | const [inline] |
Return the vector of indices marking the expanded position.
The result is the Index array (of length NSmallVec=NCols()) that stores the mapping from the small vector to the large vector. For each element i=0,..,NSmallVec in the small vector, ExpandedPosIndices()[i] give the corresponding index in the large vector.
References ExpansionMatrixSpace::ExpandedPosIndices().
Referenced by ExpansionMatrix::AddMSinvZImpl(), TNLPAdapter::GetBoundsInformation(), ExpansionMatrix::MultVectorImpl(), ExpansionMatrix::PrintImpl(), ExpansionMatrix::SinvBlrmZMTdBrImpl(), and ExpansionMatrix::TransMultVectorImpl().
const Index * CompressedPosIndices | ( | ) | const [inline] |
Return the vector of indices marking the compressed position.
The result is the Index array (of length NLargeVec=NRows()) that stores the mapping from the large vector to the small vector. For each element i=0,..,NLargeVec in the large vector, CompressedPosIndices()[i] gives the corresponding index in the small vector, unless CompressedPosIndices()[i] is negative.
References ExpansionMatrixSpace::CompressedPosIndices().
void MultVectorImpl | ( | Number | alpha, | |
const Vector & | x, | |||
Number | beta, | |||
Vector & | y | |||
) | const [protected, virtual] |
X = beta*X + alpha*(Matrix S^{-1} Z).
Specialized implementation.
Implements Matrix.
References DBG_ASSERT, Vector::Dim(), ExpansionMatrix::ExpandedPosIndices(), fkinkryx::i, DenseVector::IsHomogeneous(), Matrix::NCols(), Matrix::NRows(), Vector::Scal(), DenseVector::Scalar(), Vector::Set(), and DenseVector::Values().
void TransMultVectorImpl | ( | Number | alpha, | |
const Vector & | x, | |||
Number | beta, | |||
Vector & | y | |||
) | const [protected, virtual] |
X = beta*X + alpha*(Matrix S^{-1} Z).
Specialized implementation.
Implements Matrix.
References DBG_ASSERT, Vector::Dim(), ExpansionMatrix::ExpandedPosIndices(), fkinkryx::i, DenseVector::IsHomogeneous(), Matrix::NCols(), Matrix::NRows(), Vector::Scal(), DenseVector::Scalar(), Vector::Set(), and DenseVector::Values().
void AddMSinvZImpl | ( | Number | alpha, | |
const Vector & | S, | |||
const Vector & | Z, | |||
Vector & | X | |||
) | const [protected, virtual] |
X = beta*X + alpha*(Matrix S^{-1} Z).
Specialized implementation.
Reimplemented from Matrix.
References Matrix::AddMSinvZImpl(), DBG_ASSERT, Vector::Dim(), ExpansionMatrix::ExpandedPosIndices(), fkinkryx::i, DenseVector::IsHomogeneous(), Matrix::NCols(), Matrix::NRows(), DenseVector::Scalar(), and DenseVector::Values().
void SinvBlrmZMTdBrImpl | ( | Number | alpha, | |
const Vector & | S, | |||
const Vector & | R, | |||
const Vector & | Z, | |||
const Vector & | D, | |||
Vector & | X | |||
) | const [protected, virtual] |
X = S^{-1} (r + alpha*Z*M^Td).
Specialized implementation.
Reimplemented from Matrix.
References DBG_ASSERT, DBG_START_METH, Vector::Dim(), ExpansionMatrix::ExpandedPosIndices(), fkinkryx::i, DenseVector::IsHomogeneous(), Matrix::NCols(), Matrix::NRows(), DenseVector::Scalar(), Matrix::SinvBlrmZMTdBrImpl(), and DenseVector::Values().
void PrintImpl | ( | const Journalist & | jnlst, | |
EJournalLevel | level, | |||
EJournalCategory | category, | |||
const std::string & | name, | |||
Index | indent, | |||
const std::string & | prefix | |||
) | const [protected, virtual] |
X = beta*X + alpha*(Matrix S^{-1} Z).
Specialized implementation.
Implements Matrix.
References ExpansionMatrix::ExpandedPosIndices(), fkinkryx::i, Matrix::NCols(), Journalist::Printf(), and Journalist::PrintfIndented().