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