• Aucun résultat trouvé

SOLUTIONS ET PROGRAMMES Solution de l’exercice 5.1

Dans le document PAR LA PRATIQUE (Page 132-138)

d’une équation différentielle

5.6 SOLUTIONS ET PROGRAMMES Solution de l’exercice 5.1

−∞ ex2f(x)dx= n

i=1

vif(xi) +Rn (5.14) les xi sont les zéros des polynômes de Hermite et les poids vi sont donnés par la formule

vi= 2n−1n!√ p (nHn−1(xi))2. Le reste est

Rn= n!√ p

2n(2n)!f(2n)(j).

On utilisera cette fois les polynômes de Hermite définis par



H0(x) = 1, H1(x) = 2x,

2xHn(x) =Hn+1(x) + 2nHn1(x).

En ce qui concerne l’application des méthodes spectrales à la résolution des EDPs.

On peut penser à généraliser l’exemple étudié dans ce projet dans une dimension plus élevée. En dimension 2 ou 3, les méthodes spectrales restent caractérisées par l’approximation par des polynômes de haut degré et cette fois-ci par l’utilisation de bases tensorisées de polynômes. Elles sont de haute précision et s’avèrent très ef-ficaces dans des géométries simples, parallélépipèdes ou cylindres par exemple. La discrétisation des équations de Laplace dans un carré ou un cube est entièrement détaillée, dans l’ouvrage très récent de [Bernardi, Maday et Rapetti, 2004], avec plu-sieurs types de conditions aux limites possibles (Dirichlet, Neumann et mixtes). Des problèmes détaillés sont aussi proposés à la fin de cet ouvrage, pouvant constituer des extensions du cas traité ici : la discrétisation spectrale du problème de Dirichlet dans un domaine axisymétrique et la discrétisation spectrale de l’équation de la chaleur en une dimension d’espace.

5.6 SOLUTIONS ET PROGRAMMES

Solution de l’exercice 5.1

Le calcul de la combinaison linéaire (5.5) est fait dans la fonctionCombLinLeg.m.

Pour évaluer dans un tableaupolles valeurs du polynômes de Legendre de degré p aux pointsx1, . . . ,xn, ce n’est pas la peine de stocker les valeurs de tous les po-lynômes de degré inférieur àp : seuls les degrés p−1 etp 2 intervenant dans la relation de récurrence (5.2) doivent être conservés, dans deux tableauxpol1 et pol2. Les valeurs de la combinaison linéaire sont stockées dans un tableauyauquel on ajoute les termescipi(x) au fur et à mesure de leur calcul.

La représentation graphique de L0 2L1+ 3L5 sur l’intervalle [1,1] est faite dans le scriptPlotPolLeg.m. On passe en argument à la fonctionCombLinLeg le tableau [0;2; 0; 0; 0; 3] des coefficients de cette combinaison, ainsi que le tableau des pointsxi=−1 + (i−1)/250 pouri= 1, . . . ,501 des points où on veut représenter cette fonction. On obtient le graphe de la figure 5.1.

Il existe une fonction MATLAB , de syntaxe d’appelL=legendre(n,x) qui renvoie un tableau L den+ 1 lignes, dont lam+ 1-ième ligne contient les valeurs de la fonction de LegendreLmn définie par

Lmn(x) = (1)m(1−x2)m/2dm

dxmLn(x), (5.15)

aux points spécifiés dans le vecteurx. Donc on peut calculer les valeurs du polynôme de Legendre avec cette fonction, en n’utilisant que la première ligne du tableau ren-voyé en sortie. Une autre méthode d’évaluation de la combinaison linéaire consiste alors à appeler la fonction legendrepour tous les degrés de 0 à p, à extraire la première ligne de l’argument renvoyé et à le multiplier par le coefficient de la com-binaison linéaire correspondant.

Le scriptPlotPolLegcompare aussi les temps de calcul des deux méthodes, en appellant la fonction ticavant l’appel de CombLinLeget la fonctiontocjuste après. La valeur renvoyée partoccontient le temps d’exécution. On refait la même chose avant et après le groupe de commandes pour la méthode utilisantlegendre.

Pour que les temps de calculs soient significatifs, il vaut mieux augmenter le nombre de points de calcul à 500 points sur l’intervalle [1,1] ainsi que le degré de la com-binaison linéaire à 50. Le rapport entre les temps de calcul, alors supérieur à 100, est incontestablement en faveur du scriptCombLinLeg.m, l’utilisation de la fonction legendredans ce contexte impliquant une grande quantité de calculs inutiles ou bien redondants.

Solution de l’exercice 5.2

