1
votes

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?

2
If you use a different interpolation method, it's normal that you potentially get a different result no ?obchardon

2 Answers

1
votes

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.

5
votes

Wanted to add this to @hazeiio's answer which I upvoted. You can see this illustrates the 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')

Interpolation Visualization


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