Mercurial > octave
changeset 29738:5928dd4f7a02 stable
logm.m: Fix check for real negative values in complex vector (bug #60738).
* scripts/linear-algebra/logm.m: Fix check for real negative values in complex
vector. Add BIST.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Mon, 07 Jun 2021 11:48:51 +0200 |
parents | 906b7d0b6d98 |
children | d2909c4ffd62 35389a23d09a |
files | scripts/linear-algebra/logm.m |
diffstat | 1 files changed, 9 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/linear-algebra/logm.m Sun Jun 06 12:51:23 2021 -0400 +++ b/scripts/linear-algebra/logm.m Mon Jun 07 11:48:51 2021 +0200 @@ -75,12 +75,13 @@ endif eigv = diag (s); - if (any (eigv < 0)) + real_neg_eigv = (real (eigv) < 0) & (imag (eigv) == 0); + if (any (real_neg_eigv)) warning ("Octave:logm:non-principal", "logm: principal matrix logarithm is not defined for matrices with negative eigenvalues; computing non-principal logarithm"); endif - real_eig = all (eigv >= 0); + real_eig = ! any (real_neg_eigv); k = 0; ## Algorithm 11.9 in "Function of matrices", by N. Higham @@ -180,6 +181,12 @@ %!assert (full (logm (eye (3))), logm (full (eye (3)))) %!assert (full (logm (10*eye (3))), logm (full (10*eye (3))), 8*eps) %!assert (logm (expm ([0 1i; -1i 0])), [0 1i; -1i 0], 10 * eps) +%!test <*60738> +%! A = [0.2510, 1.2808, -1.2252; ... +%! 0.2015, 1.0766, 0.5630; ... +%! -1.9769, -1.0922, -0.5831]; +%! warning ("off", "Octave:logm:non-principal", "local"); +%! assert (expm (logm (A)), A, 40*eps); ## Test input validation %!error logm ()