Public Member Functions | Private Attributes | List of all members
ConicBundle::CMgramsparse_withoutdiag Class Reference

implements a Gram matrix $\pm (AA^T-\mbox{Diag}(AA^T))$ with zero diagonal as Coeffmat for a sparse rectangular CH_Matrix_Classes::Sparsemat $A$ (for use with MatrixSDPfunction, see implemention of a PSCOracle (PSCAffineFunction)). More...

#include <CMgramsparse_withoutdiag.hxx>

Inheritance diagram for ConicBundle::CMgramsparse_withoutdiag:
ConicBundle::Coeffmat CH_Matrix_Classes::Memarrayuser

Public Member Functions

 CMgramsparse_withoutdiag (const CH_Matrix_Classes::Sparsemat &Ain, bool pos=true, CoeffmatInfo *cip=0)
 copy Ain, the flag for positive/negative and store the user information
virtual Coeffmatclone () const
 makes an explicit copy of itself and returns a pointer to it
virtual CH_Matrix_Classes::Integer dim () const
 returns the order of the represented symmetric matrix
virtual CH_Matrix_Classes::Real operator() (CH_Matrix_Classes::Integer i, CH_Matrix_Classes::Integer j) const
 returns the value of the matrix element (i,j)
virtual void make_symmatrix (CH_Matrix_Classes::Symmatrix &S) const
 returns a dense symmetric constraint matrix
virtual CH_Matrix_Classes::Real norm (void) const
 returns the Frobenius norm of the matrix
virtual Coeffmatsubspace (const CH_Matrix_Classes::Matrix &P) const
 delivers a new object on the heap corresponding to the matrix P^T(*this)P, the caller is responsible for deleting the object
virtual void multiply (CH_Matrix_Classes::Real d)
 multiply constraint permanentely by d; this is to allow scaling or sign changes in the constraints
virtual CH_Matrix_Classes::Real ip (const CH_Matrix_Classes::Symmatrix &S) const
 returns ip(*this,S)=trace(*this*S), the trace inner product
virtual CH_Matrix_Classes::Real gramip (const CH_Matrix_Classes::Matrix &P) const
 returns ip(*this,PP^T)=trace P^T(*this)P
virtual CH_Matrix_Classes::Real gramip (const CH_Matrix_Classes::Matrix &P, CH_Matrix_Classes::Integer start_row, const CH_Matrix_Classes::Matrix *Lam=0) const
 returns ip(*this,QQ^T)=trace Q^T(*this)Q for Q=P.rows(start_row,start_row+dim-1)
virtual void addmeto (CH_Matrix_Classes::Symmatrix &S, CH_Matrix_Classes::Real d=1.) const
 computes S+=d*(*this);
virtual void addprodto (CH_Matrix_Classes::Matrix &B, const CH_Matrix_Classes::Matrix &C, CH_Matrix_Classes::Real d=1.) const
 computes B+=d*(*this)*C
virtual void addprodto (CH_Matrix_Classes::Matrix &B, const CH_Matrix_Classes::Sparsemat &C, CH_Matrix_Classes::Real d=1.) const
 computes B+=d*(*this)*C
virtual void left_right_prod (const CH_Matrix_Classes::Matrix &P, const CH_Matrix_Classes::Matrix &Q, CH_Matrix_Classes::Matrix &R) const
 computes R=P^T*(*this)*Q
virtual CH_Matrix_Classes::Integer prodvec_flops () const
 returns an estimate of number of flops to compute addprodto for a vector
virtual int dense () const
 returns 1 if its structure is as bad as its dense symmetric representation, otherwise 0
virtual int sparse () const
 returns 0 if not sparse, otherwise 1
virtual int sparse (CH_Matrix_Classes::Indexmatrix &, CH_Matrix_Classes::Indexmatrix &, CH_Matrix_Classes::Matrix &, CH_Matrix_Classes::Real) const
 returns 0 if not sparse. If it is sparse it returns 1 and the nonzero structure in I,J and v, where v is multiplied by d. Only the upper triangle (including diagonal) is delivered
virtual int support_in (const CH_Matrix_Classes::Sparsesym &) const
 returns 0 if the support of the costraint matrix is not contained in the support of the sparse symmetric matrix S, 1 if it is contained.
virtual CH_Matrix_Classes::Real ip (const CH_Matrix_Classes::Sparsesym &S) const
 returns the inner product of the constraint matrix with S
