8#include <Eigen/SparseCore>
18template <
typename Scalar>
19Scalar error_estimate(
const Eigen::Vector<Scalar, Eigen::Dynamic>& g) {
25 return g.template lpNorm<Eigen::Infinity>();
37template <
typename Scalar>
38Scalar error_estimate(
const Eigen::Vector<Scalar, Eigen::Dynamic>& g,
39 const Eigen::SparseMatrix<Scalar>& A_e,
40 const Eigen::Vector<Scalar, Eigen::Dynamic>& c_e,
41 const Eigen::Vector<Scalar, Eigen::Dynamic>& y) {
55 constexpr Scalar s_max(100);
57 std::max(s_max, y.template lpNorm<1>() / Scalar(y.rows())) / s_max;
60 {(g - A_e.transpose() * y).template lpNorm<Eigen::Infinity>() / s_d,
61 c_e.template lpNorm<Eigen::Infinity>()});
81template <
typename Scalar>
82Scalar error_estimate(
const Eigen::Vector<Scalar, Eigen::Dynamic>& g,
83 const Eigen::SparseMatrix<Scalar>& A_e,
84 const Eigen::Vector<Scalar, Eigen::Dynamic>& c_e,
85 const Eigen::SparseMatrix<Scalar>& A_i,
86 const Eigen::Vector<Scalar, Eigen::Dynamic>& c_i,
87 const Eigen::Vector<Scalar, Eigen::Dynamic>& s,
88 const Eigen::Vector<Scalar, Eigen::Dynamic>& y,
89 const Eigen::Vector<Scalar, Eigen::Dynamic>& z,
108 constexpr Scalar s_max(100);
110 std::max(s_max, (y.template lpNorm<1>() + z.template lpNorm<1>()) /
111 Scalar(y.rows() + z.rows())) /
116 std::max(s_max, z.template lpNorm<1>() / Scalar(z.rows())) / s_max;
118 const auto S = s.asDiagonal();
119 const Eigen::Vector<Scalar, Eigen::Dynamic> μe =
120 Eigen::Vector<Scalar, Eigen::Dynamic>::Constant(s.rows(), μ);
122 return std::max({(g - A_e.transpose() * y - A_i.transpose() * z)
123 .template lpNorm<Eigen::Infinity>() /
125 (S * z - μe).
template lpNorm<Eigen::Infinity>() / s_c,
126 c_e.template lpNorm<Eigen::Infinity>(),
127 (c_i - s).
template lpNorm<Eigen::Infinity>()});