% 分段线性插值
% 注释的地方需要修改
clear
xd=[1,2]; % 插值节点,逗号分隔
yd=[2,3]; % 插值节点对应的函数值,逗号分隔
x0=1.7; % 求值节点
n=length(xd);
pp=zeros(n-1,4);
y=@(x)zeros(size(x));
for k=1:n-1
pp(k,1:2)=[0,yd(k)]+(yd(k+1)-yd(k))/...
(xd(k+1)-xd(k))*[1,-xd(k)];
pp(k,3:4)=xd(k:k+1);
y=@(x)y(x)+polyval(pp(k,1:2),x).*(x>=xd(k) & x<xd(k+1));
end
y0=feval(y,x0);
y0(x0==xd(n))=yd(n);
vpa(y0,7) % 结果有效数字位数