Mercurial > octave
diff src/DLD-FUNCTIONS/inv.cc @ 8366:8b1a2555c4e2
implement diagonal matrix objects
* * *
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Wed, 03 Dec 2008 13:32:57 +0100 |
parents | 3b46230f7a4d |
children | c3f7e2549abb |
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/inv.cc Wed Dec 03 20:57:27 2008 -0500 +++ b/src/DLD-FUNCTIONS/inv.cc Wed Dec 03 13:32:57 2008 +0100 @@ -29,6 +29,11 @@ #include "error.h" #include "gripes.h" #include "oct-obj.h" +#include "ops.h" +#include "ov-re-diag.h" +#include "ov-cx-diag.h" +#include "ov-flt-re-diag.h" +#include "ov-flt-cx-diag.h" #include "utils.h" DEFUN_DLD (inv, args, nargout, @@ -80,7 +85,39 @@ float frcond = 0.0; bool isfloat = arg.is_single_type (); - if (isfloat) + if (arg.is_diag_matrix ()) + { + rcond = 1.0; + frcond = 1.0f; + const octave_base_value& a = arg.get_rep (); + if (arg.is_complex_type ()) + { + if (isfloat) + { + CAST_CONV_ARG (const octave_float_complex_diag_matrix&); + result = v.float_complex_diag_matrix_value ().inverse (info); + } + else + { + CAST_CONV_ARG (const octave_complex_diag_matrix&); + result = v.complex_diag_matrix_value ().inverse (info); + } + } + else + { + if (isfloat) + { + CAST_CONV_ARG (const octave_float_diag_matrix&); + result = v.float_diag_matrix_value ().inverse (info); + } + else + { + CAST_CONV_ARG (const octave_diag_matrix&); + result = v.diag_matrix_value ().inverse (info); + } + } + } + else if (isfloat) { if (arg.is_real_type ()) {