X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fm%2Fpolynomial%2Fpolyvalm.m;fp=octave_packages%2Fm%2Fpolynomial%2Fpolyvalm.m;h=c990db4a32c068c40e94b49cd4408322d44a19f9;hp=0000000000000000000000000000000000000000;hb=1c0469ada9531828709108a4882a751d2816994a;hpb=63de9f36673d49121015e3695f2c336ea92bc278 diff --git a/octave_packages/m/polynomial/polyvalm.m b/octave_packages/m/polynomial/polyvalm.m new file mode 100644 index 0000000..c990db4 --- /dev/null +++ b/octave_packages/m/polynomial/polyvalm.m @@ -0,0 +1,68 @@ +## Copyright (C) 1994-2012 John W. Eaton +## Copyright (C) 2009 Jaroslav Hajek +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {} polyvalm (@var{c}, @var{x}) +## Evaluate a polynomial in the matrix sense. +## +## @code{polyvalm (@var{c}, @var{x})} will evaluate the polynomial in the +## matrix sense, i.e., matrix multiplication is used instead of element by +## element multiplication as used in @code{polyval}. +## +## The argument @var{x} must be a square matrix. +## @seealso{polyval, roots, poly} +## @end deftypefn + +## Author: Tony Richardson +## Created: June 1994 +## Adapted-By: jwe + +function y = polyvalm (c, x) + + if (nargin != 2) + print_usage (); + endif + + if (! (isvector (c) || isempty (c))) + error ("polyvalm: first argument must be a vector"); + endif + + if (! issquare (x)) + error ("polyvalm: second argument must be a square matrix"); + endif + + n = length (c); + if (n == 0) + y = zeros (rows (x), class (x)); + else + id = eye (rows (x), class (x)); + y = c(1) * id; + for i = 2:n + y = y * x + c(i) * id; + endfor + endif + +endfunction + + +%!assert(! any (polyvalm ([], [1, 2; 3, 4]))(:)); +%!assert(polyvalm ([1, 2, 3, 4], [3, -4, 1; -2, 0, 2; -1, 4, -3]), [117, -124, 11; -70, 36, 38; -43, 92, -45]) + +%!error polyvalm ([1, 1, 1], [1, 2; 3, 4; 5, 6]); +