Mercurial > hg > octave-max
changeset 9097:705c24e3db58
implement polyscale and polytrans
author | Anthony Richardson <ar63@evansville.edu> |
---|---|
date | Mon, 06 Apr 2009 20:55:29 +0200 |
parents | 5235caf89e12 |
children | 5ecdb3d3568f |
files | scripts/ChangeLog scripts/polynomial/polyscale.m scripts/polynomial/polytrans.m |
diffstat | 3 files changed, 144 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,8 @@ +2009-04-06 Jaroslav Hajek <highegg@gmail.com> + + * polynomial/polyscale.m: New function. + * polynomial/polytrans.m: New function. + 2009-04-06 Jaroslav Hajek <highegg@gmail.com> * special-matrix/pascal.m: Fix, optimize & extend.
new file mode 100644 --- /dev/null +++ b/scripts/polynomial/polyscale.m @@ -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 <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
new file mode 100644 --- /dev/null +++ b/scripts/polynomial/polytrans.m @@ -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 <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