Mercurial > hg > octave-jordi
diff src/ov-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 | a1ae2aae903e |
children | eb63fbe60fab |
line wrap: on
line diff
--- a/src/ov-re-diag.cc +++ b/src/ov-re-diag.cc @@ -129,6 +129,25 @@ return DiagMatrix (matrix.rows (), matrix.cols (), 0.0); } +octave_value +octave_diag_matrix::sqrt (void) const +{ + octave_value retval; + + static NDArray::dmapper dsqrt = ::sqrt; + static NDArray::cmapper csqrt = std::sqrt; + + ColumnVector dvec = matrix.diag (); + if (Matrix (dvec).any_element_is_negative ()) + retval = ComplexDiagMatrix (dvec.map (csqrt)); + else + retval = DiagMatrix (dvec.map (dsqrt)); + + retval.resize (dims ()); + + return retval; +} + bool octave_diag_matrix::save_binary (std::ostream& os, bool& save_as_floats) {