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

Private GIT Repository
j
[cours-mesi.git] / tel / TPmatlab / integration / TP3i / verifie_nullite_gauss.m
1 function [eta1,eta2]=verifie_nullite_gauss(c,n)\r
2 \r
3 \r
4 %       verifie_nullite_gauss : calcul de l'orthogonalité et de la normalisation des polynômes calculés numériquement\r
5 %\r
6 % *********************************************************\r
7 %\r
8 %       [eta1,eta2]=verifie_nullite_gauss(c,n) : \r
9 %        vérifie numériquement que les polynômes de Gauss P_0, ..., P_n\r
10 %        sont orthogonaux avec la condition de normalité :\r
11 %            P_r(1)=1 pour Legendre et Tchebytchev\r
12 %            P_r(0)=1 pour Laguerre\r
13 %            le coefficient domimant de P_r est 2^{r} pour Hermite\r
14 %\r
15 %       variables d'entrées : \r
16 %    *  n : entier naturel.\r
17 %     * c définit la méthode : \r
18 %            c=1 : Gauss-Legendre,\r
19 %            c=2 : Gauss-Tchebytchev,\r
20 %            c=3 : Gauss-Hermite,\r
21 %            c=4 : Gauss-Laguerre.\r
22 %       variables de sortie\r
23 %   *   eta1= max_{0<=r<=n} |P_r(1)-1| pour Legendre et Tchebychev\r
24 %       eta1= max_{0<=r<=n} |P_r(0)-1| pour Laguerre\r
25 %       eta1= max_{0<=r<=n} |2^r-coefficient dominant(P_r)|=0 pour Hermite\r
26 %          et \r
27 %       eta2=max_{0<=r,s<=n, r~=s}|<P_r,P_s>|\r
28 %              (calculé par intégration en symbolique)\r
29 %\r
30 %   eta1 et eta2 doivent être nuls.\r
31 %\r
32\r
33 % ************ Fonctions auxiliaires utilisées ************\r
34 %\r
35 %    calcul_poly_gauss\r
36 %\r
37 % *********************************************************\r
38 \r
39 \r
40 % Contrôles d'entrée\r
41 % nombre d'arguments\r
42 if nargin~=2\r
43    error('nombre d''arguments de la fonction incorrect');\r
44 end\r
45 % autres tests éventuels \r
46 if (fix(n)~=n) | (n<0)\r
47    error('l''entier n doit être un entier naturel');\r
48 end\r
49 if ~((c==1) | (c==2) | (c==3) | (c==4))\r
50    error('c doit être un entier égal à 1, 2, 3 ou 4');\r
51 end\r
52 \r
53 % Corps d'algorithme.\r
54 P=calcul_poly_gauss(c,n);\r
55 ermax=0;\r
56 if (c==1) | (c==2)\r
57    for r=0:n\r
58       er=abs(polyval(P(r+1,1:r+1),1)-1);\r
59       ermax=max(er,ermax);\r
60    end\r
61 end\r
62 if (c==3)\r
63    for r=0:n\r
64       er=abs(P(r+1,1)-2^r);\r
65       ermax=max(er,ermax);\r
66    end\r
67 end\r
68 if (c==4) \r
69    for r=0:n\r
70       er=abs(polyval(P(r+1,1:r+1),0)-1);\r
71       ermax=max(er,ermax);\r
72    end\r
73 end\r
74 eta1=ermax;\r
75 syms x a b;\r
76 switch c\r
77    case 1\r
78       a=sym(-1);\r
79       b=sym(1);\r
80       w=sym(1);      \r
81    case 2\r
82       a=sym(-1);\r
83       b=sym(1);\r
84       w=1/sqrt(1-x^2);      \r
85    case 3\r
86       a=-sym(inf);\r
87       b=sym(inf);\r
88       w=exp(-x^2);\r
89    case 4\r
90       a=sym(0);\r
91       b=sym(+inf);\r
92       w=exp(-x);\r
93 end     \r
94 ermax=0;\r
95 for r=0:n\r
96    for s=0:r-1\r
97       R=conv(P(r+1,1:r+1),P(s+1,1:s+1));\r
98       f=poly2sym(R);\r
99       er=double(abs(simplify(int(f*w,a,b))));\r
100       ermax=max(er,ermax);\r
101    end\r
102 end\r
103 eta2=ermax;\r