changeset 9114:79e90381b402

merge polytrans & polyscale -> polyaffine, make compatible with polyval
author Jaroslav Hajek <highegg@gmail.com>
date Tue, 14 Apr 2009 07:19:14 +0200
parents 4bb94a71913b
children ef95b930f1cf
files scripts/ChangeLog scripts/polynomial/Makefile.in scripts/polynomial/polyaffine.m scripts/polynomial/polyscale.m scripts/polynomial/polytrans.m
diffstat 5 files changed, 88 insertions(+), 142 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog
+++ b/scripts/ChangeLog
@@ -1,3 +1,9 @@
+2009-04-14  Jaroslav Hajek  <highegg@gmail.com>
+
+	* polynomial/polyaffine.m: New function.
+	* polynomial/polyscale.m: Remove.
+	* polynomial/polytrans.m: Remove.
+
 2009-04-12  Ben Abbott <bpabbott@mac.com>
 
 	* plot/__gnuplot_open_stream__.m: New function.
--- a/scripts/polynomial/Makefile.in
+++ b/scripts/polynomial/Makefile.in
@@ -34,9 +34,9 @@
 INSTALL_DATA = @INSTALL_DATA@
 
 SOURCES = compan.m conv.m convn.m deconv.m mkpp.m mpoles.m \
-  pchip.m poly.m polyder.m polyderiv.m polyfit.m polygcd.m \
-  polyint.m polyout.m polyreduce.m polyval.m polyvalm.m \
-  ppval.m residue.m roots.m spline.m unmkpp.m
+  pchip.m poly.m polyaffine.m polyder.m polyderiv.m polyfit.m \
+  polygcd.m polyint.m polyout.m polyreduce.m polyval.m \
+  polyvalm.m ppval.m residue.m roots.m spline.m unmkpp.m
 
 DISTFILES = $(addprefix $(srcdir)/, Makefile.in $(SOURCES))
 
new file mode 100644
--- /dev/null
+++ b/scripts/polynomial/polyaffine.m
@@ -0,0 +1,79 @@
+## Copyright (C) 2009  Tony Richardson, Jaroslav Hajek
+##
+## 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 3 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 <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {} polyaffine (@var{f}, @var{mu})
+## Return the coefficients of the polynomial whose coefficients are given by
+## vector @var{f} after an affine tranformation. 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-@var{mu}(1))/@var{mu}(2)).
+## 
+## Here is a simple example that will plot both the original and
+## transformed polynomials.  f is a third order polynomial.
+## g is a polynomial obtained after shifting f one unit to the right
+## and stretching the x axis by 1.2:
+##
+## f = [1/5 4/5 -7/5 -2];
+##
+## g = polyaffine(f, [1, 1.2]);
+##
+## x = linspace(-4,4,100);
+##
+## plot(x,polyval(f,x),x,polyval(g,x));
+##
+## axis([-4 4 -3 5]);
+##
+## grid("on");
+## @seealso{polyval}
+## @end deftypefn
+
+
+function g = polyaffine (f, mu)
+
+   if (nargin != 2)
+      print_usage ();
+   endif
+
+   if (! isvector (f))
+      error ("polyaffine: first argument must be a vector.");
+   endif
+
+   if (! isvector (mu) || length (mu) != 2)
+      error ("polyaffine: second argument must be a two-element vector.");
+   endif
+
+   lf = length (f);
+
+   ## Ensure that f is a row vector
+   if (rows (f) > 1)
+      f = f.';
+   endif
+
+   ## Translate.
+   if (mu(1) != 0)
+     w = (-mu(1)) .^ (0:lf-1);
+     ii = lf:-1:1;
+     g = f(ii) * (toeplitz (w) .* pascal (lf, -1));
+     g = g(ii);
+   else
+     g = f;
+   endif
+
+   ## Scale.
+   if (mu(2) != 1)
+     g = g ./ (mu(2) .^ (lf-1:-1:0));
+   endif
+
+endfunction
deleted file mode 100644
--- a/scripts/polynomial/polyscale.m
+++ /dev/null
@@ -1,69 +0,0 @@
-## 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 <http://www.gnu.org/licenses/>.
-
-## -*- 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 <richardson@evansville.edu)
-## Created: April 2009
-## adapted by: jh
-
-function g = polyscale (f, a)
-
-   if (nargin != 2)
-      print_usage ();
-   endif
-
-   if (! isvector (f))
-      error ("polyscale: first argument must be a vector.");
-   endif
-
-   if (! isscalar (a))
-      error ("polyscale: second argument must be a scalar.");
-   endif
-
-   lf = length(f);
-
-   # Ensure that f is a row vector
-   if (rows (f) > 1)
-      f = reshape (a, 1, lf);
-   endif
-
-   g = f .* (a .^ linspace (lf-1, 0, lf));
-
-endfunction
deleted file mode 100644
--- a/scripts/polynomial/polytrans.m
+++ /dev/null
@@ -1,70 +0,0 @@
-## 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 <http://www.gnu.org/licenses/>.
-
-## -*- 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 <richardson@evansville.edu)
-## Created: April 2009
-
-function g = polytrans (f, a)
-
-   if (nargin != 2)
-      print_usage ();
-   endif
-
-   if (! isvector (f))
-      error ("polytrans: first argument must be a vector.");
-   endif
-
-   if (! isscalar (a))
-      error ("polytrans: second argument must be a scalar.");
-   endif
-
-   lf = length (f);
-
-   # Ensure that f is a row vector
-   if (rows (f) > 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