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);