1 ## Copyright (C) 1993-2012 John W. Eaton
2 ## Copyright (C) 2009 VZLU Prague
4 ## This file is part of Octave.
6 ## Octave is free software; you can redistribute it and/or modify it
7 ## under the terms of the GNU General Public License as published by
8 ## the Free Software Foundation; either version 3 of the License, or (at
9 ## your option) any later version.
11 ## Octave is distributed in the hope that it will be useful, but
12 ## WITHOUT ANY WARRANTY; without even the implied warranty of
13 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 ## General Public License for more details.
16 ## You should have received a copy of the GNU General Public License
17 ## along with Octave; see the file COPYING. If not, see
18 ## <http://www.gnu.org/licenses/>.
21 ## @deftypefn {Function File} {} vander (@var{c})
22 ## @deftypefnx {Function File} {} vander (@var{c}, @var{n})
23 ## Return the Vandermonde matrix whose next to last column is @var{c}.
24 ## If @var{n} is specified, it determines the number of columns;
25 ## otherwise, @var{n} is taken to be equal to the length of @var{c}.
27 ## A Vandermonde matrix has the form:
30 ## \left[\matrix{c_1^{n-1} & \cdots & c_1^2 & c_1 & 1 \cr
31 ## c_2^{n-1} & \cdots & c_2^2 & c_2 & 1 \cr
32 ## \vdots & \ddots & \vdots & \vdots & \vdots \cr
33 ## c_n^{n-1} & \cdots & c_n^2 & c_n & 1 }\right]
40 ## c(1)^(n-1) @dots{} c(1)^2 c(1) 1
41 ## c(2)^(n-1) @dots{} c(2)^2 c(2) 1
45 ## c(n)^(n-1) @dots{} c(n)^2 c(n) 1
55 function retval = vander (c, n)
64 error ("vander: polynomial C must be a vector");
67 ## avoiding many ^s appears to be faster for n >= 100.
68 retval = zeros (length (c), n, class (c));
81 %! expect = [0,0,0,1; 1,1,1,1; 8,4,2,1; 27,9,3,1];
82 %! assert(vander (c), expect);
84 %!assert (vander (1), 1)
85 %!assert (vander ([1, 2, 3]), vander ([1; 2; 3]))
86 %!assert (vander ([1, 2, 3]), [1, 1, 1; 4, 2, 1; 9, 3, 1])
87 %!assert (vander ([1, 2, 3]*i), [-1, i, 1; -4, 2i, 1; -9, 3i, 1])
89 %!assert(vander (2, 3), [4, 2, 1])
90 %!assert(vander ([2, 3], 3), [4, 2, 1; 9, 3, 1])
93 %!error vander (1, 2, 3);
94 %!error <polynomial C must be a vector> vander ([1, 2; 3, 4]);