80   if (x_in     .GetNrows() > 0) 
fX.       Use(x_in     .GetNrows(),x_in     .GetMatrixArray());
 
   81   if (s_in     .GetNrows() > 0) 
fS.       Use(s_in     .GetNrows(),s_in     .GetMatrixArray());
 
   82   if (y_in     .GetNrows() > 0) 
fY.       Use(y_in     .GetNrows(),y_in     .GetMatrixArray());
 
   83   if (z_in     .GetNrows() > 0) 
fZ.       Use(z_in     .GetNrows(),z_in     .GetMatrixArray());
 
   84   if (v_in     .GetNrows() > 0) 
fV.       Use(v_in     .GetNrows(),v_in     .GetMatrixArray());
 
   85   if (phi_in   .GetNrows() > 0) 
fPhi.     Use(phi_in   .GetNrows(),phi_in   .GetMatrixArray());
 
   86   if (w_in     .GetNrows() > 0) 
fW.       Use(w_in     .GetNrows(),w_in     .GetMatrixArray());
 
   87   if (gamma_in .GetNrows() > 0) 
fGamma.   Use(gamma_in .GetNrows(),gamma_in .GetMatrixArray());
 
   88   if (t_in     .GetNrows() > 0) 
fT.       Use(t_in     .GetNrows(),t_in     .GetMatrixArray());
 
   90   if (u_in     .GetNrows() > 0) 
fU.       Use(u_in     .GetNrows(),u_in     .GetMatrixArray());
 
   91   if (pi_in    .GetNrows() > 0) 
fPi.      Use(pi_in    .GetNrows(),pi_in    .GetMatrixArray());
 
   92   if (ixlow_in .GetNrows() > 0) 
fXloIndex.
Use(ixlow_in .GetNrows(),ixlow_in .GetMatrixArray());
 
   93   if (ixupp_in .GetNrows() > 0) 
fXupIndex.
Use(ixupp_in .GetNrows(),ixupp_in .GetMatrixArray());
 
   94   if (iclow_in .GetNrows() > 0) 
fCloIndex.
Use(iclow_in .GetNrows(),iclow_in .GetMatrixArray());
 
   95   if (icupp_in .GetNrows() > 0) 
fCupIndex.
Use(icupp_in .GetNrows(),icupp_in .GetMatrixArray());
 
  218         mu += (
fU+alpha*step->
fU)*(
fPi+alpha*step->
fPi);
 
  240         (
b->fLambda).MatchesNonZeroPattern(
fCloIndex));
 
  254         (
b->fGamma).MatchesNonZeroPattern(
fXloIndex));
 
  351      ::Error(
"StepBound(TVectorD &,TVectorD &,Double_t)",
"vector's not compatible");
 
  357   const Double_t * 
const pV = 
v.GetMatrixArray();
 
  360   for (
Int_t i = 0; i < 
n; i++) {
 
  362      if ( pV[i] >= 0 && tmp < 0 ) {
 
  379      interior = interior &&
 
  383      interior = interior &&
 
  387      interior = interior &&
 
  391      interior = interior &&
 
  419                              Int_t    &fIrstOrSecond)
 
  425         primalValue,primalStep,dualValue,dualStep,fIrstOrSecond);
 
  429         primalValue,primalStep,dualValue,dualStep,fIrstOrSecond);
 
  433         primalValue,primalStep,dualValue,dualStep,fIrstOrSecond);
 
  437         primalValue,primalStep,dualValue,dualStep,fIrstOrSecond);
 
  448                              Double_t &ustep_elt,
