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 ())
 	{