virtual void project (CH_Matrix_Classes::Symmatrix &S, const CH_Matrix_Classes::Matrix &P) const
 computes S=P^T*(*this)*P
virtual void add_projection (CH_Matrix_Classes::Symmatrix &S, const CH_Matrix_Classes::Matrix &P, CH_Matrix_Classes::Real alpha=1., CH_Matrix_Classes::Integer start_row=0) const
 computes S+=Q^T(*this)Q for Q=P.rows(start_row,start_row+dim-1)
virtual const CH_Matrix_Classes::Matrixpostgenmult (const CH_Matrix_Classes::Matrix &B, CH_Matrix_Classes::Matrix &C, CH_Matrix_Classes::Real alpha=1., CH_Matrix_Classes::Real beta=0., int btrans=0) const
 computes C= alpha*(*this)*B^(T if btrans) + beta*C, C is also returned
virtual const CH_Matrix_Classes::Matrixpregenmult (const CH_Matrix_Classes::Matrix &B, CH_Matrix_Classes::Matrix &C, CH_Matrix_Classes::Real alpha=1., CH_Matrix_Classes::Real beta=0., int btrans=0) const
 computes C= alpha*B^(T if btrans)*(*this) + beta*C, C is also returned
virtual int equal (const Coeffmat *p, double tol=1e-6) const
 returns 1, if p is the same derived class and entries differ by less than tol, otherwise zero
virtual std::ostream & display (std::ostream &o) const
 display constraint information
virtual std::ostream & out (std::ostream &o) const
 put entire contents onto ostream with the class type in the beginning so that the derived class can be recognized by in().
virtual std::istream & in (std::istream &i)
 counterpart to out(), does not read the class type, though. This is assumed to have been read in order to generate the correct class
 CMgramsparse_withoutdiag (std::istream &is, CoeffmatInfo *cip=0)
 constructor with istream and possibly additional user information
const CH_Matrix_Classes::Sparsematget_A () const
 returns the const reference to the internal matrix A forming the Gram matrix
bool get_positive () const
 returns the flag on whether the Gram matrix is used in positive or negative form
- Public Member Functions inherited from ConicBundle::Coeffmat
 Coeffmat (bool del_by_CoeffmatPointer=true)
 default constructor; set del_by_CoeffmatPointer==true if a CoeffmatPointer reducing the use_cnt to zero should delete this
void set_deletion_by_CoeffmatPointer (bool dbMP)
 if set to true any CoeffmatPointer that reduces use_cnt to zero will delete this object
virtual Coeffmattype get_type () const
 returns its Coeffmattype
virtual CoeffmatInfoget_info ()
 returns the user information
virtual const CoeffmatInfoget_info () const
 returns the user information in const form
virtual void set_info (CoeffmatInfo *cip)
 deletes the old and sets new user information

Private Attributes

CH_Matrix_Classes::Sparsemat A
 the Coeffmat acts like A*A^T-Diag(A*A^T) or its negative
CH_Matrix_Classes::Sparsesym di
 this is the precomputed diagonal di=diag(A*A^T)
bool positive
 if true use A*A^T-Diag, if false use -A*A^T+Diag

Additional Inherited Members

- Protected Member Functions inherited from CH_Matrix_Classes::Memarrayuser
 Memarrayuser ()
 if memarray is NULL, then a new Memarray is generated. In any case the number of users of the Memarray is incremented
virtual ~Memarrayuser ()
 the number of users is decremented and the Memarray memory manager is destructed, if the number is zero.
- Protected Attributes inherited from ConicBundle::Coeffmat
Coeffmattype CM_type
 in order to enable type identification
 allows the user to specify and output additional information
- Static Protected Attributes inherited from CH_Matrix_Classes::Memarrayuser
static Memarraymemarray
 pointer to common memory manager for all Memarrayusers, instantiated in memarray.cxx

Detailed Description

implements a Gram matrix $\pm (AA^T-\mbox{Diag}(AA^T))$ with zero diagonal as Coeffmat for a sparse rectangular CH_Matrix_Classes::Sparsemat $A$ (for use with MatrixSDPfunction, see implemention of a PSCOracle (PSCAffineFunction)).

As for CMgramsparse there is an extra flag for using the positive or the negative version of the matrix.

The documentation for this class was generated from the following file: