# HG changeset patch # User Anthony Richardson # Date 1239044129 -7200 # Node ID 705c24e3db58ee53f4054509a16252c1574903ca # Parent 5235caf89e12fbd0c533c828631fe2c620c27124 implement polyscale and polytrans diff -r 5235caf89e12 -r 705c24e3db58 scripts/ChangeLog --- a/scripts/ChangeLog Mon Apr 06 20:50:54 2009 +0200 +++ b/scripts/ChangeLog Mon Apr 06 20:55:29 2009 +0200 @@ -1,3 +1,8 @@ +2009-04-06 Jaroslav Hajek + + * polynomial/polyscale.m: New function. + * polynomial/polytrans.m: New function. + 2009-04-06 Jaroslav Hajek * special-matrix/pascal.m: Fix, optimize & extend. diff -r 5235caf89e12 -r 705c24e3db58 scripts/polynomial/polyscale.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/polynomial/polyscale.m Mon Apr 06 20:55:29 2009 +0200 @@ -0,0 +1,69 @@ +## Copyright (C) 2009 Tony Richardson +## +## This program 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 2 of the License, or +## (at your option) any later version. +## +## This program 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 this program; If not, see . + +## -*- texinfo -*- +## @deftypefn {Function File} {} polyscale (@var{f}, @var{a}) +## Return the coefficients of the scaled polynomial whose +## coefficients are given by vector @var{f}. If @var{f} is the +## vector representing the polynomial f(x), then +## @var{g} = polyscale (@var{f}, @var{a}) is the vector +## representing g(x) = f(x*a). +## +## Here is a simple example that will plot both the original and +## translated (shifted) polynomials. f is a third order polynomial. +## g is a polynomial obtained after scaling f by 2 (compression): +## +## f = [1/5 4/5 -7/5 -2]; +## +## g = polyscale(f, 2); +## +## x = linspace(-4,4,100); +## +## plot(x,polyval(f,x),x,polyval(g,x)); +## +## axis([-4 4 -3 5]); +## +## grid("on"); +## @seealso{polytranslate} +## @end deftypefn + +## Author: Tony Richardson 1) + f = reshape (a, 1, lf); + endif + + g = f .* (a .^ linspace (lf-1, 0, lf)); + +endfunction diff -r 5235caf89e12 -r 705c24e3db58 scripts/polynomial/polytrans.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/polynomial/polytrans.m Mon Apr 06 20:55:29 2009 +0200 @@ -0,0 +1,70 @@ +## Copyright (C) 2009 Tony Richardson +## +## This program 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 2 of the License, or +## (at your option) any later version. +## +## This program 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 this program; If not, see . + +## -*- texinfo -*- +## @deftypefn {Function File} {} polytrans (@var{f}, @var{a}) +## Return the coefficients of the shifted polynomial whose +## coefficients are given by vector @var{f}. If @var{f} is the +## vector representing the polynomial f(x), then +## @var{g} = polytrans (@var{f}, @var{a}) is the vector +## representing g(x) = f(x+a). +## +## Here is a simple example that will plot both the original and +## translated (shifted) polynomials. f is a third order polynomial. +## g is a polynomial obtained after shifting f one unit to the right: +## +## f = [1/5 4/5 -7/5 -2]; +## +## g = polytrans(f, -1); +## +## x = linspace(-4,4,100); +## +## plot(x,polyval(f,x),x,polyval(g,x)); +## +## axis([-4 4 -3 5]); +## +## grid("on"); +## @seealso{polyscale} +## @end deftypefn + +## Author: Tony Richardson 1) + f = f.'; + endif + + p = linspace (0, lf-1, lf)'; + ii = lf:-1:1; + g = f(ii) * (toeplitz (a .^ p) .* pascal (lf, -1)); + g = g(ii); +endfunction