Ipopt Documentation  
IpDenseGenMatrix.hpp
Go to the documentation of this file.
1 // Copyright (C) 2005, 2009 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // Authors: Andreas Waechter IBM 2005-12-24
6 
7 #ifndef __IPDENSEGENMATRIX_HPP__
8 #define __IPDENSEGENMATRIX_HPP__
9 
10 #include "IpUtils.hpp"
11 #include "IpMatrix.hpp"
12 #include "IpDenseVector.hpp"
13 #include "IpDenseSymMatrix.hpp"
14 
15 namespace Ipopt
16 {
17 
19 class DenseGenMatrixSpace;
20 
26 {
27 public:
28 
30 
33  const DenseGenMatrixSpace* owner_space
34  );
35 
37  ~DenseGenMatrix();
39 
41  SmartPtr<DenseGenMatrix> MakeNewDenseGenMatrix() const;
42 
50  {
51  initialized_ = true;
52  ObjectChanged();
53  return values_;
54  }
55 
61  const Number* Values() const
62  {
63  DBG_ASSERT(initialized_);
64  return values_;
65  }
66 
68  void Copy(
69  const DenseGenMatrix& M
70  );
71 
76  void FillIdentity(
77  Number factor = 1.
78  );
79 
84  void ScaleColumns(
85  const DenseVector& scal_vec
86  );
87 
89  void AddMatrixProduct(
90  Number alpha,
91  const DenseGenMatrix& A,
92  bool transA,
93  const DenseGenMatrix& B,
94  bool transB,
95  Number beta
96  );
97 
103  void HighRankUpdateTranspose(
104  Number alpha,
105  const MultiVectorMatrix& V1,
106  const MultiVectorMatrix& V2,
107  Number beta
108  );
109 
119  bool ComputeCholeskyFactor(
120  const DenseSymMatrix& M
121  );
122 
132  bool ComputeEigenVectors(
133  const DenseSymMatrix& M,
134  DenseVector& Evalues
135  );
136 
144  void CholeskyBackSolveMatrix(
145  bool trans,
146  Number alpha,
147  DenseGenMatrix& B
148  ) const;
149 
157  void CholeskySolveVector(
158  DenseVector& b
159  ) const;
160 
168  void CholeskySolveMatrix(
169  DenseGenMatrix& B
170  ) const;
171 
175  bool ComputeLUFactorInPlace();
176 
180  void LUSolveMatrix(
181  DenseGenMatrix& B
182  ) const;
183 
187  void LUSolveVector(
188  DenseVector& b
189  ) const;
190 
191 protected:
193  virtual void MultVectorImpl(
195  Number alpha,
196  const Vector& x,
197  Number beta,
198  Vector& y
199  ) const;
200 
201  virtual void TransMultVectorImpl(
202  Number alpha,
203  const Vector& x,
204  Number beta,
205  Vector& y
206  ) const;
207 
208  virtual bool HasValidNumbersImpl() const;
209 
210  virtual void ComputeRowAMaxImpl(
211  Vector& rows_norms,
212  bool init
213  ) const;
214 
215  virtual void ComputeColAMaxImpl(
216  Vector& cols_norms,
217  bool init
218  ) const;
219 
220  virtual void PrintImpl(
221  const Journalist& jnlst,
222  EJournalLevel level,
223  EJournalCategory category,
224  const std::string& name,
225  Index indent,
226  const std::string& prefix
227  ) const;
229 
230 private:
238 
240  DenseGenMatrix();
241 
244  const DenseGenMatrix&
245  );
246 
248  void operator=(
249  const DenseGenMatrix&
250  );
252 
254 
257 
260 
263  {
265  LU,
266  CHOL
267  };
268 
271 
274 };
275 
279 {
280 public:
282 
288  Index nRows,
289  Index nCols
290  );
291 
294  { }
296 
299  {
300  return new DenseGenMatrix(this);
301  }
302 
303  virtual Matrix* MakeNew() const
304  {
305  return MakeNewDenseGenMatrix();
306  }
307 
308 };
309 
311 {
313 }
314 
315 } // namespace Ipopt
316 #endif
SmartPtr< DenseGenMatrix > MakeNewDenseGenMatrix() const
Create a new DenseGenMatrix from same MatrixSpace.
#define IPOPTLIB_EXPORT
Definition: config.h:94
const DenseGenMatrixSpace * owner_space_
Vector Base Class.
Definition: IpVector.hpp:47
Class for dense symmetric matrices.
Dense Vector Implementation.
EJournalLevel
Print Level Enum.
ipindex Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:20
Factorization factorization_
Flag indicating if and which factorization has been applied.
This file contains a base class for all exceptions and a set of macros to help with exceptions...
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:164
DenseGenMatrix * MakeNewDenseGenMatrix() const
Method for creating a new matrix of this specific type.
Number * values_
Array for storing the matrix elements (one columns after each other)
bool initialized_
Flag indicating whether the values_ array has been initialized.
Matrix Base Class.
Definition: IpMatrix.hpp:27
Factorization
Enum for factorization type.
Class for Matrices with few columns that consists of Vectors.
MatrixSpace base class, corresponding to the Matrix base class.
Definition: IpMatrix.hpp:326
This is the matrix space for DenseGenMatrix.
ipnumber Number
Type of all numbers.
Definition: IpTypes.hpp:17
const Number * Values() const
Retrieve the array that stores the matrix elements.
#define DBG_ASSERT(test)
Definition: IpDebug.hpp:27
Class for dense general matrices.
virtual Matrix * MakeNew() const
Pure virtual method for creating a new Matrix of the corresponding type.
Class responsible for all message output.
Index * pivot_
Array for storing the pivot sequences if the matrix has been LU-factorized.
EJournalCategory
Category Selection Enum.
Number * Values()
Retrieve the array for storing the matrix elements.