Mercurial > octave-nkf
comparison liboctave/array/fCDiagMatrix.cc @ 18496: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 | 4197fc428c7d |
comparison
equal
deleted
inserted
replaced
18494:1fa5bba16218 | 18496:80b8873c90ba |
---|---|
396 FloatComplexDiagMatrix retval (c, r); | 396 FloatComplexDiagMatrix retval (c, r); |
397 | 397 |
398 for (octave_idx_type i = 0; i < len; i++) | 398 for (octave_idx_type i = 0; i < len; i++) |
399 { | 399 { |
400 float val = std::abs (elem (i, i)); | 400 float val = std::abs (elem (i, i)); |
401 if (val < tol) | 401 if (val < tol || val == 0.0f) |
402 retval.elem (i, i) = 0.0f; | 402 retval.elem (i, i) = 0.0f; |
403 else if (val != 0.0f) | 403 else |
404 retval.elem (i, i) = 1.0f / elem (i, i); | 404 retval.elem (i, i) = 1.0f / elem (i, i); |
405 } | 405 } |
406 | 406 |
407 return retval; | 407 return retval; |
408 } | 408 } |