8#include <Eigen/SparseCore>
20template <
typename Scalar>
21Scalar error_estimate(
const Eigen::Vector<Scalar, Eigen::Dynamic>& g) {
27 return g.template lpNorm<Eigen::Infinity>();
41template <
typename Scalar>
42Scalar error_estimate(
const Eigen::Vector<Scalar, Eigen::Dynamic>& g,
43 const Eigen::SparseMatrix<Scalar>& A_e,
44 const Eigen::Vector<Scalar, Eigen::Dynamic>& c_e,
45 const Eigen::Vector<Scalar, Eigen::Dynamic>& y) {
59 constexpr Scalar s_max(100);
61 std::max(s_max, y.template lpNorm<1>() / Scalar(y.rows())) / s_max;
64 {(g - A_e.transpose() * y).template lpNorm<Eigen::Infinity>() / s_d,
65 c_e.template lpNorm<Eigen::Infinity>()});
87template <
typename Scalar>
88Scalar error_estimate(
const Eigen::Vector<Scalar, Eigen::Dynamic>& g,
89 const Eigen::SparseMatrix<Scalar>& A_e,
90 const Eigen::Vector<Scalar, Eigen::Dynamic>& c_e,
91 const Eigen::SparseMatrix<Scalar>& A_i,
92 const Eigen::Vector<Scalar, Eigen::Dynamic>& c_i,
93 const Eigen::Vector<Scalar, Eigen::Dynamic>& s,
94 const Eigen::Vector<Scalar, Eigen::Dynamic>& y,
95 const Eigen::Vector<Scalar, Eigen::Dynamic>& z,
114 constexpr Scalar s_max(100);
116 std::max(s_max, (y.template lpNorm<1>() + z.template lpNorm<1>()) /
117 Scalar(y.rows() + z.rows())) /
122 std::max(s_max, z.template lpNorm<1>() / Scalar(z.rows())) / s_max;
124 const auto S = s.asDiagonal();
125 const Eigen::Vector<Scalar, Eigen::Dynamic> μe =
126 Eigen::Vector<Scalar, Eigen::Dynamic>::Constant(s.rows(), μ);
128 return std::max({(g - A_e.transpose() * y - A_i.transpose() * z)
129 .template lpNorm<Eigen::Infinity>() /
131 (S * z - μe).
template lpNorm<Eigen::Infinity>() / s_c,
132 c_e.template lpNorm<Eigen::Infinity>(),
133 (c_i - s).
template lpNorm<Eigen::Infinity>()});