The PCHIP algorithm is written out in the SciPy API documentation:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.PchipInterpolator.html

In general, there is no guarantee that if you tabulate and
interpolate, the derivative matches the derivative of the underlying
function.

On Sun, Jan 22, 2023 at 12:51 PM Samuel Dupree <sdup...@speakeasy.net> wrote:
>
> I believe I know what is going on, but I don't understand why.
>
> The line for the first derivative that failed to coincide with the points in 
> the plot for the cosine is actually the interpolated first derivative scaled 
> by the factor pi/180. When I multiply the interpolated values for the first 
> derivative by 180/pi,  the interpolated first derivative coincides with the 
> points for the cosine as expected.
>
> What I don't understand is how the interpolator came up with the scale factor 
> it did and applied it using pure numbers.
>
> Any thoughts?
>
> Sam Dupree.
>
>
> On 1/21/23 18:04, Samuel Dupree wrote:
>
> I'm running SciPy ver. 1.9.3 under Python ver. 3.9.15  on a Mac Pro (2019) 
> desktop running Mac OSX ver. 13.1 Ventura. The problem I'm having is getting 
> scipy.interpolate.pchip_interpolate to return the first derivative of a pchip 
> interpolation.
>
> The test program I'm using is given below (and attached to this note).
>
>
> import numpy as np
> import matplotlib.pyplot as plt
> from scipy.interpolate import pchip_interpolate
>
> x_observed  = np.linspace(0.0, 360.0, 51)
> y_observed  = np.sin(np.pi*x_observed/180)
> dydx_observed = np.cos(np.pi*x_observed/180)
>
> x    = np.linspace(min(x_observed), max(x_observed), num=100)
> y    = pchip_interpolate(x_observed, y_observed, x, der=0, axis=0)
> dydx = pchip_interpolate(x_observed, y_observed, x, der=1, axis=0)
>
> plt.plot(x_observed,    y_observed, "bo" , label="observation funct")
> plt.plot(x_observed, dydx_observed, "rx" , label="observation deriv")
> plt.plot(x         , y            , "c-", label="pchip interpolation funct")
> plt.plot(x         , dydx         , "k-", label="pchip interpolation deriv")
> plt.legend()
> plt.savefig("pchip_example_01.png")
> plt.show()
>
>
> The program generates values of the sine function (y_observed) over the range 
> of 0 to 360 degrees. (x_observed). In a similar fashion, the cosine function 
> (first derivative of the sine function) is generated over the same range 
> (dydx_observed). pchip_interpolate is used to perform the interpolation over 
> a specified range for the function and its first derivative. A composite plot 
> is generated showing the points for the function (the sine) and its first 
> derivative (cosine). The interpolated points overlay the function (sine) as 
> expected. However, the first derivative returned fails to overlay the cosine 
> function. The plot is attached to this note.
>
> Any thoughts or suggestions?
>
> Sam Dupree
>
>
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: sdup...@speakeasy.net
>
>
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: evgeny.burovs...@gmail.com
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to