Mercurial > hg > octave-nkf
diff src/ov-flt-re-diag.cc @ 8834:8dd69187c4a2
specialize sqrt for diagonal matrices
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Fri, 20 Feb 2009 21:49:26 +0100 |
parents | 095ae5e0a831 |
children | eb63fbe60fab |
line wrap: on
line diff
--- a/src/ov-flt-re-diag.cc +++ b/src/ov-flt-re-diag.cc @@ -114,6 +114,25 @@ return DiagMatrix (matrix.rows (), matrix.cols (), 0.0f); } +octave_value +octave_float_diag_matrix::sqrt (void) const +{ + octave_value retval; + + static FloatNDArray::dmapper dsqrt = ::sqrtf; + static FloatNDArray::cmapper csqrt = std::sqrt; + + FloatColumnVector dvec = matrix.diag (); + if (FloatMatrix (dvec).any_element_is_negative ()) + retval = FloatComplexDiagMatrix (dvec.map (csqrt)); + else + retval = FloatDiagMatrix (dvec.map (dsqrt)); + + retval.resize (dims ()); + + return retval; +} + bool octave_float_diag_matrix::save_binary (std::ostream& os, bool& /* save_as_floats*/)