Monotone cubic interpolation

From Wikipedia, the free encyclopedia
Jump to: navigation, search

In the mathematical subfield of numerical analysis, monotone cubic interpolation is a variant of cubic interpolation that preserves monotonicity of the data set being interpolated.

Monotonicity is preserved by linear interpolation but not guaranteed by cubic interpolation.

Contents

[edit] Monotone cubic Hermite interpolation

Example showing cubic and monotone cubic interpolation of a monotone data set. Note that the red line is not monotone.

Monotone interpolation can be accomplished using cubic Hermite spline with the tangents mi modified to ensure the monotonicity of the resulting Hermite spline.

[edit] Interpolant selection

There are several ways of selecting interpolating tangents for each data point. This section will outline the use of the Fritsch–Carlson method.

Let the data points be (xk,yk) for k = 1,...,n

  1. Compute the slopes of the secant lines between successive points:

    \Delta_k =\frac{y_{k+1}-y_k}{x_{k+1}-x_k}

    for k=1,\dots,n-1.
  2. Initialize the tangents at every data point as the average of the secants,

    m_k = \frac{\Delta_{k-1}+\Delta_k}{2}

    for k=2,\dots,n-1; these may be updated in further steps. For the endpoints, use one-sided differences:

    m_1 = \Delta_1 \quad \text{and} \quad m_n = \Delta_{n-1}

  3. For k=1,\dots,n-1, if Δk = 0 (if two successive yk = yk + 1 are equal), then set mk = mk + 1 = 0, as the spline connecting these points must be flat to preserve monotonicity. Ignore step 4 and 5 for those k.
  4. Let αk = mk / Δk and βk = mk + 1 / Δk. If α or β are computed to be less than zero, then the input data points are not strictly monotone. In such cases, piecewise monotone curves can still be generated by choosing mk = mk + 1 = 0, although global strict monotonicity is not possible.
  5. To prevent overshoot and ensure monotonicity, the function

    \phi(\alpha, \beta) = \alpha - \frac{(2 \alpha + \beta - 3)^2}{3(\alpha + \beta - 2)}

    must have a value greater than (or equal to, if monotonicity need not be strict) zero. One simple way to satisfy this constraint is to restrict the magnitude of vector kk) to a circle of radius 3. That is, if \alpha_k^2 + \beta_k^2 > 9, then set mk = τkαkΔk and mk + 1 = τkβkΔk where \tau_k = \frac{3}{\sqrt{\alpha_k^2 + \beta_k^2}}.

Note that only one pass of the algorithm is required.

[edit] Cubic interpolation

After the preprocessing, evaluation of the interpolated spline is equivalent to cubic Hermite spline, using the data xk, yk, and mk for k = 1,...,n.

To evaluate at x, find the smallest value larger than x, xupper, and the largest value smaller than x, xlower, among xk such that x_\text{lower} \leq x \leq x_\text{upper}. Calculate

h = xupperxlower and t = \frac{x - x_\text{lower}}{h}

then the interpolant is

finterpolated(x) = ylowerh00(t) + hmlowerh10(t) + yupperh01(t) + hmupperh11(t)

where hii are the basis functions for the cubic Hermite spline.

[edit] External links

[edit] References

Personal tools
Namespaces
Variants
Actions
Navigation
Interaction
Toolbox
Print/export