Ipopt Documentation  
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 
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:
194  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:
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:
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.
double Number
Type of all numbers.
Definition: IpTypes.hpp:15
const DenseGenMatrixSpace * owner_space_
Vector Base Class.
Definition: IpVector.hpp:47
Class for dense symmetric matrices.
Dense Vector Implementation.
EJournalLevel
Print Level Enum.
const Number * Values() const
Retrieve the array that stores the matrix elements.
Factorization factorization_
Flag indicating if and which factorization has been applied.
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:171
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
virtual Matrix * MakeNew() const
Pure virtual method for creating a new Matrix of the corresponding type.
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.
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:17
#define DBG_ASSERT(test)
Definition: IpDebug.hpp:28
#define IPOPTLIB_EXPORT
Class for dense general matrices.
Class responsible for all message output.
DenseGenMatrix * MakeNewDenseGenMatrix() const
Method for creating a new matrix of this specific type.
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.