Mercurial > octave
changeset 30591:2f1fae9dd79d
qp: check if argument H is positive definite, fixes bug #61762
* scripts/optimization/qp.m: Return an error exit flag if H is not
positive definite.
author | Olaf Till <i7tiol@t-online.de> |
---|---|
date | Tue, 04 Jan 2022 08:58:31 +0100 |
parents | 50bf281760e0 |
children | bcaa4c5f5928 |
files | scripts/optimization/qp.m |
diffstat | 1 files changed, 12 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/optimization/qp.m Mon Jan 03 13:02:52 2022 -0800 +++ b/scripts/optimization/qp.m Tue Jan 04 08:58:31 2022 +0100 @@ -347,7 +347,12 @@ in_infeasible = (n_in > 0 && any (Ain*x0-bin < -rtol*(1+abs (bin)))); info = 0; - if (eq_infeasible || in_infeasible) + + if (isdefinite (H) != 1) + info = 2; + endif + + if (info == 0 && (eq_infeasible || in_infeasible)) ## The initial guess is not feasible. ## First, define an xbar that is feasible with respect to the ## equality constraints. @@ -454,3 +459,9 @@ %! %! assert (isstruct (INFO) && isfield (INFO, "info") && (INFO.info == 0)); %! assert ([x obj_qp], [1.0 0.5], eps); + +%!test <*61762> +%! [x, obj, info] = qp ([], [21, 30, 39; 30, 45, 60; 39, 60, 81], [-40; -65; -90]); +%! assert (x, zeros (3, 1)); +%! assert (obj, 0); +%! assert (info.info, 2);