19 #ifndef _EIGEN_QUADSOLVE_HPP_
20 #define _EIGEN_QUADSOLVE_HPP_
77 #include <Eigen/Cholesky>
80 #include "eiquadprog/deprecated.hpp"
87 inline void compute_d(Eigen::VectorXd &d,
const Eigen::MatrixXd &J,
88 const Eigen::VectorXd &np) {
89 d.noalias() = J.adjoint() * np;
92 inline void update_z(Eigen::VectorXd &z,
const Eigen::MatrixXd &J,
93 const Eigen::VectorXd &d,
size_t iq) {
94 z.noalias() = J.rightCols(z.size() - iq) * d.tail(d.size() - iq);
97 inline void update_r(
const Eigen::MatrixXd &R, Eigen::VectorXd &r,
98 const Eigen::VectorXd &d,
size_t iq) {
99 r.head(iq) = d.head(iq);
100 R.topLeftCorner(iq, iq).triangularView<Eigen::Upper>().solveInPlace(
104 bool add_constraint(Eigen::MatrixXd &R, Eigen::MatrixXd &J, Eigen::VectorXd &d,
105 size_t &iq,
double &R_norm);
107 Eigen::VectorXi &A, Eigen::VectorXd &u,
size_t p,
108 size_t &iq,
size_t l);
110 double solve_quadprog(Eigen::LLT<Eigen::MatrixXd, Eigen::Lower> &chol,
111 double c1, Eigen::VectorXd &g0,
const Eigen::MatrixXd &CE,
112 const Eigen::VectorXd &ce0,
const Eigen::MatrixXd &CI,
113 const Eigen::VectorXd &ci0, Eigen::VectorXd &x,
114 Eigen::VectorXi &A,
size_t &q);
116 double solve_quadprog(Eigen::LLT<Eigen::MatrixXd, Eigen::Lower> &chol,
117 double c1, Eigen::VectorXd &g0,
const Eigen::MatrixXd &CE,
118 const Eigen::VectorXd &ce0,
const Eigen::MatrixXd &CI,
119 const Eigen::VectorXd &ci0, Eigen::VectorXd &x,
120 Eigen::VectorXd &y, Eigen::VectorXi &A,
size_t &q);
122 EIQUADPROG_DEPRECATED
124 double c1, Eigen::VectorXd &g0,
125 const Eigen::MatrixXd &CE,
const Eigen::VectorXd &ce0,
126 const Eigen::MatrixXd &CI,
const Eigen::VectorXd &ci0,
127 Eigen::VectorXd &x, Eigen::VectorXi &A,
size_t &q) {
133 const Eigen::MatrixXd &CE,
const Eigen::VectorXd &ce0,
134 const Eigen::MatrixXd &CI,
const Eigen::VectorXd &ci0,
135 Eigen::VectorXd &x, Eigen::VectorXi &activeSet,
136 size_t &activeSetSize);
139 const Eigen::MatrixXd &CE,
const Eigen::VectorXd &ce0,
140 const Eigen::MatrixXd &CI,
const Eigen::VectorXd &ci0,
141 Eigen::VectorXd &x, Eigen::VectorXd &y,
142 Eigen::VectorXi &activeSet,
size_t &activeSetSize);