int& fIrst_or_second)
 
  451      w.GetMatrixArray(),    1,
 
  473                                 Int_t &fIrst_or_second)
 
  478   Int_t lastBlocking = -1;
 
  492      if (*pw > 0 && tmp < 0) {
 
  501      if (*pu > 0 && tmp < 0) {
 
  520   if (lastBlocking > -1) {
 
  522      w_elt     = 
w[lastBlocking];
 
  523      wstep_elt = wstep[lastBlocking];
 
  524      u_elt     = u[lastBlocking];
 
  525      ustep_elt = ustep[lastBlocking];
 
  581      if (cmin < viol) viol = cmin;
 
  584      if (cmin < viol) viol = cmin;
 
  588      if (cmin < viol) viol = cmin;
 
  591      if (cmin < viol) viol = cmin;
 
  595      if (cmin < viol) viol = cmin;
 
  598      if (cmin < viol) viol = cmin;
 
  602      if (cmin < viol) viol = cmin;
 
  605      if (cmin < viol) viol = cmin;
 
  641   std::cout << 
"fNx  : " << 
fNx   << std::endl;
 
  642   std::cout << 
"fMy  : " << 
fMy   << std::endl;
 
  643   std::cout << 
"fMz  : " << 
fMz   << std::endl;
 
  644   std::cout << 
"fNxup: " << 
fNxup << std::endl;
 
  645   std::cout << 
"fNxlo: " << 
fNxlo << std::endl;
 
  646   std::cout << 
"fMcup: " << 
fMcup << std::endl;
 
  647   std::cout << 
"fMclo: " << 
fMclo << std::endl;
 
  705   if (tmp > norm) norm = tmp;
 
  707   if (tmp > norm) norm = tmp;
 
  709   if (tmp > norm) norm = tmp;
 
  711   if (tmp > norm) norm = tmp;
 
  714   if (tmp > norm) norm = tmp;
 
  716   if (tmp > norm) norm = tmp;
 
  719   if (tmp > norm) norm = tmp;
 
  721   if (tmp > norm) norm = tmp;
 
  724   if (tmp > norm) norm = tmp;
 
  726   if (tmp > norm) norm = tmp;
 
  729   if (tmp > norm) norm = tmp;
 
  731   if (tmp > norm) norm = tmp;
 
  774   if (
this != &source) {
 
Mother of all ROOT objects.
 
TObject & operator=(const TObject &rhs)
TObject assignment operator.
 
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
 
Class containing the variables for the general QP formulation.
 
virtual Bool_t ValidNonZeroPattern()
Check that the variables conform to the non-zero indices.
 
virtual Double_t Violation()
The amount by which the current variables violate the non-negativity constraints.
 
Int_t fNComplementaryVariables
 
TQpVar & operator=(const TQpVar &source)
Assignment operator.
 
TQpVar()
Default constructor.
 
virtual void InteriorPoint(Double_t alpha, Double_t beta)
Sets components of (u,t,v,w) to alpha and of (lambda,pi,phi,gamma) to beta.
 
static Double_t StepBound(TVectorD &v, TVectorD &dir, Double_t maxStep)
Find the maximum stepsize of v in direction dir before violating the nonnegativity constraints.
 
virtual Double_t MuStep(TQpVar *step, Double_t alpha)
Compute the complementarity gap resulting from a step of length "alpha" along direction "step".
 
virtual Double_t GetMu()
compute complementarity gap, obtained by taking the inner product of the complementary vectors and di...
 
virtual Double_t Norm1()
Return the sum of the vector-norm1's.
 
virtual Double_t NormInf()
Return the sum of the vector-normInf's.
 
virtual void ShiftBoundVariables(Double_t alpha, Double_t beta)
Add alpha to components of (u,t,v,w) and beta to components of (lambda,pi,phi,gamma)
 
static Double_t FindBlockingSub(Int_t n, Double_t *w, Int_t incw, Double_t *wstep, Int_t incwstep, Double_t *u, Int_t incu, Double_t *ustep, Int_t incustep, Double_t maxStep, Double_t &w_elt, Double_t &wstep_elt, Double_t &u_elt, Double_t &ustep_elt, Int_t &first_or_second)
See FindBlocking function.
 
void Print(Option_t *option="") const override
Print class members.
 
virtual Bool_t IsInteriorPoint()
Is the current position an interior point ?
 
static Double_t FindBlocking(TVectorD &w, TVectorD &wstep, TVectorD &u, TVectorD &ustep, Double_t maxStep, Double_t &w_elt, Double_t &wstep_elt, Double_t &u_elt, Double_t &ustep_elt, int &first_or_second)
See other FindBlocking function.
 
virtual void Negate()
Perform a "negate" operation on all data vectors : x = -x.
 
virtual void Saxpy(TQpVar *b, Double_t alpha)
Perform a "saxpy" operation on all data vectors : x += alpha*y.
 
TVectorT< Element > & Zero()
Set vector elements to zero.
 
Element Min() const
return minimum vector element value
 
Element Norm1() const
Compute the 1-norm of the vector SUM{ |v[i]| }.
 
Element NormInf() const
Compute the infinity-norm of the vector MAX{ |v[i]| }.
 
void AddSomeConstant(Element val, const TVectorT< Element > &select)
Add to vector elements as selected through array select the value val.
 
Bool_t MatchesNonZeroPattern(const TVectorT< Element > &select)
Check if vector elements as selected through array select are non-zero.
 
TVectorT< Element > & ResizeTo(Int_t lwb, Int_t upb)
Resize the vector to [lwb:upb] .
 
TVectorT< Element > & Use(Int_t lwb, Int_t upb, Element *data)
Use the array data to fill the vector lwb..upb].
 
TVectorT< Element > & SelectNonZeros(const TVectorT< Element > &select)
Keep only element as selected through array select non-zero.
 
Bool_t SomePositive(const TVectorT< Element > &select)
Check if vector elements as selected through array select are all positive.
 
Int_t NonZeros() const
Compute the number of elements != 0.0.
 
void Print(Option_t *option="") const override
Print the vector as a list of elements.
 
Element * GetMatrixArray()
 
TMatrixT< Element > & Add(TMatrixT< Element > &target, Element scalar, const TMatrixT< Element > &source)
Modify addition: target += scalar * source.
 
Bool_t AreCompatible(const TMatrixTBase< Element1 > &m1, const TMatrixTBase< Element2 > &m2, Int_t verbose=0)
Check that matrice sm1 and m2 areboth valid and have identical shapes .