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 }