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 polynomial interpolation?

SUMMARY

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

INTRODUCTION

disp('ABSTRACT')
disp('   This program shows you how to do polynomial 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_polynomial.m')
disp(' ')
disp('LAST REVISED')
disp('   June 10, 2009')
disp(' ')
ABSTRACT
   This program shows you how to do polynomial interpolation?
 
AUTHOR
   Autar K Kaw of http://autarkaw.wordpress.com
 
MFILE SOURCE
   http://numericalmethods.eng.usf.edu/blog/interpolation_polynomial.m
 
LAST REVISED
   June 10, 2009
 

INPUTS

y vs x data to interpolate x data

x=[-1  -0.6  -0.2  0.2  0.6  1];
% ydata
y=[0.0385    0.1000    0.5000    0.5000    0.1000    0.0385];
% 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.6000   -0.2000    0.2000    0.6000    1.0000

The y data

y =

    0.0385    0.1000    0.5000    0.5000    0.1000    0.0385

The x values where you want to find the interpolated values

xin =

   -0.8000   -0.7000    0.7000    0.8000

  

THE CODE

Find the number of data points

n=length(x);
% Fitting to polynomial of order m=n-1
m=n-1
% pp consists of the coefficients of the polynomial
% pp(1)*x^m+pp(2)*x^m+.......+pp(m)
% pp(1) is coefficient of x^m
% pp(2) is coefficient of x^(m-1)
% and so on
pp=polyfit(x,y,m);
% Getting the values at xin
yin=polyval(pp,xin);
% This is only for plotting the interpolating polynomial
xplot=x(1):(x(n)-x(1))/10000:x(n);
yplot=polyval(pp,xplot);
m =

     5

DISPLAYING OUTPUTS

disp('  ')
disp('OUTPUTS')
disp('x values at which function is to be interpolated')
xin
disp('y values at the xin values')
yin
disp('These are the coefficients of the polynomial interpolant')
disp('pp(1) is coefficient of x^m, pp(2) is coefficient of x^(m-1) and so on')
fprintf('Order of polynomial m =%g',m)
pp
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','k','MarkerFaceColor','k')
hold on
plot(xplot,yplot,'LineWidth',2)
legend('Points given','Points found','Polynomial Curve')
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.0481    0.0078    0.0078   -0.0481

These are the coefficients of the polynomial interpolant
pp(1) is coefficient of x^m, pp(2) is coefficient of x^(m-1) and so on
Order of polynomial m =5
pp =

    0.0000    1.2020   -0.0000   -1.7308    0.0000    0.5673