]> AND Private Git Repository - cours-mesi.git/blob - tel/TPmatlab/interpolation/TP2d/demo_test_compar_methode.m
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
j
[cours-mesi.git] / tel / TPmatlab / interpolation / TP2d / demo_test_compar_methode.m
1 % script demo_test_compar_methode : comparaison des différentes méthodes pour calculer un polynôme d'interpolation\r
2 %\r
3 %\r
4 % Ce script permet de comparer, en terme d'évaluation numérique et graphique \r
5 % le polynôme interpolateur p_n d'une fonction f sur le support (x_i) où, pour 0<=i<=n, \r
6 % on a x_i=a+i*(b-a)/n, avec a, b,  n et f donnée, en fonction des trois méthodes : \r
7 % a) calcul en utilisant la forme de Newton et les différences divisées,\r
8 % b) calcul à partir des polynômes de Lagranges l_i.\r
9 % c) calcul à partir de la forme canonique de p_n\r
10 %\r
11 %\r
12 % ************ Fonctions auxiliaires utilisées ************\r
13 %  \r
14 %   saisiefonction, diff_div_dist, eval_horner, \r
15 %   newton_cano, poly_eval_lagr\r
16 %\r
17 % *********************************************************\r
18 \r
19 clear all;\r
20 a=input('Entrez l''abscisse minimale a : ');\r
21 b=input('Entrez l''abscisse maximale b : ');\r
22 pgra=input('Entrez le nombre de points pour le graphique : ');\r
23 f=saisiefonction;\r
24 n=input('Entrez l''entier n positif (égal au nombre de points oté de un) : ');\r
25 beton=0;\r
26 choixpoint='o';\r
27 xgra=a:(b-a)/pgra:b;\r
28 ygra=feval(f,xgra);\r
29 while(n>=0)\r
30    if strcmp(choixpoint,'o')\r
31       choixpoint=input('Afficher le support ? entrez o ou n : ','s');\r
32    end   \r
33    switch beton\r
34       case 0\r
35           choix=input('Conserver le graphique par calcul à partir de la forme canonique ? entrez o ou n : ','s');\r
36           if strcmp(choix,'n')\r
37              beton=1;\r
38           end\r
39       case 1\r
40           choix=input('Conserver le graphique par calcul à partir des polynômes de Lagrange ? entrez o ou n : ','s');\r
41           if strcmp(choix,'n')\r
42              beton=2;\r
43           end\r
44    end\r
45    if (n==0) \r
46       X=(a+b)/2;\r
47    else\r
48       X=a:(b-a)/n:b;\r
49    end\r
50    Y=feval(f,X);\r
51    D=diff_div_dist(X,Y);\r
52    ygranewton=eval_horner(xgra,X(1:end-1),D);\r
53    ygralagrange=poly_eval_lagr(xgra,X,Y);\r
54    P=newton_cano(D,X(1:end-1));\r
55    ygracanonique=polyval(P,xgra);   \r
56    clf;\r
57    hold on;\r
58    if (strcmp(choixpoint,'o'))\r
59       switch beton\r
60       case 0\r
61                     plot(X,Y,'go',xgra,ygra,xgra,ygranewton,xgra,ygralagrange,xgra,ygracanonique);\r
62             legend('Points du support','Fonction exacte','Newton','Lagrange','Canonique',0);\r
63          case 1\r
64                     plot(X,Y,'go',xgra,ygra,xgra,ygranewton,xgra,ygralagrange);\r
65             legend('Points du support','Fonction exacte','Newton','Lagrange',0);\r
66          case 2\r
67                     plot(X,Y,'go',xgra,ygra,xgra,ygranewton);\r
68                    legend('Points du support','Fonction exacte','Newton',0);\r
69       end\r
70    else\r
71       switch beton\r
72       case 0\r
73                     plot(xgra,ygra,xgra,ygranewton,xgra,ygralagrange,xgra,ygracanonique);\r
74             legend('Fonction exacte','Newton','Lagrange','Canonique',0);\r
75          case 1\r
76                     plot(xgra,ygra,xgra,ygranewton,xgra,ygralagrange);\r
77             legend('Fonction exacte','Newton','Lagrange',0);\r
78          case 2\r
79                    plot(xgra,ygra,xgra,ygranewton);\r
80                    legend('Fonction exacte','Newton',0);\r
81       end\r
82    end\r
83    if exist(f)==1\r
84       title(['interpolation de la fonction ',formula(f),' avec ',int2str(n+1),' points']);\r
85    else\r
86       title(['interpolation de la fonction ',f,' avec ',int2str(n+1),' points']);\r
87    end\r
88    hold off;\r
89    n=input('pour continuer, entrez un nombre n positif (pour arrêter, le choisir négatif) : ');\r
90 end