# aptknt

Acceptable knot sequence

## Syntax

`knots = aptknt(tau,k) `

[knots,k] = aptknt(tau,k)

## Description

`knots = aptknt(tau,k) `

returns a knot sequence suitable for interpolation at the data sites `tau`

by splines of order k with that knot sequence, provided `tau`

has at least `k`

entries, is nondecreasing, and satisfies `tau(i)`

<`tau(i+k-1)`

for all `i`

. In that case, there is exactly one spline of order `k`

with knot sequence `knots`

that matches given values at those sites. This is so because the sequence `knots`

returned satisfies the Schoenberg-Whitney conditions

knots(i) < tau(i) < knots(i+k), i=1:length(tau)

with equality only at the extreme knots, each of which occurs with exact multiplicity `k`

.

If `tau`

has fewer than `k`

entries, then `k`

is reduced to the value `length(tau)`

. An error results if `tau`

fails to be nondecreasing and/or `tau(i)`

equals `tau(i+k-1)`

for some `i`

.

`[knots,k] = aptknt(tau,k) `

also returns the actual `k`

used (which equals the smaller of the input `k`

and `length(tau)`

).

## Examples

If `tau`

is equally spaced, e.g., equal to `linspace(a,b,n)`

for some `n`

>=4, and `y`

is a sequence of the same size as `tau`

, then `sp = spapi(aptknt(tau,4),tau,y)`

gives the cubic spline interpolant with the not-a-knot end condition. This is the same cubic spline as produced by the command `spline(tau,y)`

, but in B-form rather than ppform.

## Cautionary Note

If `tau`

is very nonuniform, then use of the resulting knot sequence for interpolation to data at the sites `tau`

may lead to unsatisfactory results.

## Algorithms

The `(k-1)`

-point averages `sum(tau(i+1:i+k-1))/(k-1)`

of the sequence `tau`

, as supplied by `aveknt(tau,k)`

, are augmented by a `k`

-fold `tau(1)`

and a `k`

-fold `tau(end)`

. In other words, the command gives the same result as `augknt([tau(1),aveknt(tau,k),tau(end)],k)`

, provided `tau`

has at least `k`

entries and `k `

is greater than 1.