Anda di halaman 1dari 8

Gabriel de Fleurian Romain Sahut

TP n1 Polynmes d'interpolation

Responsable TP : Hakim Mabed

Printemps 2004

Introduction :
La premire partie de l'unit de valeur MT44 est ltude de linterpolation polynomiale. Pour tudier ceci, nous nous servons du logiciel Matlab sous windows. Au cours de ce Tp nous serons amens programmer les diffrentes mthodes dvaluation dun polynme en un point.

I. Evaluation dun polynme en t


Fonction dvaluation de p en t par lalgorithme de Newton
p tant un polynme de degr n dfini pour x rel par son criture de Newton relative aux centres (c1,c2cn) : On souhaite lvaluer en un point t donn sachant quon a la position de la courbe p en n+1 points. Dans cette question, il nous est demande de mettre en place une fonction puissance(x,k!xk) bien que celle ci soit inutile pour lvaluation de p en t selon lcriture de Newton. Puis, il nous tait demande de raliser, selon un schma itratif, une fonction permettant dvaluer p en t. Pour cela, nous devions simplement traduire lcriture en un algorithme interprtable par Matlab. Pour cette valuation, nous utiliserons les valeurs suivantes (celles donnes en TP): a=[1 0 1 -3] c=[1 1 -1] n=3 t=2
n $ i % La fonction p ( x) # + ai ' , ! x & c j " ( peut facilement tre divise en deux procdures FOR i #0 ) j #1 * imbriques, lune pour la somme des produits, lautre pour les produits en eux mmes. Cette fonction a une complexit en -(n2).

n est un entier naturel reprsentant le nombre de points. a est le vecteur des n+1 rels reprsentant le coefficient dominant de pn. c est un vecteur de n rels reprsentant les centres de lcriture de Newton. t est le point dvaluation de la fonction p. val sera la valeur relle retourne par lalgorithme, cest dire lvaluation de p en t.

function val=evaluation1(n,a,c,t) %Evaluation d'une fonction polynme en un point t somme=0; for i=1:n+1 produit=1; for j=1:i-1 produit=produit*(t-c(j)); end somme=somme+a(i)*produit; end val=somme; end

Fonction dvaluation de p en t par lalgorithme de Hrner


Le second exercice consistait a raliser le mme calcul, mais par la mthode de Hrner. Cette mthode, bien implmente, a lavantage dtre plus rapide que celle de Newton. Pour bien limplmenter, il faut remarquer quon peut calculer nouv_ai en fonction de ai, de ci et de nouv_ai+1. Sachant que c et a sont donnes en paramtres, et que nouv_an+1=an+1, il est alors possible de calculer en chane les diffrentes valeurs de nouv_a en utilisant une seule boucle FOR et les valeurs calcules litration prcdente. Cette fonction a une complexit en -(n). n est un entier naturel reprsentant le nombre de points. a est le vecteur des n+1 rels reprsentant le coefficient dominant de pn. c est un vecteur de n rels reprsentant les centres de lcriture de Newton. t est le point valuation de la fonction p. val sera la valeur relle retourne par lalgorithme, cest dire valuation de p en t (nouv_a1). nouv_a est le nouveau vecteur des composantes de p en criture de Newton. nouv_c est le nouveau vecteur des centres relatifs lalgorithme de Hrner (t,c1,c2,cn-1). function [val,nouv_a,nouv_c]=evaluation2(n,a,c,t) %Evaluation d'une fonction polynme en un point t selon le schma de Horner nouv_a=zeros(size(n+1)); nouv_a(n+1)=a(n+1); for i=n:-1:1 nouv_a(i)=a(i)+(t-c(i))*nouv_a(i+1); end nouv_c=[t c(:,1:n-1)]; val=nouv_a(1); end

Comparaison des temps dxcution


Le problme de la complexit des algorithmes devient prpondrant lorsque la quantit de donnes traiter devient importante. On peut ainsi apprcier les diffrentes faons de traiter un problme, ceci permettant de trouver la plus optimale. Ici il sagit sans aucun doute de la mthode de Hrner, mais dans un but exprimental et afin de mieux apprhender limportance du fait quun algorithme qui fonctionne nest pas toujours suffisant, et quun algorithme optimis permet de faire le mme travail, mais plus vite !

function t=tempsExecEvaluation1(n,a,c,t) tic ; for j=0:10000 evaluation1(n,a,c,t) ; end t=toc ; end

