1 function [points,poids]=points_poids_gauss_diago(c,n)
\r
3 % points_poids_gauss_diago : calcul des poids et des points de Gauss par diagonalisation
\r
5 % *********************************************************
\r
7 % [points,poids]=points_poids_gauss_diago(c,n) renvoie les points D_i et les points x_i
\r
8 % des formules d'intégration à l+1 points pour 0<=l<=n, pour
\r
9 % l'une des quatre méthodes : Legendre, Tchebytchev, Hermite ou Laguerre,
\r
10 % calculés par diagonalisation d'une matrice tridiagonale.
\r
12 % variables d'entrées :
\r
13 % * n : entier naturel.
\r
14 % * c définit la méthode :
\r
15 % c=1 : méthode de Gauss-Legendre,
\r
16 % c=2 : méthode de Gauss-Tchebychev,
\r
17 % c=3 : méthode de Gauss-Hermite,
\r
18 % c=4 : méthode de Gauss-Laguerre;
\r
20 % variables de sortie
\r
21 % * points : tableau de taille (n+1)*(n+1) tel que
\r
22 % pour tout l dans {0,...,n}, points(l+1,1:l+1) contient
\r
23 % les l+1 points x_i de la formule (à l+1 points)
\r
24 % * poids : tableau de taille (n+1)*(n+1) tel que
\r
25 % pour tout l dans {0,...,n}, poids(l+1,1:l+1) contient
\r
26 % les l+1 poids D_i de la formule (à l+1 points)
\r
30 % ************ Fonctions auxiliaires utilisées ************
\r
34 % *********************************************************
\r
37 % Contrôles d'entrée
\r
38 % nombre d'arguments
\r
40 error('nombre d''arguments de la fonction incorrect');
\r
42 % autres tests éventuels
\r
43 if (fix(n)~=n) | (n<0)
\r
44 error('l''entier n doit être un entier naturel');
\r
47 % Corps d'algorithme.
\r
48 points=zeros(n+1,n+1);
\r
49 poids=zeros(n+1,n+1);
\r
59 poids(1,1)=sqrt(pi);
\r
73 gamma=1./(2*sqrt(1-1./(4*(1:k).^2)));
\r
75 gamma=[1/sqrt(2) ones(1,k-1)/2];
\r
77 gamma=sqrt((1:k)/2);
\r
81 auxi=gallery('tridiag',gamma,B,gamma);
\r
83 [Q,R]=eigs(auxi,k+1);
\r
85 [Q,R]=eig(full(auxi));
\r
88 U=(sqrt(sum(Q.^2)));
\r
99 Q=auxik*(Q(1,:)./U).^2;
\r
100 [auxipoints,ind]=sort((flipud(R))');
\r
102 auxipoids=auxi(ind);
\r
106 auxi=(auxipoints(p+2:k+1)-auxipoints(p:-1:1))/2;
\r
107 auxipoints(p+2:k+1)=auxi;
\r
108 auxipoints(1:p)=-fliplr(auxi);
\r
110 auxi=(auxipoids(p+2:k+1)+auxipoids(p:-1:1))/2;
\r
111 auxipoids(p+2:k+1)=auxi;
\r
112 auxipoids(1:p)=fliplr(auxi);
\r
114 auxi=(auxipoints(p+2:k+1)-auxipoints(p+1:-1:1))/2;
\r
115 auxipoints(p+2:k+1)=auxi;
\r
116 auxipoints(1:p+1)=-fliplr(auxi);
\r
117 auxi=(auxipoids(p+2:k+1)+auxipoids(p+1:-1:1))/2;
\r
118 auxipoids(p+2:k+1)=auxi;
\r
119 auxipoids(1:p+1)=fliplr(auxi);
\r
122 points(k+1,1:k+1)=auxipoints;
\r
123 poids(k+1,1:k+1)=auxipoids;
\r