Mercurial > octave
changeset 27031:3080dac8f660
maint: merge stable to default
author | Mike Miller <mtmiller@octave.org> |
---|---|
date | Sat, 06 Apr 2019 18:46:30 -0700 |
parents | 7b03bc060dc7 (current diff) 4a2cb3392014 (diff) |
children | 0ee0bb5eb381 |
files | libinterp/corefcn/__qp__.cc |
diffstat | 1 files changed, 16 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/__qp__.cc Thu Apr 04 05:17:55 2019 +0000 +++ b/libinterp/corefcn/__qp__.cc Sat Apr 06 18:46:30 2019 -0700 @@ -40,6 +40,18 @@ #include "pr-output.h" #include "utils.h" +static octave_idx_type +min_index (const ColumnVector& x) +{ + double min_val = x.min (); + + for (octave_idx_type i = 0; i < x.numel (); i++) + if (min_val == x.xelem (i)) + return i; + + return 0; +} + static Matrix null (const Matrix& A, octave_idx_type& rank) { @@ -149,16 +161,7 @@ ColumnVector eigenvalH = real (eigH.eigenvalues ()); Matrix eigenvecH = real (eigH.right_eigenvectors ()); - double minReal = eigenvalH.min (); - octave_idx_type indminR = 0; - for (octave_idx_type i = 0; i < n; i++) - { - if (minReal == eigenvalH(i)) - { - indminR = i; - break; - } - } + octave_idx_type indminR = min_index (eigenvalH); bool done = false; @@ -185,6 +188,8 @@ { // There are no active constraints. + double minReal = eigenvalH.xelem (indminR); + if (minReal > 0.0) { // Inverting the Hessian. Using the Cholesky @@ -297,16 +302,7 @@ ColumnVector eigenvalrH = real (eigrH.eigenvalues ()); Matrix eigenvecrH = real (eigrH.right_eigenvectors ()); - double mRrH = eigenvalrH.min (); - indminR = 0; - for (octave_idx_type i = 0; i < n; i++) - { - if (mRrH == eigenvalrH(i)) - { - indminR = i; - break; - } - } + indminR = min_index (eigenvalrH); ColumnVector eVrH = eigenvecrH.column (indminR);