Mercurial > hg > octave-lyh
comparison scripts/polynomial/ppval.m @ 5824:448f9982e7fb
[project @ 2006-05-19 06:53:31 by jwe]
author | jwe |
---|---|
date | Fri, 19 May 2006 06:53:31 +0000 |
parents | |
children | b0d4ff99a0c5 |
comparison
equal
deleted
inserted
replaced
5823:080c08b192d8 | 5824:448f9982e7fb |
---|---|
1 ## Copyright (C) 2000 Paul Kienzle | |
2 ## | |
3 ## This file is part of Octave. | |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7 ## the Free Software Foundation; either version 2, or (at your option) | |
8 ## any later version. | |
9 ## | |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
16 ## along with Octave; see the file COPYING. If not, write to the Free | |
17 ## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
18 ## 02110-1301, USA. | |
19 | |
20 ## -*- texinfo -*- | |
21 ## @deftypefn {Function File} {@var{yi} =} ppval (@var{pp, @var{xi}) | |
22 ## | |
23 ## Evaluate piece-wise polynomial @var{pp} at the points @var{xi}. | |
24 ## If @code{@var{pp}.d} is a scalar greater than 1, or an array, | |
25 ## then the returned value @var{yi} will be an array that is | |
26 ## @code{d1, d1, @dots{}, dk, length (@var{xi})]}. | |
27 ## | |
28 ## @seealso{mkpp, unmkpp, spline} | |
29 ## @end deftypefn | |
30 | |
31 function yi = ppval (pp, xi) | |
32 | |
33 if (nargin != 2) | |
34 usage ("yi = ppval(pp, xi)") | |
35 endif | |
36 if (! isstruct (pp)) | |
37 error ("ppval: expects a pp structure"); | |
38 endif | |
39 if (isempty (xi)) | |
40 yi = []; | |
41 else | |
42 transposed = (columns (xi) == 1); | |
43 xi = xi(:); | |
44 xn = length (xi); | |
45 idx = lookup (pp.x(2:pp.n), xi) + 1; | |
46 dx = (xi - pp.x(idx))'; | |
47 dx = reshape (dx(ones(1,prod(pp.d)),:),[pp.d,xn]); | |
48 c = reshape (pp.P(:,1), pp.n, prod (pp.d)); | |
49 yi = reshape (c(idx,:)', [pp.d, xn]); | |
50 for i = 2 : pp.k; | |
51 c = reshape (pp.P(:,i), pp.n, prod (pp.d)); | |
52 yi = yi .* dx + reshape (c(idx,:)', [pp.d, xn]); | |
53 endfor | |
54 if (transposed && isscalar (pp.d) && pp.d == 1) | |
55 yi = yi.'; | |
56 endif | |
57 endif | |
58 endfunction |