%% 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.

%% TOPIC
% How do I conduct polynomial interpolation for given data.
%% SUMMARY
% Language : Matlab 2010a; 
% Authors : Autar Kaw and Sri Harsha Garapati; 
% Mfile available at
% http://numericalmethods.eng.usf.edu/blog/interpolation_polynomial_sec002_blog.m
% Last Revised : January 23, 2012; 
% Abstract: This program shows you how to perform polynomial interpolation
% in MATLAB
clc
clear all
clf
%% INTRODUCTION

disp('ABSTRACT')
disp('   This program shows you how to perform polynomial interpolation')

disp(' ')
disp('AUTHOR')
disp('   Autar Kaw and Sri Harsha Garapati of http://autarkaw.wordpress.com')
disp(' ')
disp('MFILE SOURCE')
disp('   http://numericalmethods.eng.usf.edu/blog/interpolation_polynomial_sec002_blog.m')
disp(' ')
disp('LAST REVISED')
disp('   January 23, 2012')
disp(' ')

%% INPUTS

% Inputs assuming 
%    that three points are given
  
xd  = [1 4 8];   % x data points
yd  = [2 5 7];   % y data points
xval= 4.5;       % predict y at this x value
%% DISPLAYING INPUTS
disp('  ')
disp('INPUTS')
% Creating a matrix to print input data as a table
data=[xd;yd]';
disp('     X     Y ')
% Printing the input data as a table
disp(data)
% Printing the input value of X at which Y is to be predicted
fprintf('  Predict the value of y when x is %g\n\n',xval)

%% THE CODE

% n returns the number of data points
n   =length(xd);  
% order of interpolation model
or  =n-1;     
% conducting polynomial interpolation 
coef=polyfit(xd,yd,or); 
% predicting y with the chosen interpolation model
ypre=polyval(coef,xval); 

% setting up domain for plotting 
xp  =[min(xd):0.1:max(xd)];
 % evaluating over domain xp for plotting the interpolation function
yp  =polyval(coef,xp);  

% creating symbolic variable X to display the output function
syms x
% defining the function as a string
fun =char(vpa(coef(1)*(x)+coef(2),5));
%% DISPLAYING OUTPUTS AND PLOTS
disp('  ')
disp('OUTPUTS')
% printing the predicted value of y 
fprintf('  Predicted value of y is %g\n',ypre)
% printing the interpolation function
fprintf('  The interpolation model is:\n  %s\n\n',fun)

disp('  See figure(1)')
% Telling Matlab to name the figure as Figure-1
figure(1)
% Matlab command so that it does hold on to all the plots
hold on
% plotting the data points
plot(xd,yd,'rs','MarkerSize',10)
% plotting the interpolation function
plot(xp,yp,'k-.','LineWidth',2)
% plotting the predicted data point value
plot(xval,ypre,'bo','MarkerSize',10)
% Title of the Plot
title('Interpolation Model for Data Points')
% Legend to distunguish different plots
legend('Given Points','Interpolation Model','Predicted Point',0)
% Labeling the X-axis
xlabel('x')
% Labeling the Y-Axis
ylabel('y')
% Matlab command to exit the hold-on option
hold off
