comparison 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
comparison
equal deleted inserted replaced
8833:b86b42f77899 8834:8dd69187c4a2
112 octave_float_diag_matrix::imag (void) const 112 octave_float_diag_matrix::imag (void) const
113 { 113 {
114 return DiagMatrix (matrix.rows (), matrix.cols (), 0.0f); 114 return DiagMatrix (matrix.rows (), matrix.cols (), 0.0f);
115 } 115 }
116 116
117 octave_value
118 octave_float_diag_matrix::sqrt (void) const
119 {
120 octave_value retval;
121
122 static FloatNDArray::dmapper dsqrt = ::sqrtf;
123 static FloatNDArray::cmapper csqrt = std::sqrt;
124
125 FloatColumnVector dvec = matrix.diag ();
126 if (FloatMatrix (dvec).any_element_is_negative ())
127 retval = FloatComplexDiagMatrix (dvec.map (csqrt));
128 else
129 retval = FloatDiagMatrix (dvec.map (dsqrt));
130
131 retval.resize (dims ());
132
133 return retval;
134 }
135
117 bool 136 bool
118 octave_float_diag_matrix::save_binary (std::ostream& os, 137 octave_float_diag_matrix::save_binary (std::ostream& os,
119 bool& /* save_as_floats*/) 138 bool& /* save_as_floats*/)
120 { 139 {
121 140