12 const Vec &Ad,
const Vec &Ax,
const Vec &b_min,
const Vec &b_max) {
16 auto m =
static_cast<size_t>(y.size());
17 breakpoints.resize(2 * m);
19 auto indices = std::views::iota(index_t{});
20 for (
auto [Σi, yi, Adi, Axi, li, ui, i] :
21 std::views::zip(Σ, y, Ad, Ax, b_min, b_max, indices)) {
22 const auto s = sqrt(Σi);
23 breakpoints[m + i].δ = s * Adi;
24 breakpoints[i].δ = -breakpoints[m + i].δ;
25 breakpoints[i].t = (yi + Σi * (Axi - li)) / (s * breakpoints[i].δ);
26 breakpoints[m + i].t = (Σi * (ui - Axi) - yi) / (s * breakpoints[m + i].δ);
28 return std::span{breakpoints};
std::span< Breakpoint > compute_breakpoints_default(std::vector< Breakpoint > &breakpoints, const Vec &Σ, const Vec &y, const Vec &Ad, const Vec &Ax, const Vec &b_min, const Vec &b_max)
Compute the break points t[i] using formula (3.6) in the QPALM paper.