]> Creatis software - CreaPhase.git/blob - octave_packages/miscellaneous-1.1.0/chebyshevpoly.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / miscellaneous-1.1.0 / chebyshevpoly.m
1 ## Copyright (C) 2007 Muthiah Annamalai <muthiah.annamalai@mavs.uta.edu>
2 ##
3 ## This program is free software; you can redistribute it and/or modify it under
4 ## the terms of the GNU General Public License as published by the Free Software
5 ## Foundation; either version 3 of the License, or (at your option) any later
6 ## version.
7 ##
8 ## This program is distributed in the hope that it will be useful, but WITHOUT
9 ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
11 ## details.
12 ##
13 ## You should have received a copy of the GNU General Public License along with
14 ## this program; if not, see <http://www.gnu.org/licenses/>.
15
16 ## -*- texinfo -*-
17 ## @deftypefn {Function File} {@var{coefs}=} chebyshevpoly (@var{kind},@var{order},@var{x})
18 ## 
19 ## Compute the coefficients of the Chebyshev polynomial, given the 
20 ## @var{order}. We calculate the Chebyshev polynomial using the recurrence
21 ## relations, Tn+1(x) = (2*x*Tn(x) - Tn-1(x)). The @var{kind} can set to
22 ## compute the first or second kind chebyshev polynomial.
23 ##
24 ## If the value @var{x} is specified, the polynomial is also evaluated,
25 ## otherwise just the return the coefficients of the polynomial are returned.
26 ## 
27 ## This is NOT the generalized Chebyshev polynomial.
28 ##
29 ## @end deftypefn
30
31 function h=chebyshevpoly(kind,order,val)
32   if nargin < 2, print_usage, endif
33
34   h_prev=[0 1];
35   if kind == 1
36     h_now=[1 0];
37   elseif (kind == 2)
38     h_now=[2 0];
39   else
40     error('unknown kind');
41   endif
42
43   if order == 0
44     h=h_prev;
45   else
46     h=h_now;
47   endif
48
49   for ord=2:order
50     x=[];y=[];
51     if (length(h_now) < (1+ord))
52       x=0;
53     endif
54     y=zeros(1,(1+ord)-length(h_prev));
55     p1=[h_now, x];
56     p3=[y, h_prev];
57     h=2*p1  -p3;
58     h_prev=h_now;
59     h_now=h;
60   endfor
61
62   if nargin == 3
63     h=polyval(h,val);
64   endif
65
66 endfunction