HOW DO I DO THAT IN MATLAB SERIES?

In this series, I am answering questions that students have asked me about MATLAB. Most of the questions relate to a mathematical procedure.

Contents

TOPIC

How do I do spline interpolation?

SUMMARY

% Language : Matlab 2008a;
% Authors : Autar Kaw;
% Mfile available at
% http://numericalmethods.eng.usf.edu/blog/interpolate_spline.m;
% Last Revised : June 20, 2009;
% Abstract: This program shows you how to do spline interpolation?
%           .
clc
clear all
clf

INTRODUCTION

disp('ABSTRACT')
disp('   This program shows you how to do spline interpolation?')
disp(' ')
disp('AUTHOR')
disp('   Autar K Kaw of http://autarkaw.wordpress.com')
disp(' ')
disp('MFILE SOURCE')
disp('   http://numericalmethods.eng.usf.edu/blog/interpolation_spline.m')
disp(' ')
disp('LAST REVISED')
disp('   June 20, 2009')
disp(' ')
ABSTRACT
   This program shows you how to do spline interpolation?
 
AUTHOR
   Autar K Kaw of http://autarkaw.wordpress.com
 
MFILE SOURCE
   http://numericalmethods.eng.usf.edu/blog/interpolation_spline.m
 
LAST REVISED
   June 20, 2009
 

INPUTS

y vs x data to interpolate x data

x=[-1  -0.75  -0.5  -0.25   0.25  0.50 0.75  1];
% ydata
y=[-0.5  -0.5  -0.5  -0.5   0.5  0.5  0.5  0.5];
% Where do you want to interpolate at
xin=[-0.8  -0.7  0.7  0.8];

DISPLAYING INPUTS

disp('INPUTS')
disp('The x data')
x
disp('The y data')
y
disp('The x values where you want to find the interpolated values')
xin
disp('  ')
INPUTS
The x data

x =

   -1.0000   -0.7500   -0.5000   -0.2500    0.2500    0.5000    0.7500    1.0000

The y data

y =

   -0.5000   -0.5000   -0.5000   -0.5000    0.5000    0.5000    0.5000    0.5000

The x values where you want to find the interpolated values

xin =

   -0.8000   -0.7000    0.7000    0.8000

  

THE CODE

Fitting to spline - it is cubic splines

yin=spline(x,y,xin);
% This is only for plotting the spline interpolants
% Find the number of data points
n=length(x);
xplot=x(1):(x(n)-x(1))/10000:x(n);
yplot=spline(x,y,xplot);

DISPLAYING OUTPUTS

disp('  ')
disp('OUTPUTS')
disp('x values at which function is to be interpolated')
xin
disp('y values at the xin values')
yin
xlabel('x');
ylabel('y');
title('y vs x ');
plot(x,y,'o','MarkerSize',10,'MarkerEdgeColor','b','MarkerFaceColor','b')
hold on
plot(xin,yin,'o','MarkerSize',10,'MarkerEdgeColor','r','MarkerFaceColor','r')
hold on
plot(xplot,yplot,'LineWidth',2)
legend('Points given','Points found','Spline Curve','Location','East')
hold off
disp('  ')
  
OUTPUTS
x values at which function is to be interpolated

xin =

   -0.8000   -0.7000    0.7000    0.8000

y values at the xin values

yin =

   -0.5064   -0.4936    0.4936    0.5064