Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TQpLinSolverSparse.cxx
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////////////////////////////////////////////////////////////////////////////////
44///
45/// \class TQpLinSolverSparse
46///
47/// Implements the aspects of the solvers for dense general QP
48/// formulation that are specific to the dense case.
49///
50////////////////////////////////////////////////////////////////////////////////
51
52#include "TQpLinSolverSparse.h"
53
55
56////////////////////////////////////////////////////////////////////////////////
57/// Constructor
58
60 TQpLinSolverBase(factory,data)
61{
62 const Int_t n = factory->fNx+factory->fMy+factory->fMz;
64
65 if (fMy > 0) data->PutAIntoAt(fKkt,fNx, 0);
66 if (fMz > 0) data->PutCIntoAt(fKkt,fNx+fMy,0);
67
68 // trick to make sure that A and C are inserted symmetrically
69 if (fMy > 0 || fMz > 0) {
71 fKkt += tmp;
72 }
73
74 data->PutQIntoAt(fKkt,0,0);
75}
76
77
78////////////////////////////////////////////////////////////////////////////////
79/// Copy constructor
80
82TQpLinSolverBase(another)
83{
84 *this = another;
85}
86
87
88////////////////////////////////////////////////////////////////////////////////
89/// Sets up the matrix for the main linear system in "augmented system" form.
90
92{
93 TQpLinSolverBase::Factor(prob,vars);
95}
96
97
98////////////////////////////////////////////////////////////////////////////////
99/// Places the diagonal resulting from the bounds on x into the augmented system matrix
100
102{
104 for (Int_t i = 0; i < xdiag.GetNrows(); i++)
105 diag[i] = xdiag[i];
106}
107
108
109////////////////////////////////////////////////////////////////////////////////
110/// Places the diagonal resulting from the bounds on Cx into the augmented system matrix
111
113{
115 for (Int_t i = 0; i < zdiag.GetNrows(); i++)
116 diag[i+fNx+fMy] = zdiag[i];
117}
118
119
120////////////////////////////////////////////////////////////////////////////////
121/// Perform the actual solve using the factors produced in factor.
122/// rhs on input contains the aggregated right-hand side of the augmented system;
123/// on output contains the solution in aggregated form .
124
126{
127 fSolveSparse.Solve(compressedRhs);
128}
129
130
131////////////////////////////////////////////////////////////////////////////////
132/// Assignment operator
133
135{
136 if (this != &source) {
138 fKkt.ResizeTo(source.fKkt); fKkt = source.fKkt;
139 fSolveSparse = source.fSolveSparse;
140 }
141 return *this;
142}
#define ClassImp(name)
Definition Rtypes.h:364
virtual void SetMatrix(const TMatrixDSparse &a)
Set matrix to be decomposed .
static void Solve(const Int_t n, TArrayD &Aa, TArrayI &Aiw, TArrayD &Aw, const Int_t maxfrt, TVectorD &b, TArrayI &Aiw1, const Int_t nsteps, Int_t *icntl, Int_t *info)
Main routine for solving Ax=b.
virtual TMatrixTBase< Element > & ResizeTo(Int_t nrows, Int_t ncols, Int_t nr_nonzeros=-1)
Set size of the matrix to nrows x ncols with nr_nonzeros non-zero entries if nr_nonzeros > 0 .
Data for the general QP formulation.
Definition TQpDataBase.h:61
Data for the sparse QP formulation.
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...
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 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.
Implementation of main solver for linear systems.
TQpLinSolverBase & operator=(const TQpLinSolverBase &source)
Assignment opeartor.
virtual void Factor(TQpDataBase *prob, TQpVar *vars)
Sets up the matrix for the main linear system in "augmented system" form.
Implements the aspects of the solvers for dense general QP formulation that are specific to the dense...
TDecompSparse fSolveSparse
virtual void Factor(TQpDataBase *prob, TQpVar *vars)
Sets up the matrix for the main linear system in "augmented system" form.
TQpLinSolverSparse & operator=(const TQpLinSolverSparse &source)
Assignment operator.
virtual void PutZDiagonal(TVectorD &zdiag)
Places the diagonal resulting from the bounds on Cx into the augmented system matrix.
virtual void SolveCompressed(TVectorD &rhs)
Perform the actual solve using the factors produced in factor.
virtual void PutXDiagonal(TVectorD &xdiag)
Places the diagonal resulting from the bounds on x into the augmented system matrix.
dense matrix problem formulation
Class containing the variables for the general QP formulation.
Definition TQpVar.h:60
Int_t GetNrows() const
Definition TVectorT.h:75
const Int_t n
Definition legend1.C:16