]> AND Private Git Repository - cours-mesi.git/blob - tel/TPmatlab/integration/TP3e/deriv_app.m
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
ajout desymboles.sty
[cours-mesi.git] / tel / TPmatlab / integration / TP3e / deriv_app.m
1 function res=deriv_app(k,n,x,y,X)\r
2 % fournit une valeur approchée de dérivée d'ordre k avec un polynome de degré n\r
3\r
4 % variables d'entrée\r
5 % k est un entier naturel qui désigne l'ordre de dérivation demandé\r
6 % n est un entier désignant le degré du polynome d'interpolation utilisé pour\r
7 % la dérivation approchée.\r
8 % Selon la parité de n,\r
9 % f est supposée donnée en x=(x0,...,xn) centrés autour de t,\r
10 % par les valeurs y=(y0,...,yn) via yi=f(xi).\r
11 % X désigne l'indéterminée classique.\r
12\r
13 % variable de sortie\r
14 % le résultat res uniquement défini comme un symbolique.\r
15 \r
16 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
17 %                       Fonctions connexes appelées\r
18 %\r
19 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
20 global d base;\r
21 syms t h real;\r
22 \r
23 % tests d'entrée\r
24 if nargin~=5\r
25     error('Nombre des arguments incorrect');\r
26 end\r
27 \r
28 % effectué en amont... On peut choisir un autre style.\r
29 \r
30 % algorithme proprement dit\r
31 \r
32 \r
33 % calcul du polynome interpolant adapté aux choix effectués\r
34 % et calcul de sa dérivée formelle\r
35 util=d(1:n+1)*(base(1:n+1))';\r
36 deriv=diff(util,'X',k);\r
37 \r
38 % détermination du support centré selon parité de n\r
39 % sachant qu'il y a n+1 points au support.\r
40 if (2*fix(n/2)==n)\r
41     % n est pair\r
42     % détermination du centre parmi les valeurs xi\r
43     c=n/2+1;\r
44     \r
45     % écriture des centres\r
46     xcentre(c)=t;\r
47     for i=n/2:-1:1,\r
48         xcentre(c-i)=t-i*h;xcentre(c+i)=t+i*h;\r
49     end\r
50 else\r
51     % n est impair\r
52     sup=(n+1)/2;\r
53     for i=1:sup,\r
54         xcentre(i)=t-(sup-i+1)*h;xcentre(n+2-i)=t+(sup-i+1)*h;\r
55     end\r
56 end\r
57 \r
58 % valeur approchée de la dérivée en fonction des valeurs centrées\r
59 res1=simple(subs(deriv,x(1:n+1),xcentre));\r
60 \r
61 % sortie des résultats\r
62 disp('Les valeurs considérées en x sont :');\r
63 disp(x(1:n+1));\r
64 disp('soit encore, une fois centrées :');\r
65 disp(xcentre);\r
66 disp('auxquelles correspondent respectivement en f(x):');\r
67 disp(y(1:n+1));\r
68 sor=[];\r
69 if (2*fix(n/2)==n)\r
70     sor=sprintf([sor '=D%df(t=x%d)'],k,c-1);\r
71 end\r
72 ch=sprintf(['La valeur approchée de D%df(t)' sor ' est,'],k);\r
73 disp(ch);\r
74 disp('sous forme classique :');\r
75 pretty(simple(subs(res1,X,t)));\r
76 res=simple(subs(res1,X,t));\r
77 \r
78 \r
79 \r
80 \r
81 \r