00001
00002
00003
00004
00005 #ifndef DENSESYMMATRIX_H
00006 #define DENSESYMMATRIX_H
00007
00008 #include "DenseStorageHandle.h"
00009 #include "DoubleMatrix.h"
00010 #include "DenseSymMatrixHandle.h"
00011
00015 class DenseSymMatrix : public SymMatrix {
00016 public:
00017 DenseStorageHandle mStorage;
00018
00019 DenseSymMatrix( int size );
00020 DenseSymMatrix( double Q[], int size );
00021
00022 virtual int isKindOf( int matrixType );
00023
00024 virtual void mult ( double beta, double y[], int incy,
00025 double alpha, double x[], int incx );
00026 virtual void mult ( double beta, OoqpVector& y,
00027 double alpha, OoqpVector& x);
00028
00029 virtual void transMult ( double beta, double y[], int incy,
00030 double alpha, double x[], int incx );
00031 virtual void transMult ( double beta, OoqpVector& y,
00032 double alpha, OoqpVector& x );
00033
00034 virtual void getSize( int& m, int& n );
00035
00036 virtual double abmaxnorm();
00037 virtual void writeToStream(ostream& out) const;
00038 virtual void randomizePSD(double * seed);
00039
00040 virtual void fromGetDense( int row, int col, double * A, int lda,
00041 int rowExtent, int colExtent );
00042
00043 virtual void fromGetSpRow( int row, int col,
00044 double A[], int lenA, int jcolA[], int& nnz,
00045 int rowExtent, int& info );
00046
00047 virtual void SymmetricScale ( OoqpVector& vec );
00048 virtual void ColumnScale ( OoqpVector& vec );
00049 virtual void RowScale ( OoqpVector& vec );
00050 virtual void scalarMult( double num);
00051
00052 virtual void symAtPutSpRow( int col, double A[], int lenA, int irowA[],
00053 int& info );
00054
00058 virtual void symAtPutDense( int row, int col, double * A, int lda,
00059 int rowExtent, int colExtent );
00062 virtual void symAtPutZeros( int row, int col,
00063 int rowExtent, int colExtent );
00064
00065 virtual void putSparseTriple( int irow[], int len, int jcol[], double A[],
00066 int& info );
00067
00068 virtual void atAddOuterProductOf( int row, int col, double alpha,
00069 double * x, int incx, int nx );
00070
00071 virtual void symAtPutSubmatrix( int destRow, int destCol,
00072 DoubleMatrix& M,
00073 int srcRow, int srcCol,
00074 int rowExtent, int colExtent );
00075
00076 virtual void getDiagonal( OoqpVector& vec );
00077 virtual void setToDiagonal( OoqpVector& vec );
00078
00079 virtual void atPutDiagonal( int idiag, OoqpVector& v );
00080 virtual void fromGetDiagonal( int idiag, OoqpVector& v );
00081
00082 static DenseSymMatrix * randomPSD( int n, double * seed );
00083
00084 double * operator[]( int index ) { return mStorage->M[index]; }
00085
00086 const double * operator[]( int index ) const
00087 { return mStorage->M[index]; }
00088
00090 double * elements() { return mStorage->M[0]; };
00092 double **Mat() { return mStorage->M; };
00093
00094 virtual int size();
00095
00096 DenseStorage& storage() { return *mStorage; }
00097 DenseStorage * getStorage() { return mStorage.ptr(); }
00098 };
00099
00100
00101 #endif