% 这是MATLAB里面的pchip.m文件,这里把它的注释改写成汉语,主要是想弄清楚它是怎么计算在节点处的导数的。
function v = pchip(x,y,xx)
%输入:n个插值节点的纵坐标向量x;横坐标向量y;插值点xx。
%输出:分段三次Hermite插值结果。
% PCHIP Piecewise Cubic Hermite Interpolating Polynomial.
% PP = PCHIP(X,Y)为X处的值Y提供了一种特定的保形分段三次厄尔米特插值(shape-preserving piecewise cubic Hermite interpolant)
% 的分段多项式形式,在后面的PPVAL和样条功能UNMKPP(spline utility UNMKPP)将用到这个函数。
% X必须是个向量。
% 如果Y是个向量,则Y的第j个元素Y(j)被取为和X的第j个元素X(j)匹配的值,因此Y和X的长度必须一样。
% 如果Y是一个矩阵,或者N维数组,则Y(:,...,:,j)被取为和X(j)相匹配的值,因此Y的最后一维必须等于length(X).
% YY = PCHIP(X,Y,XX)和YY = PPVAL(PCHIP(X,Y),XX)是一样的,因此在YY中给出了在XX处的插值。
% PCHIP插值函数p(x)满足:
% 在每个子区间X(k) <= x <= X(k+1),p(x)都是三阶Hermite插值多项式(给定插值点和两个端点的斜率)。
% 因而,p(x) interpolates Y,也就是说,p(X(j)) = Y(:,j