# [ncl-talk] NCL spline question

Jonathan Vigh jvigh at ucar.edu
Wed Dec 23 16:15:38 MST 2015

```As an update to my question, a colleague informed me that Matlab has a
function called pchip: Piecewise Cubic Hermite Interpolating Polynomial
(PCHIP). It is the same as a regular cubic spline but it does not permit
overshoot/undershoot, which can occur with regular cubic splines.
http://www.mathworks.com/help/matlab/ref/pchip.html?s_tid=gn_loc_drop

I think something like this would be sufficient for my problem.

Do any of NCL's functions offer this type of spline?

Thanks,
Jonathan

On 12/23/2015 04:01 PM, Jonathan Vigh wrote:
> Greetings NCL-Talk,
>
> I'm trying to generate an interpolatory spline* for a lat/lon tropical
> cyclone trajectory from a set of lat/lon points at semi-regular time
> intervals. The input points are regularly spaced (for the most part)
> 6-hourly Best Track points, however there are occasional irregular
> time points in between, such as the exact time of landfall. The
> desired output is a semi-regular grid of hourly points, but with the
> same few irregular time points as the for the input times.
>
> (*An interpolatory spline is one in which the interpolated spline
> passes through the points that are being interpolated from, as opposed
> to an approximating spline which does not have to pass through the
> points.)
>
> It was suggested that NCL's ftkurv function (from the FitGrid library)
> might do what I'd like, since this does an interpolation for
> parametric curves. If I understand my problem correctly, lat and lon
> can be thought of as parameters of time.
>
> The example plot for ftkurv looks promising:
> http://www.ncarg.ucar.edu/ngmath/fitgrid/plot4.html
>
> ftkurv (
>                 xi [*] : numeric,
>                 yi [*] : numeric,
>                 t  [*] : numeric,
>                 xo [*] : float,    ; or double
>                 yo [*] : float     ; or double
>         )
>
> In the example given for this function, the parameter array passed in
> for 't' is a regularly-spaced normalized parameter array that ranges
> from 0 to 1. I don't understand where this function gets any
> information about the input time values however. I built a test case
> for a real hurricane track and validated the interpolated spline
> points at the input points. I get zero "error" at the end points of
> the track, with maximum error in the middle. The error increases and
> decreases smoothly, suggesting an offset issue (probably related to
> time drift).
>
> - Does anybody know if this function allow for irregular parameter
> values for 't'?
> - Is there a way to use ftkurv in a way that makes it aware of the
> times of the input lat/lon?
>
> I've created a fairly detailed stand-alone test code, which is
> attached. Feel free to run to see the error characteristics of the
> ftkurv spline.
>
> Ultimately, I'd like to be able to do piecewise cubic spline
> interpolation along the lines of what is done for gps tracks:
> http://topofusion.com/spline.php (piecewise interpolation, matching
> derivatives to ensure continuity of slope, Bessel interpolation used
> to compute the first derivative by fitting a 3-point parabola for each
> point). If someone has already implemented something like this in NCL,
> that would of course be awesome. But I can make do with something more
> basic provided it can handle the irregular input/output times.
>
> If anyone has experience with this type of spline problem, or has
> suggestions on other NCL routines to try, I'd appreciate any input you
> can provide.
>
> Jonathan

```