Mercurial > hg > octave-lyh
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 |