1## Copyright (C) 2010 Soren Hauberg 2## 3## This program is free software; you can redistribute it and/or modify 4## it under the terms of the GNU General Public License as published by 5## the Free Software Foundation; either version 3, or (at your option) 6## any later version. 7## 8## This program is distributed in the hope that it will be useful, but 9## WITHOUT ANY WARRANTY; without even the implied warranty of 10## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11## General Public License for more details. 12## 13## You should have received a copy of the GNU General Public License 14## along with this file. If not, see <http://www.gnu.org/licenses/>. 15 16## -*- texinfo -*- 17## @deftypefn {Function File} mpower (@var{KP}, @var{k}) 18## Perform matrix power operation. 19## @end deftypefn 20 21function retval = mpower (KP, k) 22 ## Check input 23 if (nargin != 2) 24 print_usage (); 25 endif 26 27 if (! (ismatrix (KP) && isnumeric (KP))) 28 error ("mpower: first input argument must be a matrix"); 29 endif 30 31 if (! isscalar (k)) 32 error ("mpower: second input argument must be a scalar"); 33 endif 34 35 ## Do the actual computation 36 if (issquare (KP.A) && issquare (KP.B) && k == round (k)) 37 retval = kronprod (KP.A^k, KP.B^k); 38 elseif (issquare (KP)) 39 ## XXX: Can we do something smarter here? 40 retval = full (KP)^k; 41 else 42 error ("for A^b, A must be square"); 43 endif 44endfunction 45