Mercurial > hg > octave-nkf
changeset 18564:80b8873c90ba
Fix pinv bug with 0 values introduced in cset 16b0cd465ecd.
* pinv.cc (Fpinv): Add %!tests for diagonal matrices
* CDiagMatrix.cc (pseudo_inverse), dDiagMatrix.cc (pseudo_inverse),
fCDiagMatrix.cc (pseudo_inverse), fDiagMatrix.cc (pseudo_inverse):
Don't skip assigning 0 to retval element when matrix element is 0 since
retval memory is not initialized to 0.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 20 Feb 2014 09:26:45 -0800 |
parents | 1fa5bba16218 |
children | 4e0d72145c5a |
files | liboctave/array/CDiagMatrix.cc liboctave/array/dDiagMatrix.cc liboctave/array/fCDiagMatrix.cc liboctave/array/fDiagMatrix.cc |
diffstat | 4 files changed, 8 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/array/CDiagMatrix.cc +++ b/liboctave/array/CDiagMatrix.cc @@ -394,9 +394,9 @@ for (octave_idx_type i = 0; i < len; i++) { double val = std::abs (elem (i, i)); - if (val < tol) + if (val < tol || val == 0.0) retval.elem (i, i) = 0.0; - else if (val != 0.0) + else retval.elem (i, i) = 1.0 / elem (i, i); }
--- a/liboctave/array/dDiagMatrix.cc +++ b/liboctave/array/dDiagMatrix.cc @@ -303,9 +303,9 @@ for (octave_idx_type i = 0; i < len; i++) { double val = std::abs (elem (i, i)); - if (val < tol) + if (val < tol || val == 0.0) retval.elem (i, i) = 0.0; - else if (val != 0.0) + else retval.elem (i, i) = 1.0 / elem (i, i); }
--- a/liboctave/array/fCDiagMatrix.cc +++ b/liboctave/array/fCDiagMatrix.cc @@ -398,9 +398,9 @@ for (octave_idx_type i = 0; i < len; i++) { float val = std::abs (elem (i, i)); - if (val < tol) + if (val < tol || val == 0.0f) retval.elem (i, i) = 0.0f; - else if (val != 0.0f) + else retval.elem (i, i) = 1.0f / elem (i, i); }
--- a/liboctave/array/fDiagMatrix.cc +++ b/liboctave/array/fDiagMatrix.cc @@ -303,9 +303,9 @@ for (octave_idx_type i = 0; i < len; i++) { float val = std::abs (elem (i, i)); - if (val < tol) + if (val < tol || val == 0.0f) retval.elem (i, i) = 0.0f; - else if (val != 0.0f) + else retval.elem (i, i) = 1.0f / elem (i, i); }