- Main Page
- Classes
- Files

- File List
- File Members

# src/LinAlg/IpLowRankUpdateSymMatrix.hpp

Go to the documentation of this file.

    00001 // Copyright (C) 2005, 2008 International Business Machines and others.
    00002 // All Rights Reserved.
    00003 // This code is published under the Eclipse Public License.
    00004 //
    00005 // $Id: IpLowRankUpdateSymMatrix.hpp 2269 2013-05-05 11:32:40Z stefan $
    00006 //
    00007 // Authors:  Andreas Waechter            IBM    2005-12-25
    00008
    00009 #ifndef __IPLOWRANKUPDATESYMMATRIX_HPP__
    00010 #define __IPLOWRANKUPDATESYMMATRIX_HPP__
    00011
    00012 #include "IpUtils.hpp"
    00013 #include "IpSymMatrix.hpp"
    00014 #include "IpMultiVectorMatrix.hpp"
    00015
    00016 namespace Ipopt
    00017 {
    00018
    00019   /* forward declarations */
    00020   class LowRankUpdateSymMatrixSpace;
    00021
    00031   class LowRankUpdateSymMatrix : public SymMatrix
    00032   {
    00033   public:
    00034
    00037
    00039     LowRankUpdateSymMatrix(const LowRankUpdateSymMatrixSpace* owner_space);
    00040
    00042     ~LowRankUpdateSymMatrix();
    00044
    00046     void SetDiag(const Vector& D)
    00047     {
    00048       D_ = &D;
    00049       ObjectChanged();
    00050     }
    00051
    00053     SmartPtr<const Vector> GetDiag() const
    00054     {
    00055       return D_;
    00056     }
    00057
    00059     void SetV(const MultiVectorMatrix& V)
    00060     {
    00061       V_ = &V;
    00062       ObjectChanged();
    00063     }
    00064
    00066     SmartPtr<const MultiVectorMatrix> GetV() const
    00067     {
    00068       return V_;
    00069     }
    00070
    00072     void SetU(const MultiVectorMatrix& U)
    00073     {
    00074       U_ = &U;
    00075       ObjectChanged();
    00076     }
    00077
    00079     SmartPtr<const MultiVectorMatrix> GetU() const
    00080     {
    00081       return U_;
    00082     }
    00083
    00086     SmartPtr<const Matrix> P_LowRank() const;
    00087
    00090     SmartPtr<const VectorSpace> LowRankVectorSpace() const;
    00091
    00094     bool ReducedDiag() const;
    00095
    00096   protected:
    00099     virtual void MultVectorImpl(Number alpha, const Vector& x,
    00100                                 Number beta, Vector& y) const;
    00101
    00104     virtual bool HasValidNumbersImpl() const;
    00105
    00106     virtual void ComputeRowAMaxImpl(Vector& rows_norms, bool init) const;
    00107
    00108     virtual void ComputeColAMaxImpl(Vector& cols_norms, bool init) const;
    00109
    00110     virtual void PrintImpl(const Journalist& jnlst,
    00111                            EJournalLevel level,
    00112                            EJournalCategory category,
    00113                            const std::string& name,
    00114                            Index indent,
    00115                            const std::string& prefix) const;
    00117
    00118   private:
    00128     LowRankUpdateSymMatrix();
    00129
    00131     LowRankUpdateSymMatrix(const LowRankUpdateSymMatrix&);
    00132
    00134     void operator=(const LowRankUpdateSymMatrix&);
    00136
    00138     SmartPtr<const LowRankUpdateSymMatrixSpace> owner_space_;
    00139
    00141     SmartPtr<const Vector> D_;
    00142
    00144     SmartPtr<const MultiVectorMatrix> V_;
    00145
    00147     SmartPtr<const MultiVectorMatrix> U_;
    00148   };
    00149
    00151   class LowRankUpdateSymMatrixSpace : public SymMatrixSpace
    00152   {
    00153   public:
    00157     LowRankUpdateSymMatrixSpace(Index dim,
    00158                                 SmartPtr<const Matrix> P_LowRank,
    00159                                 SmartPtr<const VectorSpace> LowRankVectorSpace,
    00160                                 bool reduced_diag)
    00161         :
    00162         SymMatrixSpace(dim),
    00163         P_LowRank_(P_LowRank),
    00164         lowrank_vector_space_(LowRankVectorSpace),
    00165         reduced_diag_(reduced_diag)
    00166     {
    00167       DBG_ASSERT(IsValid(lowrank_vector_space_));
    00168     }
    00169
    00171     virtual ~LowRankUpdateSymMatrixSpace()
    00172     {}
    00174
    00177     virtual SymMatrix* MakeNewSymMatrix() const
    00178     {
    00179       return MakeNewLowRankUpdateSymMatrix();
    00180     }
    00181
    00183     LowRankUpdateSymMatrix* MakeNewLowRankUpdateSymMatrix() const
    00184     {
    00185       return new LowRankUpdateSymMatrix(this);
    00186     }
    00187
    00188     SmartPtr<const Matrix> P_LowRank() const
    00189     {
    00190       return P_LowRank_;
    00191     }
    00192
    00193     SmartPtr<const VectorSpace> LowRankVectorSpace() const
    00194     {
    00195       return lowrank_vector_space_;
    00196     }
    00197
    00198     bool ReducedDiag() const
    00199     {
    00200       return reduced_diag_;
    00201     }
    00202
    00203   private:
    00213     LowRankUpdateSymMatrixSpace();
    00214
    00216     LowRankUpdateSymMatrixSpace(const LowRankUpdateSymMatrixSpace&);
    00217
    00219     void operator=(const LowRankUpdateSymMatrixSpace&);
    00221
    00225     SmartPtr<const Matrix> P_LowRank_;
    00226
    00229     SmartPtr<const VectorSpace> lowrank_vector_space_;
    00230
    00233     bool reduced_diag_;
    00234   };
    00235
    00236   inline
    00237   SmartPtr<const Matrix> LowRankUpdateSymMatrix::P_LowRank() const
    00238   {
    00239     return owner_space_->P_LowRank();
    00240   }
    00241
    00242   inline
    00243   SmartPtr<const VectorSpace> LowRankUpdateSymMatrix::LowRankVectorSpace() const
    00244   {
    00245     return owner_space_->LowRankVectorSpace();
    00246   }
    00247
    00248   inline
    00249   bool LowRankUpdateSymMatrix::ReducedDiag() const
    00250   {
    00251     return owner_space_->ReducedDiag();
    00252   }
    00253
    00254 } // namespace Ipopt
    00255 #endif

All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines