function TP1
format long
close all

% TP Interpolation


%---------------
% Question 1
%---------------
% Completez les fonctions f1, f2, f3 et f4 en fin de sujet.
% Testez les avec le vecteur a = [-1,0,1,2];
% Vous devez obtenir respectivement
% -> pour f2   0.03846153846153846   1.00000000000000000   0.03846153846153846   0.00990099009900990
% -> pour f3   0.833333333333333   1.000000000000000   0.833333333333333   0.555555555555556
% -> pour f4   1   0   1   2
% Que doit-on obtenir pour f1 ?
% Reponse


Pause('Question 1')
%------------
% Question 2
%-------------
% Completez la fonction Interpolation en fin de sujet, qui calcule le
% polynome d interpolation de Lagrange en inversant le systeme lineaire construit
% a partir de la matrice de Vandermonde.
% Comment tester rapidement cette fonction ?
% Reponse


Pause('Question 2')
%--------------
% Question 3
%-------------
% Completez en fin de fichier la fonction Evalpol
% Comment la tester ?
% Reponse

Pause('Question 3')
%----------------
% Question 4
%----------------
% Definir le vecteur X contenant n=5 abscisses equireparties sur [-1,1], avec X(1) = -1, et X(5) = 1;
% Calculez les coefficients du polynome d interpolation de Lagrange a la fonction f1 aux abscisses X.
% Tracez sur un meme schema, sur le segment [-1,1]
%  - la fonction f1 en bleu
%  - les points d interpolation en croix rouges
%  - le polynome d interpolation en noir
% Reponse


Pause('Question 4')
%--------------
% Question 5
%-----------------
% Faire comme a la question precedente, avec n = 5, 10, 15 et 20 abscisses. Que remarquez-vous ?
% On pourra utiliser la fonction pause (consulter l aide Matlab).
% Faire de meme avec les fonctions f2, f3, f4. Que remarquez vous ?
% Reponse

n = [5,10,15,20];



Pause('Question 5')
%------------------
% Question 6
%-----------------
% On observe que pour les fonctions f2 et f4, les polynomes d interpolation
% ne convergent pas vers les fonctions quand on ajoute des points. C est le
% phenomeme de Runge.
% En fait, les points d interpolation equirepartis ne sont pas bons pour ces fonctions.
% Remplacez les par les points de Tchebychev, definis par x(i) = cos(pi*i/n), i = 0,...,n, n donne,
% et refaites les dessins precedents, pour les fonctions f2 et f4.
% Reponse

n = [5,10,15,20];


Pause('Question 6')
%----------------
% Question 7
%------------------
% Completez la fonction Lagrange, en fin de fichier.
% Comment la tester ?
% Reponse


Pause('Question 7')
%------------------
% Question 8
%-----------------
% Completez la fonction DifferencesDivisees, en fin de fichier.
% Reponse

Pause('Question 8')
%----------------
% Question 9
%------------------
% Completez la fonction Newton en fin de fichier
% Reponse

Pause('Question 9')
%---------------
%Question 10
%--------------
% Representez sur la meme figure, sur [-2,2]
%  - la fonction f1 en bleu
%  - les points d interpolation en ronds rouges
%  - le polynome d interpolation en noir, calcule avec la formule de Newton
% On prendra pour abscisses d interpolation 6 points equirepartis sur l axe [-1,1]
% Reponse

Pause('Question 10')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% LA PARTIE FONCTIONS A COMPLETER COMMENCE ICI %%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y = f1(x)
% Cette fonction prend comme argument le vecteur x, et renvoie
% le vecteur y dont les composantes verifient 
% y(k) =  sin(pi*x(k))


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y = f2(x)
% Cette fonction prend comme argument le vecteur x, et renvoie
% le vecteur y dont les composantes verifient 
% y(k) = 1 / (1 + 25 x(k)^2)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y = f3(x)
% Cette fonction prend comme argument le vecteur x, et renvoie
% le vecteur y dont les composantes verifient 
% y(k) = 1 / (1 + x(k)^2/5)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y = f4(x)
% Cette fonction prend comme argument le vecteur x, et renvoie
% le vecteur y dont les composantes verifient 
% y(k) = valeur absolue de x(k)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function CoefPolInterp = Interpolation( Xinterp, Yinterp)
% Cette fonction prend comme arguments le vecteur Xinterp
% des abscisses d interpolation, et Yinterp le vecteur des
% ordonnees d interpolation.
% Elle renvoie le vecteur CoefInterp contenant les coefficients
% du polynome d interpolation aux abscisses Xinterp et ordonnees Yinterp
% Aide : consultez la page vander dans l aide matlab


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function yPol = Evalpol(Coef, xPol)
% Cette fonction prend comme argument le vecteur Coef des coefficients 
% d un polynome, et un vecteur d abscisses xPol, et renvoie le vecteur
% yPol des valeurs du polynome en xPol :
% yPol = Coef(1) + Coef(2)*xPol + ..... + Coef(n)*xPol^(n-1)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function yPol = Lagrange(Xinterp, Yinterp, xPol)
% Cette fonction calcule la valeur en toutes les abscisses xPol
% du polynome d interpolation de Lagrange aux abscisses Xinterp
% et aux ordonnees Yinterp, a l aide de l ecriture du polynome
% dans la base de Lagrange :
%   P(x) = somme_i y_i ( prod_(j different de i) ( x - x_j) / (x_i - x_j))
% Elle renvoie le resultat dans yPol


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function DiffDiv = DifferencesDivisees(Xinterp,Yinterp)
%  Cette fonction calcule les differences divisees a partir des points
% d interpolation, et les stocke dans la matrice DiffDiv


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function yPol = Newton(DiffDiv,Xinterp, xPol)
% Cette fonction calcul la valeur aux abscisses xPol du polynome d interpolation
% a partir du tableau des differences divisees DiffDiv et des abscisses d interpolation Xinterp
% Le resultat est renvoye dans yPol



%%%%%% /!\ NE RIEN MODIFIER A PARTIR D ICI /!\ %%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function Pause(c)
disp(strcat(c,'. Appuyer sur une touche pour continuer'));
pause
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