function t=tempsExecEvaluation2(n,a,c,t) tic ; for j=0:10000 evaluation2(n,a,c,t) ; end t=toc ; end Ici on teste les deux fonctions pour 10000 itrations de la mme valuation. Les rsultats obtenus avec les mmes paramtres sont trs parlants, mme pour un si petit calcul (10000 valuations sur un support trois points) . Evaluation1 : Evaluation2 : 1.5120 seconde 0.8210 seconde

On apprcie toute la puissance dune mthode efficace et bien implmente !

Version matricielle de evaluation(), qui partir d'un vecteur colonne de rels T produit le vecteur colonne des images p(T).
n est un entier naturel reprsentant le nombre de points. a est le vecteur des n+1 rels reprsentant le coefficient dominant de pn. c est un vecteur de n rels reprsentant les centres de lcriture de Newton. t est la matrice des points d'valuation de la fonction p. function val=eval3(n,a,c,t) %evaluation version matricielle

d=size(t); // t est une matrice ligne d=d(1,1); // d est le nombre d'elements du vecteur des points d'evaluation du polynme UN=ones(d,1); // on cree une matrice colonne de 1 de meme taille que t C=UN*c; // initialisation d'une matrice carre somme=zeros(d,1); //initialisation de la somme for i=1:n+1 produit=ones(d,1); //initialisation du produit for j=1:i-1 //Application de la mthode de Newton produit=produit.*(t-C(:,j)); end somme=somme+a(i)*produit; end val=somme; end

II. Table des diffrences divises et polynomes d'interpolation


On utilisera videmment des algorithmes fournis en cours. On considre une fonction f connue sur un support {xo, , xn}, par la donne pour tout i de {0, , n}

0x 1 2

n 3 i &1 4 pn ( x) # + f . x0 ,..., xi / 5, ! x & x j " 6 i #0 7 j #0 8

Algorithme du cours Dbut

Algorithme fait en TP function tableau=diffdiv(x,y) s=size(x); d=s(1,2); tableau=zeros(d,d);

Faire pour i " n jusqu' 0 t .i,0/ 9 f ! xi " fin de faire faire pour k " 1 jusqu' n faire pour i " 0 jusqu' n-k t .i : 1, k & 1/ & t .i, k & 1/ t .i, k / 9 x .i : k / & x .i / fin de faire fin de faire fin

for i=1:d tableau ! i,1" # y ! i " ; end

for k=2:d for i=1:d-k+1 tableau(i,k)=((tableau(i+1,k-1)tableau(i,k-1))/(x(i+k-1)-x(i))); end end end

function tableau=diffdiv(x,y)

La fonction va renvoyer un tableau et prends en argument deux vecteurs de mme taille. Il faut crer une matrice nulle d'une taille gale aux nombres de points du support. Size(x) renvoie le nombre de ligne et le nombre de colonne du vecteur. La taille maximum de la matrice correspond au nombre de colonne, soit s(1,2). On rempli la premire colonne de la matrice avec les ordonnes des points de support Contrairement lalgorithme fourni en cours, linitialisation du tableau n'est faite lenvers (pour i " n jusqu' 0). Cela na aucune importance. La matrice commence 1 et non pas 0 car le premier indice de tableau de Matlab est 1 et non 0. k & 1 ; 1 dans l'algo, d'o k de 2 d (taille maximale de la matrice). De la mme manire on dcale de 1, donc "i " 0 jusqu' n-k" devient " i " 1 jusqu' n-k+1

s=size(x); d=s(1,2); tableau=zeros(d,d);

for i=1:d tableau ! i,1" # y ! i " ; end

for k=2:d

for i=1:d-k+1

tableau ! i,k " #


end end

tableau ! i : 1, k & 1" & tableau ! i, k & 1" Cette formule ne varie que dans le ; dnominateur, puisque qu'elle doit x ! i : k & 1" & x ! i " commencer par x .1/ & x . 0/ ce qui
implique sous matlab x . 2/ & x .1/ .

Exemple de rsultat de la fonction diffdiv :


diffdiv([3,5,8],[-1.4410,0.5711,-0.3999]) ans= -0.3999 0.5711 -1.4410 0.4855 -0.2312 -0.6707 0 0 0

Conclusion : Ce Tp nous a permis de nous familiariser avec le logiciel Matlab dont la prise en main ncessite quelques rudiments de programmation, mais est tout de mme relativement ais. Nous avons pu revoir les diffrentes mthodes d'valuation de polynme et de constater leurs vitesses d'execution selon le code et l'algorithme utilis.

Anda mungkin juga menyukai