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.