% funcao spl_interp(yd)
function ys=spl_interp(yd)
% Verifica tipo de dado
if iscell(yd)
yc = yd;
ny = length(yd);
yd = NaN*ones(ny,1);
for i=1:ny
if isnumeric(yc{i})
yd(i) = yc{i};
end
end
end
%% Separacao dos dados
n=length(yd);
xd=[1:n]';
ind1 = find(~isnan(yd));
ind2 = find(isnan(yd));
yn=yd(ind1);
xn=xd(ind1);
%% Geracao da Spline
sp=spline(xn,yn);
xx=linspace(min(xn),max(xn),4*n);
yy=ppval(sp,xx);
%% Interpolacao dos pontos invalidos
xn2=xd(ind2);
yn2=ppval(sp,xn2);
ys(ind1)=yn;
ys(ind2)=yn2;
%% Geracao do grafico
figure
plot(xn,yn,'*',xn2,yn2,'ro',xx,yy)
ys=ys';
legend('Valores','Interpolao','Spline',0)