# HG changeset patch # User John W. Eaton # Date 1475723371 14400 # Node ID ee0df00e12d6250777f5b399236a570c28cb5e2f # Parent 1213b3f0602cb4149c03f6e744f67f076898962e fix complex svd (bug #49232) * liboctave/numeric/svd.cc (svd::svd): Use hermitian, not transpose. * libinterp/corefcn/svd.cc: New test for complex svd. diff -r 1213b3f0602c -r ee0df00e12d6 libinterp/corefcn/svd.cc --- a/libinterp/corefcn/svd.cc Wed Oct 05 22:13:14 2016 +0200 +++ b/libinterp/corefcn/svd.cc Wed Oct 05 23:09:31 2016 -0400 @@ -251,6 +251,12 @@ %!assert (svd ([1, 2; 2, 1]), [3; 1], sqrt (eps)) %!test +a = [1, 2; 3, 4] + [5, 6; 7, 8]*i; +[u,s,v] = svd (a); +assert (a, u * s * v', 128 * eps); + + +%!test %! [u, s, v] = svd ([1, 2; 2, 1]); %! x = 1 / sqrt (2); %! assert (u, [-x, -x; -x, x], sqrt (eps)); diff -r 1213b3f0602c -r ee0df00e12d6 liboctave/numeric/svd.cc --- a/liboctave/numeric/svd.cc Wed Oct 05 22:13:14 2016 +0200 +++ b/liboctave/numeric/svd.cc Wed Oct 05 23:09:31 2016 -0400 @@ -399,7 +399,7 @@ abort (); if (! (jobv == 'N' || jobv == 'O')) - right_sm = right_sm.transpose (); + right_sm = right_sm.hermitian (); } // Instantiations we need.