diff src/OPERATORS/op-fpm-fpm.cc @ 8958:6ccc12cc65ef

implement raising a permutation matrix to integer power
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 11 Mar 2009 14:07:24 +0100
parents eb63fbe60fab
children
line wrap: on
line diff
--- a/src/OPERATORS/op-fpm-fpm.cc	Wed Mar 11 10:42:04 2009 +0100
+++ b/src/OPERATORS/op-fpm-fpm.cc	Wed Mar 11 14:07:24 2009 +0100
@@ -30,8 +30,10 @@
 #include "ov-perm.h"
 #include "ov-flt-perm.h"
 #include "ov-flt-re-mat.h"
+#include "ov-float.h"
 #include "ov-typeinfo.h"
 #include "ops.h"
+#include "xpow.h"
 
 DEFUNOP (transpose, float_perm_matrix)
 {
@@ -60,6 +62,13 @@
   return octave_value (v1.perm_matrix_value ().inverse () * v2.perm_matrix_value (), false);
 }
 
+DEFBINOP (pow, float_perm_matrix, float_scalar)
+{
+  CAST_BINOP_ARGS (const octave_float_perm_matrix&, const octave_float_scalar&);
+
+  return xpow (v1.perm_matrix_value (), v2.float_scalar_value ());
+}
+
 CONVDECL (float_perm_matrix_to_float_matrix)
 {
   CAST_CONV_ARG (const octave_float_perm_matrix&);
@@ -83,6 +92,7 @@
   INSTALL_BINOP (op_mul, octave_float_perm_matrix, octave_float_perm_matrix, mul);
   INSTALL_BINOP (op_div, octave_float_perm_matrix, octave_float_perm_matrix, div);
   INSTALL_BINOP (op_ldiv, octave_float_perm_matrix, octave_float_perm_matrix, ldiv);
+  INSTALL_BINOP (op_pow, octave_float_perm_matrix, octave_float_scalar, pow);
 
   INSTALL_CONVOP (octave_float_perm_matrix, octave_float_matrix, float_perm_matrix_to_float_matrix);
   INSTALL_CONVOP (octave_float_perm_matrix, octave_perm_matrix, float_perm_matrix_to_perm_matrix);