Ipopt 3.12.10

- Main Page
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
sparsematrix.hpp
Go to the documentation of this file.
1 // Copyright (C) 2007 Peter Carbonetto. All Rights Reserved.
2 // This code is published under the Eclipse Public License.
3 //
4 // Author: Peter Carbonetto
5 // Dept. of Computer Science
6 // University of British Columbia
7 // May 19, 2007
8
9 #ifndef INCLUDE_SPARSEMATRIX
10 #define INCLUDE_SPARSEMATRIX
11
12 #include "mex.h"
13
14 // Type definitions.
15 // -----------------------------------------------------------------
16 // This line is needed for versions of MATLAB prior to 7.3.
17 #ifdef MWINDEXISINT
18 typedef int mwIndex;
19 #endif
20
21 // class SparseMatrix
22 // ---------------------------------------------------------------
23 // An object of class SparseMatrixStructure stores information about
24 // the structure of a sparse matrix. It does not store the actual
25 // values of the matrix entries.
26 //
27 // WARNING: Starting with version 7.3, MATLAB can handle 64-bit
28 // addressing, and the authors of MATLAB have modified the
29 // implementation of sparse matrices to reflect this change. However,
30 // I convert all the row and column indices in the sparse matrix to
31 // signed integers, and this could potentially cause problems when
32 // dealing with large, sparse matrices on 64-bit platforms with MATLAB
33 // version 7.3 or greater.
34 class SparseMatrix {
35 public:
36
37 // This constructor takes as input a Matlab array. It it points to a
38 // valid sparse matrix in double precision, it will store all the
39 // information pertaining to the sparse matrix structure. It is up
40 // to the user to ensure that the MATLAB array is a sparse,
41 // symmetric matrix with row indices in increasing order as the
42 // nonzero elements appear in the matrix. Note that a SparseMatrix
43 // object retains a completely independent copy of the sparse matrix
44 // information by duplicating the data from the specified MATLAB
45 // array.
46 explicit SparseMatrix (const mxArray* ptr);
47
48 // The destructor.
49 ~SparseMatrix();
50
51 // Get the height and width of the matrix.
52 friend int height (const SparseMatrix& A) { return A.h; };
53 friend int width (const SparseMatrix& A) { return A.w; };
54
55 // The first function returns the total number of non-zero entries.
56 // The second function returns the number of non-zero entries in the
57 // cth column.
58 int numelems () const { return nnz; };
59 int numelems (int c) const;
60
61 // Upon completion of this function, cols[i] contains the column
62 // index for the ith element, and rows[i] contains the row index for
63 // the ith element. It is assumed that "cols" and "rows" have
64 // sufficient space to store this information. This routine is most
65 // useful for converting the Matlab sparse matrix format into the
66 // IPOPT format.
67 void getColsAndRows (int* cols, int* rows) const;
68
69 // Copy the matrix entries in a sensible manner while preserving the
70 // structure of the destination. In order to preserve the structure
71 // of the destination, it is required that the source set of
72 // non-zero entries be a subset of the destination non-zero
73 // entries. On success, the value true is returned.
74 bool copyto (SparseMatrix& dest) const;
75
76 // Copy the values of the nonzero elements to the destination array
77 // which of course must be of the proper length.
78 void copyto (double* dest) const;
79
80 // Returns the number of nonzeros in the sparse matrix.
81 static int getSizeOfSparseMatrix (const mxArray* ptr);
82
83 // Returns true if and only if the sparse matrix is symmetric and
84 // lower triangular.
85 static bool isLowerTri (const mxArray* ptr);
86
87 // For the proper functioning of a sparse matrix object, it is
88 // necessary that the row indices be in increasing order.
89 static bool inIncOrder (const mxArray* ptr);
90
91 protected:
92 int h; // The height of the matrix.
93 int w; // The width of the matrix.
94 int nnz; // The number of non-zero elements.
95 mwIndex* jc; // See mxSetJc in the MATLAB documentation.
96 mwIndex* ir; // See mxSetIr in the MATLAB documentation.
97 double* x; // The values of the non-zero entries.
98 };
99
100 #endif
SparseMatrix::w
int w
Definition: sparsematrix.hpp:93
SparseMatrix::h
int h
Definition: sparsematrix.hpp:92
SparseMatrix::x
double * x
Definition: sparsematrix.hpp:97
SparseMatrix::inIncOrder
static bool inIncOrder(const mxArray *ptr)
SparseMatrix::width
friend int width(const SparseMatrix &A)
Definition: sparsematrix.hpp:53
SparseMatrix::nnz
int nnz
Definition: sparsematrix.hpp:94
SparseMatrix::numelems
int numelems() const
Definition: sparsematrix.hpp:58
SparseMatrix::getSizeOfSparseMatrix
static int getSizeOfSparseMatrix(const mxArray *ptr)
SparseMatrix
Definition: sparsematrix.hpp:34
SparseMatrix::isLowerTri
static bool isLowerTri(const mxArray *ptr)
SparseMatrix::ir
mwIndex * ir
Definition: sparsematrix.hpp:96
SparseMatrix::getColsAndRows
void getColsAndRows(int *cols, int *rows) const
SparseMatrix::~SparseMatrix
~SparseMatrix()
SparseMatrix::height
friend int height(const SparseMatrix &A)
Definition: sparsematrix.hpp:52
SparseMatrix::copyto
bool copyto(SparseMatrix &dest) const
SparseMatrix::SparseMatrix
SparseMatrix(const mxArray *ptr)
SparseMatrix::jc
mwIndex * jc
Definition: sparsematrix.hpp:95