Logo ROOT   6.13/01
Reference Guide
TQpDataDens.h
Go to the documentation of this file.
1 // @(#)root/quadp:$Id$
2 // Author: Eddy Offermann May 2004
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 /*************************************************************************
13  * Parts of this file are copied from the OOQP distribution and *
14  * are subject to the following license: *
15  * *
16  * COPYRIGHT 2001 UNIVERSITY OF CHICAGO *
17  * *
18  * The copyright holder hereby grants you royalty-free rights to use, *
19  * reproduce, prepare derivative works, and to redistribute this software*
20  * to others, provided that any changes are clearly documented. This *
21  * software was authored by: *
22  * *
23  * E. MICHAEL GERTZ gertz@mcs.anl.gov *
24  * Mathematics and Computer Science Division *
25  * Argonne National Laboratory *
26  * 9700 S. Cass Avenue *
27  * Argonne, IL 60439-4844 *
28  * *
29  * STEPHEN J. WRIGHT swright@cs.wisc.edu *
30  * Computer Sciences Department *
31  * University of Wisconsin *
32  * 1210 West Dayton Street *
33  * Madison, WI 53706 FAX: (608)262-9777 *
34  * *
35  * Any questions or comments may be directed to one of the authors. *
36  * *
37  * ARGONNE NATIONAL LABORATORY (ANL), WITH FACILITIES IN THE STATES OF *
38  * ILLINOIS AND IDAHO, IS OWNED BY THE UNITED STATES GOVERNMENT, AND *
39  * OPERATED BY THE UNIVERSITY OF CHICAGO UNDER PROVISION OF A CONTRACT *
40  * WITH THE DEPARTMENT OF ENERGY. *
41  *************************************************************************/
42 
43 #ifndef ROOT_TQpDataDens
44 #define ROOT_TQpDataDens
45 
46 #include "TError.h"
47 #include "TQpDataBase.h"
48 
49 #include "TQpVar.h"
50 
51 #include "TMatrixD.h"
52 #include "TMatrixDSym.h"
53 
54 //////////////////////////////////////////////////////////////////////////
55 // //
56 // TQpDataDens //
57 // //
58 // Data for the dense QP formulation //
59 // //
60 //////////////////////////////////////////////////////////////////////////
61 
62 class TQpDataDens : public TQpDataBase
63 {
64 
65 protected:
66 
67  // these variables will be "Used" not copied
68  TMatrixDSym fQ; // Quadratic part of Objective function
69  TMatrixD fA; // Equality constraints
70  TMatrixD fC; // Inequality constraints
71 
72 public:
73 
75  // data objects of the specified dimensions
76  TQpDataDens(Int_t nx,Int_t my,Int_t mz);
77 
78  // sets up pointers to the data objects that are passed as arguments
80  TVectorD &ixupp,TMatrixD &A,TVectorD &bA,TMatrixD &C,TVectorD &clow,
81  TVectorD &iclow,TVectorD &cupp,TVectorD &icupp);
82  TQpDataDens(const TQpDataDens &another);
83 
84  virtual ~TQpDataDens() {}
85 
86  virtual void PutQIntoAt(TMatrixDBase &M,Int_t row,Int_t col);
87  // insert the Hessian Q into the matrix M for the fundamental
88  // linear system, where M is stored as a TMatrixD
89  virtual void PutAIntoAt(TMatrixDBase &M,Int_t row,Int_t col);
90  // insert the constraint matrix A into the matrix M for the
91  // fundamental linear system, where M is stored as a TMatrixD
92  virtual void PutCIntoAt(TMatrixDBase &M,Int_t row,Int_t col);
93  // insert the constraint matrix C into the matrix M for the
94  // fundamental linear system, where M is stored as a TMatrixD
95 
96  virtual void Qmult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x);
97  // y = beta * y + alpha * Q * x
98  virtual void Amult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x);
99  // y = beta * y + alpha * A * x
100  virtual void Cmult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x);
101  // y = beta * y + alpha * C * x
102  virtual void ATransmult(Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x);
103  // y = beta * y + alpha * A^T * x
104  virtual void CTransmult(Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x);
105  // y = beta * y + alpha * C^T * x
106 
107  virtual void GetDiagonalOfQ(TVectorD &dQ); // extract the diagonal of Q and put it in the vector dQ
108 
109  virtual Double_t DataNorm();
110  virtual void DataRandom(TVectorD &x,TVectorD &y,TVectorD &z,TVectorD &s);
111  // Create a random problem (x,y,z,s)
112  // the solution to the random problem
113  virtual void Print(Option_t *opt="") const;
114 
115  virtual Double_t ObjectiveValue(TQpVar *vars);
116 
117  TQpDataDens &operator= (const TQpDataDens &source);
118 
119  ClassDef(TQpDataDens,1) // Qp Data class for Dens formulation
120 };
121 #endif
virtual void Qmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)
calculate y = beta*y + alpha*(fQ*x)
virtual void PutQIntoAt(TMatrixDBase &M, Int_t row, Int_t col)
Insert the Hessian Q into the matrix M at index (row,col) for the fundamental linear system...
virtual void Print(Option_t *opt="") const
Print all class members.
TMatrixD fC
Definition: TQpDataDens.h:70
you should not use this method at all Int_t y
Definition: TRolke.cxx:630
static double A[]
double beta(double x, double y)
Calculates the beta function.
virtual void Cmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)
calculate y = beta*y + alpha*(fC*x)
virtual void PutCIntoAt(TMatrixDBase &M, Int_t row, Int_t col)
Insert the constraint matrix C into the matrix M at index (row,col) for the fundamental linear system...
TMatrixDSym fQ
Definition: TQpDataDens.h:68
virtual void Amult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)
calculate y = beta*y + alpha*(fA*x)
virtual Double_t ObjectiveValue(TQpVar *vars)
Return value of the objective function.
TMatrixD fA
Definition: TQpDataDens.h:69
virtual void CTransmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)
calculate y = beta*y + alpha*(fC^T*x)
virtual ~TQpDataDens()
Definition: TQpDataDens.h:84
virtual void PutAIntoAt(TMatrixDBase &M, Int_t row, Int_t col)
Insert the constraint matrix A into the matrix M at index (row,col) for the fundamental linear system...
virtual void DataRandom(TVectorD &x, TVectorD &y, TVectorD &z, TVectorD &s)
Choose randomly a QP problem.
TQpDataDens & operator=(const TQpDataDens &source)
Assignment operator.
static double C[]
virtual void GetDiagonalOfQ(TVectorD &dQ)
Return in vector dq the diagonal of matrix fQ (Quadratic part of Objective function) ...
virtual void ATransmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)
calculate y = beta*y + alpha*(fA^T*x)
Linear Algebra Package.
* x
Deprecated and error prone model selection interface.
Definition: TRolke.cxx:630
virtual Double_t DataNorm()
Return the largest component of several vectors in the data class.
you should not use this method at all Int_t Int_t z
Definition: TRolke.cxx:630
Definition: TQpVar.h:59
static double Q[]