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

Private GIT Repository
init
[cours-mesi.git] / tel / TPmatlab / interpolation / TP2f / verifie_diff_div_symb.m
1 function res=verifie_diff_div_symb(X,Y) \r
2 \r
3 % verifie_diff_div_symb : verification pour le calcul du polynôme interpol. support quelconque en symbolique\r
4 %\r
5 %\r
6 % *********************************************************\r
7 %\r
8 % res=verifie_diff_div_symb(X,Y)        \r
9 %     vérification du calcul du polynôme d'interpolation défini par le nuage de point X,Y\r
10 %     pour support quelconque où X et Y sont des vecteurs symboliques.\r
11 % Vérification en formel.\r
12 %\r
13 %\r
14 %       variables d'entrées : \r
15 %     * X : contient les valeurs x_i, pour 0 <=i<=n (dans l'ordre croissant)\r
16 %     * Y : contient les valeurs f^(r)(x_i), pour 0 <=i<=n, de telle sorte que :\r
17 %             si x_k est multiple avec x_{k-1}~=x_k=x_{k+1}=...=x_{k+r}~=x_{k+r+1} alors\r
18 %                y_k=f(x_k), y_{k+1}=f'(x_k), ..., y_{k+r}=f^(r)(x_k).\r
19 %\r
20 %       variables de sortie\r
21 %     * res : contient le maximum des valeur absolue de \r
22 %               n-p où p est le degré du polynôme d'interpolation p_n\r
23 %                   et n+1 est le nombre de points.\r
24 %               maximum sur i dans {0,...,n} maximum sur l dans alpha_i-1\r
25 %               de la quantitée p_n^(l)(x_i)-f^(l)(x_i) (dérivée l fois) où alpha_i est \r
26 %               le nombre d'éléments du n=1-uplet(x_0,...,x_n) égaux à x_i.\r
27 %\r
28 % Le calcul est correct si et seulement si res est nul\r
29 %    et incorrect si res est egal à un \r
30 %\r
31 %\r
32\r
33 % ************ Fonctions auxiliaires utilisées ************\r
34 %\r
35 %     diff_div, eval_horner, val_derivee_multiple \r
36 %\r
37 % *********************************************************\r
38 \r
39 D=diff_div(X,Y);\r
40 syms x;\r
41 R=eval_horner(x,X(1:end-1),D);\r
42 er=0;\r
43 i=0;\r
44 n=length(X)-1;\r
45 while (i<=n)\r
46    [alpha,valfder]=val_derivee_multiple(i,X,Y);\r
47    Q=R;\r
48    erloc=~(simplify(subs(R,'x',X(i+1)))==valfder(1));\r
49    er=max(er,erloc);\r
50    for l=1:alpha-1\r
51       Q=diff(Q);\r
52       erloc=~(simplify(subs(Q,'x',X(i+1)))==valfder(l+1));\r
53       er=max(er,erloc);   \r
54    end\r
55    i=i+alpha;\r
56 end\r
57 res=er;