Cubic spline interpolation vs polynomial interpolation

瘦欲@ 提交于 2019-11-28 13:01:21

Interpolation makes sure the values of the interpolated function are the same as the values of original function at the points you provided. Looking at your code, it means that f(35) will be same and will be equal to 31 for every interpolation method.

However, depending on the method of interpolation, the curve between each of the consecutive methods will vary, hence giving you different values, which is expected.

Wanted to add this to @hazeiio's answer which I upvoted. You can see this illustrates his point well.

The interpolation method greatly affects the values obtained between data points (see image below). You'll see it can be dangerous to blindly call an interpolation method without checking to see what could go wrong.

% MATLAB R2017a
x = [32 34 35 36 37 38];
y = [26 28 31 30 29 25];  

xTgts = [33 33.5 35 37.25 37.5 37.75];

% Interpolation between data points depends on method
Linear = interp1(x,y,xTgts)
Spline = interp1(x,y,xTgts,'spline')    % Equivalent to spline(x,y,xTgts) yet faster somehow
Cubic = interp1(x,y,xTgts,'pchip')

As pointed out, they will all match the data exactly (see image below).

% Interpolation of data points will match
Linear = interp1(x,y,x)
Spline = interp1(x,y,x,'spline')    
Cubic = interp1(x,y,x,'pchip')


Code for illustration

step = 0.01;
xTest = (32:step:38)';

figure, hold on, box on
p(1) = plot(x,y,'ks','DisplayName','Data')
p(2) = plot(xTest,interp1(x,y,xTest),'b-','DisplayName','Linear')
p(3) = plot(xTest,interp1(x,y,xTest,'spline'),'r-','DisplayName','Spline')
p(4) = plot(xTest,interp1(x,y,xTest,'pchip'),'g-','DisplayName','Cubic')
legend('show')

% Options
xlabel('X')
ylabel('Y')
title('Interpolation Example')
for k = 1:4, p(k).LineWidth = 2; end
axis equal
xlim([31 39])
ylim([24 32])

Reference:
Interpolation (wiki)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!