Spline interpolation

returns the spline `spline`

= spapi(`knots`

,`x`

,`y`

)*f* (if any) of order

k = length(knots) - length(x)

`knots`

for which
(*) f(x(j)) = y(:,j), all j.

`x`

are the same, then:
$${D}^{m(j)}f(x(j))=y(:,j)$$

with $$m(j)=\{i<j:x(i)=x(j)\}$$ and *D ^{m}f* the

`x`

corresponds to the prescribing of value and the first
`spapi`

with an additional fourth
argument.The data values, `y(:,j)`

, can be scalars, vectors, matrices,
or ND-arrays.

`spapi(`

, with `k`

,`x`

,`y`

)`k`

a positive integer, specifies the desired spline
order, `k`

. In this case the `spapi`

function calls the `aptknt`

function to determine a
workable, but not necessarily optimal, knot sequence for the given sites
`x`

. In other words, the command
`spapi(k,x,y)`

has the same effect as the more explicit
command `spapi(aptknt(x,k),x,y)`

.

`spapi({knork1,...,knorkm},{x1,...,xm},y)`

returns the B-form of a tensor-product spline interpolant to
*gridded* data. Here, each `knorki`

is
either a knot sequence, or a positive integer specifying the polynomial order
used in the `i`

-th variable. The `spapi`

function then provides a corresponding knot sequence for the
`i`

-th variable. Further, `y`

must be an
(`r+m`

)`-`

dimensional array, with
`y(:,i1,...,im)`

the datum to fit at the
`site`

`[x{1}(i1),...,x{m}(im)]`

, for all `i1`

, ...,
`im`

. In contrast to the univariate case, if the spline is
scalar-valued, then `y`

can be an
`m`

-dimensional array.

`spapi(...,'noderiv')`

with the character vector
`'noderiv'`

as a fourth argument, has the same effect as
`spapi(...)`

except that data values sharing the same site
are interpreted differently. With the fourth argument present, the average of
the data values with the same data site is interpolated at such a site. Without
it, data values with the same data site are interpreted as values of successive
derivatives to be matched at such a site, as described above, in the first
paragraph of this Description.

The given (univariate) knots and sites must satisfy the Schoenberg-Whitney
conditions for the interpolant to be defined. If the site sequence
`x`

is nondecreasing, then

$$\text{knots}(j)<x(j)<\text{knots}(j+k),\text{all}j$$

with equality possible at `knots`

(1) and
`knots`

(`end`

)). In the multivariate case,
these conditions must hold in each variable separately.

The function calls `spcol`

to provide the almost-block-diagonal
collocation matrix
(*B _{j}*,

`x`

denoting derivatives, as described above), and
`slvblk`

solves the linear system (*), using a block QR
factorization. The function fits gridded data, in tensor-product fashion, one variable at a time, taking advantage of the fact that a univariate spline fit depends linearly on the values that are being fitted.