Cubic spline interpolation vs polynomial interpolation

狂风中的少年 提交于 2019-11-27 07:28:24

问题


I am asked to investigate the different types of interpolation using Matlab for the following points:

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

and find the values for f(33), f(33.5) and f(35).

When plotting x and y, I can see that f(33) should be around 27, which is also what I get using interp1(x,y,33).

I am not sure if this is the correct way of using the Cubic spline interpolation function but I used spline(x,y,33) and got ans = 24.3906.

Shouldn't I still get the same value for f(33) no matter what type of interpolation I use?


回答1:


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.




回答2:


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)
Interpolation Methods

Dangers of Interpolation
Higher Order Interpolation is a Bad Idea



来源:https://stackoverflow.com/questions/53517842/cubic-spline-interpolation-vs-polynomial-interpolation

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