Le calcul des abscisses et poids d’intégration de Gauss se fait dans la fonction xw-Gauss.m. Les abscisses sont les valeurs propres de la matriceM, on construit donc cette dernière et on utilise la fonction MATLAB eigpour obtenir son spectre.

Une fois les poids et abscisses calculés dans deux vecteurs colonnes xet w, la formule de quadrature (5.7) se programme à l’aide d’une seule instruction en MAT-LAB , consistant à faire le produit scalaire du vecteurwavec le vecteur des valeurs de la fonction à intégrer aux abscissesx.

I=w’*f(x) ;

Le script TestIntGauss.m teste la formule de quadrature sur une fonction régulière, ici la fonctionex, et compare également cette méthode d’intégration avec la méthode proposée par MATLAB , programmée dans la fonctionquad. La syntaxe d’appel est la suivante :

q = quad(@fun,a,b)

5.6 Solutions et programmes 121

Cette commande renvoie une valeur de l’intégrale de la fonction définie dansfun.m entre les bornesaetbapprochée à 106près. L’algorithme utilisé est une variante adaptative de la méthode de Simpson. On peut préciser la précision souhaitée en quatrième argument d’entrée :

q = quad(@fun,a,b,preci)

On peut également récupérer en sortie le nombre d’appels à la fonction définissant l’intégrande :

[q,nb] = quad(@fun,a,b,preci)

Pour comparer les performances de la méthode d’intégration dequadavec la mé-thode de Gauss du point de vue temps de calcul, on choisit un nombre de points suffisant pour que la quadrature de Gauss donne la valeur de l’intégrale exacte avec six chiffres significatifs : quatre points suffisent pour la fonctionex par exemple, et on mesure les temps de calculs respectifs des deux méthodes pour évaluer un grand nombre de fois la même intégrale, à l’aide des fonctionsticettoccomme dans l’exercice précédent. La méthode de Simpson étant moins précise que la méthode de Gauss de degré 4, elle nécessite plus d’évaluations de l’intégrande pour obtenir la même précision et est donc plus lente. Dans la suite du projet, où on doit faire un grand nombre d’évaluations d’intégrales, il est donc avantageux d’utiliser la quadra-ture de Gauss.

Solution de l’exercice 5.3

La comparaison de la fonction avec sa série pour obtenir les figures 5.2 et 5.5 est faite dans le script MATLAB AppSerLeg.m.

Ce script fait appel à la fonctionCalcSerLeg, qui reçoit en arguments d’entrée – s: le degré de la quadrature de Gauss utilisée pour évaluer les coefficients 5.9, – P: le degré de la série,

– npt: le nombre de points de l’intervalle [1,1] où on évalue la série,

– Test: le nom de la fonction dont on calcule la série, qui doit être définieinline ou bien dans unm-fileavec la déclarationy=test(x).

La fonction renvoie en sortie – xlesnptabscisses,

– yles valeurs de la série aux abcissesx,

– errl’erreur en norme sup entre la fonction et sa série, évaluée sur les valeurs aux abscissesx.

Cette fonction est aussi utilisée dans le scriptBoucleSerLeg.mpour répondre à la question 5 de l’exercice, illustrée par les figures 5.3 et 5.4. Pour différents degrés, ici compris entre 2 et 30 par pas de 2, on évalue la série de Legendre d’une fonction test et l’erreur en norme sup avec la fonction elle-même. On représente ensuite cette er-reur en fonction du degré. Pour une fonction régulière, on s’attend à une convergence

exponentielle, ce que l’on retrouve numériquement pour f(x) = sin(6x) exp(−x).

Pour des fonctions moins régulières, comme par exemple f(x) = abs(x), l’erreur diminue proportionnellement à 1/P. Enfin pour une fonction discontinue, comme f(x) = signe(x), l’erreur ne tend pas vers 0 quand le degré de la série augmente, en raison du phénomène de Gibbs (voir figure 5.5).

Solution de l’exercice 5.4

On choisit comme cas test la fonctionu(x) = sin(px) cos(10x) qui vérifie les condi-tions aux limites u(−1) = u(1) = 0, et on la programme dans speciale.m En prenant comme second membre

f(x) = (p2+ 130) sin(px) cos(10x) + 20pcos(px) sin(10x)

et la constante c = 30, la fonction u est solution du problème (5.1). Le second membre est programmé dans le M-filefbe.men utilisant la dérivée seconde de la fonction solution, elle-même programmée dansspecsec.m. Le script ci-dessous permet d’enchaîner les différentes étapes du calcul et finalement de comparer la so-lution calculée par la méthode spectrale avec la soso-lution par différences finies.

Listing 5.1MethSpec.m

m=16 ; % degré de l’approximation par Legendre

s=m+1 ; % degré de la quadrature de Gauss pour le second membre.

