annotate scripts/polynomial/spline.m @ 15063:36cbcc37fdb8

Refactor configure.ac to make it more understandable. Use common syntax for messages in config.h Correct typos, refer to libraries in all caps, use two spaces after period. Follow Autoconf guidelines and place general tests before specific tests. * configure.ac, m4/acinclude.m4: Use common syntax for messages in config.h Correct typos, refer to libraries in all caps, use two spaces after period. Follow Autoconf guidelines and place general tests before specific tests.
author Rik <rik@octave.org>
date Tue, 31 Jul 2012 10:28:51 -0700
parents c2dbdeaa25df
children d63878346099
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14138
72c96de7a403 maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents: 14104
diff changeset
1 ## Copyright (C) 2000-2012 Kai Habel
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
2 ## Copyright (C) 2006 David Bateman
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
3 ##
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
4 ## This file is part of Octave.
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
5 ##
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
6 ## Octave is free software; you can redistribute it and/or modify it
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
7 ## under the terms of the GNU General Public License as published by
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
8 ## the Free Software Foundation; either version 3 of the License, or (at
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
9 ## your option) any later version.
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
10 ##
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
11 ## Octave is distributed in the hope that it will be useful, but
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
12 ## WITHOUT ANY WARRANTY; without even the implied warranty of
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
13 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
14 ## General Public License for more details.
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
15 ##
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
16 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
17 ## along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
18 ## <http://www.gnu.org/licenses/>.
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
19
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
20 ## -*- texinfo -*-
10793
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10658
diff changeset
21 ## @deftypefn {Function File} {@var{pp} =} spline (@var{x}, @var{y})
7650
eb7bdde776f2 Texinfo fixes
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
22 ## @deftypefnx {Function File} {@var{yi} =} spline (@var{x}, @var{y}, @var{xi})
14104
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
23 ## Return the cubic spline interpolant of points @var{x} and @var{y}.
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
24 ##
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
25 ## When called with two arguments, return the piecewise polynomial @var{pp}
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
26 ## that may be used with @code{ppval} to evaluate the polynomial at specific
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
27 ## points. When called with a third input argument, @code{spline} evaluates
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
28 ## the spline at the points @var{xi}. The third calling form @code{spline
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
29 ## (@var{x}, @var{y}, @var{xi})} is equivalent to @code{ppval (spline
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
30 ## (@var{x}, @var{y}), @var{xi})}.
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
31 ##
14104
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
32 ## The variable @var{x} must be a vector of length @var{n}. @var{y} can be
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
33 ## either a vector or array. If @var{y} is a vector it must have a length of
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
34 ## either @var{n} or @code{@var{n} + 2}. If the length of @var{y} is
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
35 ## @var{n}, then the "not-a-knot" end condition is used. If the length of
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
36 ## @var{y} is @code{@var{n} + 2}, then the first and last values of the
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
37 ## vector @var{y} are the values of the first derivative of the cubic spline
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
38 ## at the endpoints.
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
39 ##
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
40 ## If @var{y} is an array, then the size of @var{y} must have the form
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
41 ## @tex
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
42 ## $$[s_1, s_2, \cdots, s_k, n]$$
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
43 ## @end tex
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 8310
diff changeset
44 ## @ifnottex
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
45 ## @code{[@var{s1}, @var{s2}, @dots{}, @var{sk}, @var{n}]}
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 8310
diff changeset
46 ## @end ifnottex
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
47 ## or
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
48 ## @tex
8828
8463d1a2e544 Doc fixes.
Brian Gough <bjg@network-theory.co.uk>
parents: 8602
diff changeset
49 ## $$[s_1, s_2, \cdots, s_k, n + 2].$$
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
50 ## @end tex
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 8310
diff changeset
51 ## @ifnottex
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
52 ## @code{[@var{s1}, @var{s2}, @dots{}, @var{sk}, @var{n} + 2]}.
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 8310
diff changeset
53 ## @end ifnottex
14104
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
54 ## The array is reshaped internally to a matrix where the leading
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11536
diff changeset
55 ## dimension is given by
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
56 ## @tex
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
57 ## $$s_1 s_2 \cdots s_k$$
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
58 ## @end tex
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 8310
diff changeset
59 ## @ifnottex
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
60 ## @code{@var{s1} * @var{s2} * @dots{} * @var{sk}}
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 8310
diff changeset
61 ## @end ifnottex
9051
1bf0ce0930be Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents: 8920
diff changeset
62 ## and each row of this matrix is then treated separately. Note that this
14104
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
63 ## is exactly opposite to @code{interp1} but is done for @sc{matlab}
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
64 ## compatibility.
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
65 ##
614505385171 doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents: 12608
diff changeset
66 ## @seealso{pchip, ppval, mkpp, unmkpp}
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
67 ## @end deftypefn
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
68
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
69 ## This code is based on csape.m from octave-forge, but has been
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
70 ## modified to use the sparse solver code in octave that itself allows
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
71 ## special casing of tri-diagonal matrices, modified for NDArrays and
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
72 ## for the treatment of vectors y 2 elements longer than x as complete
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
73 ## splines.
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
74
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
75 function ret = spline (x, y, xi)
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
76
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
77 x = x(:);
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
78 n = length (x);
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
79 if (n < 2)
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
80 error ("spline: requires at least 2 points");
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
81 endif
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
82
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
83 ## Check the size and shape of y
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
84 ndy = ndims (y);
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
85 szy = size (y);
12608
59e2460acae1 make piecewise polynomial (pp) functions more compatible
Kai Habel <kai.habel@gmx.de>
parents: 12444
diff changeset
86 if (ndy == 2 && (szy(1) == n || szy(2) == n))
59e2460acae1 make piecewise polynomial (pp) functions more compatible
Kai Habel <kai.habel@gmx.de>
parents: 12444
diff changeset
87 if (szy(2) == n)
6014
437f9086b967 [project @ 2006-09-30 15:27:06 by jwe]
jwe
parents: 5838
diff changeset
88 a = y.';
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
89 else
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
90 a = y;
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
91 szy = fliplr (szy);
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
92 endif
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
93 else
12608
59e2460acae1 make piecewise polynomial (pp) functions more compatible
Kai Habel <kai.habel@gmx.de>
parents: 12444
diff changeset
94 a = shiftdim (reshape (y, [prod(szy(1:end-1)), szy(end)]), 1);
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
95 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11536
diff changeset
96
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11536
diff changeset
97 for k = (1:columns (a))(any (isnan (a)))
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11536
diff changeset
98 ok = ! isnan (a(:,k));
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11536
diff changeset
99 a(!ok,k) = spline (x(ok), a(ok,k), x(!ok));
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11536
diff changeset
100 endfor
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11536
diff changeset
101
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
102 complete = false;
14872
c2dbdeaa25df maint: use rows() and columns() to clarify m-files.
Rik <octave@nomad.inbox5.com>
parents: 14868
diff changeset
103 if (rows (a) == n + 2)
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
104 complete = true;
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
105 dfs = a(1,:);
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
106 dfe = a(end,:);
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
107 a = a(2:end-1,:);
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
108 endif
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
109
14222
190952239c2c Use '!' for not operation in preference to '~'.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
110 if (! issorted (x))
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14575
diff changeset
111 [x, idx] = sort (x);
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
112 a = a(idx,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
113 endif
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
114
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
115 b = c = zeros (size (a));
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
116 h = diff (x);
5838
376e02b2ce70 [project @ 2006-06-01 20:23:53 by jwe]
jwe
parents: 5837
diff changeset
117 idx = ones (columns (a), 1);
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
118
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
119 if (complete)
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
120
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
121 if (n == 2)
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
122 d = (dfs + dfe) / (x(2) - x(1)) ^ 2 + ...
12608
59e2460acae1 make piecewise polynomial (pp) functions more compatible
Kai Habel <kai.habel@gmx.de>
parents: 12444
diff changeset
123 2 * (a(1,:) - a(2,:)) / (x(2) - x(1)) ^ 3;
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
124 c = (-2 * dfs - dfe) / (x(2) - x(1)) - ...
12608
59e2460acae1 make piecewise polynomial (pp) functions more compatible
Kai Habel <kai.habel@gmx.de>
parents: 12444
diff changeset
125 3 * (a(1,:) - a(2,:)) / (x(2) - x(1)) ^ 2;
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
126 b = dfs;
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
127 a = a(1,:);
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
128
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
129 d = d(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
130 c = c(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
131 b = b(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
132 a = a(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
133 else
14575
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
134 g(1,:) = (a(2,:) - a(1,:)) / h(1) - dfs;
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
135 g(2:n-1,:) = (a(3:n,:) - a(2:n-1,:)) ./ h(2:n-1) - ...
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
136 (a(2:n-1,:) - a(1:n-2,:)) ./ h(1:n-2);
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
137 g(n,:) = dfe - (a(n,:) - a(n-1,:)) / h(n-1);
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14575
diff changeset
138 c = spdiags ([[h/6;0],[h(1)/3;(h(1:n-2)+h(2:n-1))/3;h(n-1)/3],[0;h/6]],...
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14575
diff changeset
139 [-1,0,1],n,n) \ (g / 2);
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
140 b(1:n-1,:) = diff (a) ./ h(1:n-1, idx) ...
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9768
diff changeset
141 - h(1:n-1,idx) / 3 .* (c(2:n,:) + 2 * c(1:n-1,:));
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
142 d = diff (c) ./ (3 * h(1:n-1, idx));
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
143
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
144 d = d(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
145 c = c(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
146 b = b(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
147 a = a(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
148 endif
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
149 else
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
150
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
151 if (n == 2)
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
152 b = (a(2,:) - a(1,:)) / (x(2) - x(1));
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
153 a = a(1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
154 d = [];
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
155 c = [];
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
156 b = b(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
157 a = a(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
158 elseif (n == 3)
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
159
11196
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
160 n = 2;
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
161 c = (a(1,:) - a(3,:)) / ((x(3) - x(1)) * (x(2) - x(3))) ...
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
162 + (a(2,:) - a(1,:)) / ((x(2) - x(1)) * (x(2) - x(3)));
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
163 b = (a(2,:) - a(1,:)) * (x(3) - x(1)) ...
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
164 / ((x(2) - x(1)) * (x(3) - x(2))) ...
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
165 + (a(1,:) - a(3,:)) * (x(2) - x(1)) ...
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
166 / ((x(3) - x(1)) * (x(3) - x(2)));
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
167 a = a(1,:);
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
168 d = [];
11196
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
169 x = [min(x), max(x)];
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
170
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
171 c = c(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
172 b = b(1:n-1,:);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
173 a = a(1:n-1,:);
11196
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
174 else
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
175
11196
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
176 g = zeros (n-2, columns (a));
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
177 g(1,:) = 3 / (h(1) + h(2)) ...
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
178 * (a(3,:) - a(2,:) - h(2) / h(1) * (a(2,:) - a(1,:)));
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
179 g(n-2,:) = 3 / (h(n-1) + h(n-2)) ...
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
180 * (h(n-2) / h(n-1) * (a(n,:) - a(n-1,:)) - (a(n-1,:) - a(n-2,:)));
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
181
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
182 if (n > 4)
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
183
11196
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
184 g(2:n - 3,:) = 3 * diff (a(3:n-1,:)) ./ h(3:n-2,idx) ...
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
185 - 3 * diff (a(2:n-2,:)) ./ h(2:n - 3,idx);
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
186
11196
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
187 dg = 2 * (h(1:n-2) .+ h(2:n-1));
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
188 dg(1) = dg(1) - h(1);
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
189 dg(n-2) = dg(n-2) - h(n-1);
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
190
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
191 ldg = udg = h(2:n-2);
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
192 udg(1) = udg(1) - h(1);
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
193 ldg(n - 3) = ldg(n-3) - h(n-1);
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
194 c(2:n-1,:) = spdiags ([[ldg(:); 0], dg, [0; udg(:)]],
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9768
diff changeset
195 [-1, 0, 1], n-2, n-2) \ g;
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
196
11196
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
197 elseif (n == 4)
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
198
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
199 dg = [h(1) + 2 * h(2); 2 * h(2) + h(3)];
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
200 ldg = h(2) - h(3);
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
201 udg = h(2) - h(1);
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
202 c(2:n-1,:) = spdiags ([[ldg(:);0], dg, [0; udg(:)]],
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
203 [-1, 0, 1], n-2, n-2) \ g;
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
204
11196
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
205 endif
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
206
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
207 c(1,:) = c(2,:) + h(1) / h(2) * (c(2,:) - c(3,:));
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
208 c(n,:) = c(n-1,:) + h(n-1) / h(n-2) * (c(n-1,:) - c(n-2,:));
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
209 b = diff (a) ./ h(1:n-1, idx) ...
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
210 - h(1:n-1, idx) / 3 .* (c(2:n,:) + 2 * c(1:n-1,:));
d17cb8a1271d spline.m: Fix algorithm for input with 3 elements (bug #31098)
Marco Caliari <marco.caliari@univr.it>
parents: 10793
diff changeset
211 d = diff (c) ./ (3 * h(1:n-1, idx));
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
212
12608
59e2460acae1 make piecewise polynomial (pp) functions more compatible
Kai Habel <kai.habel@gmx.de>
parents: 12444
diff changeset
213 d = d(1:n-1,:);d = d.'(:);
59e2460acae1 make piecewise polynomial (pp) functions more compatible
Kai Habel <kai.habel@gmx.de>
parents: 12444
diff changeset
214 c = c(1:n-1,:);c = c.'(:);
59e2460acae1 make piecewise polynomial (pp) functions more compatible
Kai Habel <kai.habel@gmx.de>
parents: 12444
diff changeset
215 b = b(1:n-1,:);b = b.'(:);
59e2460acae1 make piecewise polynomial (pp) functions more compatible
Kai Habel <kai.habel@gmx.de>
parents: 12444
diff changeset
216 a = a(1:n-1,:);a = a.'(:);
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
217 endif
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
218
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
219 endif
12608
59e2460acae1 make piecewise polynomial (pp) functions more compatible
Kai Habel <kai.habel@gmx.de>
parents: 12444
diff changeset
220 ret = mkpp (x, cat (2, d, c, b, a), szy(1:end-1));
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
221
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
222 if (nargin == 3)
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
223 ret = ppval (ret, xi);
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
224 endif
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
225
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
226 endfunction
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
227
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
228
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
229 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
230 %! x = 0:10; y = sin (x);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14237
diff changeset
231 %! xspline = 0:0.1:10; yspline = spline (x,y,xspline);
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14237
diff changeset
232 %! title ("spline fit to points from sin (x)");
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
233 %! plot (xspline,sin(xspline),"r", xspline,yspline,"g-", x,y,"b+");
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
234 %! legend ("original", "interpolation", "interpolation points");
5824
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
235 %! %--------------------------------------------------------
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
236 %! % confirm that interpolated function matches the original
448f9982e7fb [project @ 2006-05-19 06:53:31 by jwe]
jwe
parents:
diff changeset
237
6686
2aad75fcc93a [project @ 2007-06-03 20:58:28 by dbateman]
dbateman
parents: 6248
diff changeset
238 %!shared x,y,abserr
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
239 %! x = [0:10]; y = sin (x); abserr = 1e-14;
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
240 %!assert (spline (x,y,x), y, abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
241 %!assert (spline (x,y,x'), y', abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
242 %!assert (spline (x',y',x'), y', abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
243 %!assert (spline (x',y',x), y, abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
244 %!assert (isempty (spline (x',y',[])))
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
245 %!assert (isempty (spline (x,y,[])))
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
246 %!assert (spline (x,[y;y],x), [spline(x,y,x);spline(x,y,x)], abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
247 %!assert (spline (x,[y;y],x'), [spline(x,y,x);spline(x,y,x)], abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
248 %!assert (spline (x',[y;y],x), [spline(x,y,x);spline(x,y,x)], abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
249 %!assert (spline (x',[y;y],x'), [spline(x,y,x);spline(x,y,x)], abserr)
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14237
diff changeset
250 %! y = cos (x) + i*sin (x);
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
251 %!assert (spline (x,y,x), y, abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
252 %!assert (real (spline (x,y,x)), real (y), abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
253 %!assert (real (spline (x,y,x.')), real (y).', abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
254 %!assert (real (spline (x.',y.',x.')), real (y).', abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
255 %!assert (real (spline (x.',y,x)), real (y), abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
256 %!assert (imag (spline (x,y,x)), imag (y), abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
257 %!assert (imag (spline (x,y,x.')), imag (y).', abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
258 %!assert (imag (spline (x.',y.',x.')), imag (y).', abserr)
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
259 %!assert (imag (spline (x.',y,x)), imag (y), abserr)
10658
c66a4657d764 spline.m: Ignore NaNs within input vectors.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
260 %!test
c66a4657d764 spline.m: Ignore NaNs within input vectors.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
261 %! xnan = 5;
c66a4657d764 spline.m: Ignore NaNs within input vectors.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
262 %! y(x==xnan) = NaN;
c66a4657d764 spline.m: Ignore NaNs within input vectors.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
263 %! ok = ! isnan (y);
c66a4657d764 spline.m: Ignore NaNs within input vectors.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
264 %! assert (spline (x, y, x(ok)), y(ok), abserr);
c66a4657d764 spline.m: Ignore NaNs within input vectors.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
265 %!test
c66a4657d764 spline.m: Ignore NaNs within input vectors.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
266 %! ok = ! isnan (y);
c66a4657d764 spline.m: Ignore NaNs within input vectors.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
267 %! assert (! isnan (spline (x, y, x(!ok))));
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
268 %!test
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
269 %! x = [1,2];
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
270 %! y = [1,4];
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
271 %! assert (spline (x,y,x), [1,4], abserr);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
272 %!test
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
273 %! x = [2,1];
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
274 %! y = [1,4];
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
275 %! assert (spline (x,y,x), [1,4], abserr);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
276 %!test
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
277 %! x = [1,2];
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
278 %! y = [1,2,3,4];
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
279 %! pp = spline (x,y);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
280 %! [x,P] = unmkpp (pp);
14575
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
281 %! assert (P, [3,-3,1,2], abserr);
12444
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
282 %!test
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
283 %! x = [2,1];
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
284 %! y = [1,2,3,4];
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
285 %! pp = spline (x,y);
07e102029d2a spline.m: Allow length(x) == 2 and unsorted x values.
Ben Abbott <bpabbott@mac.com>
parents: 11587
diff changeset
286 %! [x,P] = unmkpp (pp);
14575
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
287 %! assert (P, [7,-9,1,3], abserr);
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
288 %!test
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
289 %! x = [0,1,2];
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
290 %! y = [0,0,1,0,0];
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
291 %! pp = spline (x,y);
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
292 %! [x,P] = unmkpp (pp);
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
293 %! assert (P, [-2,3,0,0;2,-3,0,1], abserr);
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
294 %!test
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
295 %! x = [0,1,2,3];
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
296 %! y = [0,0,1,1,0,0];
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
297 %! pp = spline (x,y);
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
298 %! [x,P] = unmkpp (pp);
2e23cd0a9e40 Fix complete spline with three points (bug #35739)
Marco Caliari <marco.caliari@univr.it>
parents: 14363
diff changeset
299 %! assert (P, [-1,2,0,0;0,-1,1,1;1,-1,-1,1], abserr);
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14222
diff changeset
300