% Exemplo de interpolacao por spline
% pchip_interp(x)
%
function yp = pchip_interp(y,flag)
% Verifica tipo de dado
if iscell(y)
yc = y;
ny = length(y);
y = NaN*ones(ny,1);
for i=1:ny
if isnumeric(yc{i})
y(i) = yc{i};
end
end
end
n=length(y);
x=1:n;
yp = y;
% Separar dados validos/invalidos
indNan = find(isnan(y));
indNum = find(~isnan(y));
% Calcular spline
xNum=x(indNum);
yNum=y(indNum);
pc=pchip(xNum,yNum);
% Interpolar valores invalidos
xNan=x(indNan);
yNan=ppval(pc,xNan);
yp(indNan)=yNan;
% Exibir grfico
if flag
x1=linspace(min(xNum),max(xNum),4*n);
y1=ppval(pc,x1);
plot(x1,y1,xNum,yNum,':*',xNan,yNan,'ro')
legend('Pchip','Vlidos','Interpolados',0)
end