global c c=30. ;

% Construction de la matrice A=zeros(m,m) ;

for i=1:m

A(i,i)=(i*(i+1))^2*(1./(0.5+i)+ 4.*c/((2.*i+1.)*(2*i-1)*(2*i+3))) ; end

for i=1:m-2

A(i,i+2)=-2*c*i*(i+1)*(i+2)*(i+3)/((2*i+1)*(2*i+3)*(2*i+5)) ; end

for i=3:m

A(i,i-2)=-2*c*i*(i+1)*(i-2)*(i-1)/((2*i-1)*(2*i-3)*(2*i+1)) ; end

% Construction du second membre [absc,poids]=xwGauss(s) ;

t=fbe(absc) ; u=t.*poids ; LX0=ones(s,1) ;

LX1=absc ; C=zeros(m+2,1) ;

C(1)=t’*poids/2 ; C(2)=3*u’*LX1/2 ; for k=2:m+1

% calcul de fk dans c(k+1)

% calcul des valeurs de Lk aux points d’ intégration

% kLk=(2k-1)xLk1 -(k-1)Lk2

LX2=((2*k-1)*absc.*LX1-(k-1)*LX0)/k ;

5.6 Solutions et programmes 123

C(k+1)=(2*k+1)*u’*LX2/2 ; LX0=LX1 ;

LX1=LX2 ; end

B=zeros(m,1) ; for i=1:m

B(i)=2*i*(i+1)*(C(i)/(2*i-1)-C(i+2)/(2*i+3))/(2*i+1) ; end

% Résolution du système linéaire U=A\B ;

%

% Changement de base

% (1-x2)Li’=(i(i+1)/(2i+1)).(Li1 - Li+1) UN=zeros(1,m+2) ;

for k=1:m

CC=(k+1)*k*U(k)/(2*k+1) ; UN(k)=UN(k)+CC ;

UN(k+2)=UN(k+2)-CC ; end

%

% Calcul de la solution approchée et de l’erreur

% n=100 ;

xa=linspace(-1,1,n) ; y=CombLinLeg(xa,UN) ;

es=norm(y-speciale(xa),inf) ;

%

% Calcul de la solution différences finies

%

mdf=50 ; h=2/mdf ;

xdf=linspace(-1+h,1-h,mdf-1)’ ;

A=toeplitz([2,-1,zeros(1,mdf-3)])/h^2+c*eye(mdf-1,mdf-1) ; B=fbe(xdf) ; ydf=A\B ;

%

% Représentation graphique

%

plot (xa,speciale(xa),xa,y,’-’,xdf,ydf,’x’) legend(’exacte’,’spectrale’,’diff. finies’)

fprintf(’erreur spectrale= %e diff. finies= %e\n ’,...

es,norm(ydf-speciale(xdf),inf)) ;

Il est clair sur la figure (5.6) obtenue en faisant tourner le scriptMethSpec.m que la méthode spectrale est beaucoup plus précise que la méthode des différences finies puisque la solution approchée dans P021 se confond avec la solution exacte.

L’erreur en norme sup est 5.10−5 alors qu’elle est égale à 6.10−2 pour la solution différences finies. Il faut faire le calcul aux différence finies sur environ 800 points pour arriver à une erreur en norme infinie aussi petite qu’avec la méthode spectrale.

En revanche, dès que la solution du problème continu n’est pasC, les performances

de la méthode spectrale en terme de précision chutent et deviennent comparables -voire inférieure, à celles des différences finies. Le lecteur pourra vérifier ce point en calculant le second membref de l’équation (5.1) de manière à ce que la dérivée seconde de la solution exacte soit constante par morceaux.

−1 −0.5 0 0.5 1

−1

−0.5 0 0.5 1 1.5

exacte spectrale diff. finies

Figure 5.6 Comparaison de la solution exacte, la solution spectrale dansP021et de la solution différences finies avec 20 inconnues.

BIBLIOGRAPHIE

[Delabrière et Postel, 2004] S. DELABRIÈRE, M. POSTELMéthodes d’Approxima-tion. Équations Différentielles. Applications Scilab.Ellipses, Paris (2004).

[Crouzeix et Mignot, 1989] M. CROUZEIX, A.L. MIGNOT Analyse numérique des équations différentielles.Masson, Paris, 1984.

[Bernardi, Maday et Rapetti, 2004] C. BERNARDI, Y. MADAY, F. RAPETTI Discré-tisations variationnelles de problèmes aux limites elliptiquesMathématiques

& Applications, Vol. 45, Springer-Verlag, Mai 2004

Projet 6

Traitement du signal :

Dans le document PAR LA PRATIQUE (Page 132-138)