92
3 Approximation de fonctions et de données
Avec (3.22), on en déduit les expressions suivantes des coefficients de ˜
f
c k =
1
n + 1
n
j=0
f(x j )e
−ikjh , k = −(M + μ), . . . , M + μ
(3.23)
On déduit de (3.23) que, si f est une fonction à valeurs réelles, alors
c −k = c k , pour k = −(M + μ), . . . , M + μ (puisque e
ikjh = e −ikjh ),
c’est-à-dire a k , b k ∈ R (pour k = 0, . . ., M + μ), et donc ˜
f est aussi une
fonction à valeurs réelles.
Le calcul de tous les coefficients {c k } peut être effectué en un nombre
d’opérations de l’ordre de n log 2 n en utilisant la transformation de Fourier rapide (FFT pour Fast Fourier Transform), qui est implémentée
dans le programme fft de MATLAB (voir Exemple 3.6). La transforfft
mation de Fourier inverse, par laquelle on obtient les valeurs {f(x j )} à
partir des coefficients {c k }, possède des caractéristiques analogues. Elle
est implémentée dans le programme ifft de MATLAB.
ifft
Exemple 3.6 Considérons la fonction f (x) = x(x − 2π)e
−x pour x ∈ [0, 2π].
Afin d’utiliser le programme fft de MATLAB, on commence par calculer les
valeurs de f aux noeuds xj = jπ/5 pour j = 0, . . . , 9 à l’aide des instructions
suivantes (on rappelle que .* permet de multiplier deux vecteurs composante
par composante) :
n =9; x =2* pi /(n +1)*[0: n ]; y =x .*(x -2* pi ).* exp ( -x );
On calcule alors par FFT le vecteur des coefficients de Fourier :
Y = fft (y );
C = fftshift ( Y )/( n +1)
C =
Columns 1 through 2
0.0870
0.0926 - 0.0214i
Columns 3 through 4
0.1098 - 0.0601i
0.1268 - 0.1621i
Columns 5 through 6
-0.0467 - 0.4200i -0.6520
Columns 7 through 8
-0.0467 + 0.4200i
0.1268 + 0.1621i
Columns 9 through 10
0.1098 + 0.0601i
0.0926 + 0.0214i
Les éléments de Y sont reliés aux coefficients ck définis dans (3.23) par la
relation suivante : Y= (n + 1)[c0, . . . , cM , c −(M +μ) , . . . , c−1]. Quand n est impair, le coefficient c (M +1) (qui coïncide avec c −(M +1) ) est négligé. La commande fftshift trie les éléments du tableau d’entrée, de sorte que C=
fftshift
[c −(M +μ) , . . . , c−1, c0, . . . , cM ]. Noter que le programme ifft est plus efficace
quand n est une puissance 2, même s’il fonctionne pour toute valeur de n.
3 Approximation de fonctions et de données
Avec (3.22), on en déduit les expressions suivantes des coefficients de ˜
f
c k =
1
n + 1
n
j=0
f(x j )e
−ikjh , k = −(M + μ), . . . , M + μ
(3.23)
On déduit de (3.23) que, si f est une fonction à valeurs réelles, alors
c −k = c k , pour k = −(M + μ), . . . , M + μ (puisque e
ikjh = e −ikjh ),
c’est-à-dire a k , b k ∈ R (pour k = 0, . . ., M + μ), et donc ˜
f est aussi une
fonction à valeurs réelles.
Le calcul de tous les coefficients {c k } peut être effectué en un nombre
d’opérations de l’ordre de n log 2 n en utilisant la transformation de Fourier rapide (FFT pour Fast Fourier Transform), qui est implémentée
dans le programme fft de MATLAB (voir Exemple 3.6). La transforfft
mation de Fourier inverse, par laquelle on obtient les valeurs {f(x j )} à
partir des coefficients {c k }, possède des caractéristiques analogues. Elle
est implémentée dans le programme ifft de MATLAB.
ifft
Exemple 3.6 Considérons la fonction f (x) = x(x − 2π)e
−x pour x ∈ [0, 2π].
Afin d’utiliser le programme fft de MATLAB, on commence par calculer les
valeurs de f aux noeuds xj = jπ/5 pour j = 0, . . . , 9 à l’aide des instructions
suivantes (on rappelle que .* permet de multiplier deux vecteurs composante
par composante) :
n =9; x =2* pi /(n +1)*[0: n ]; y =x .*(x -2* pi ).* exp ( -x );
On calcule alors par FFT le vecteur des coefficients de Fourier :
Y = fft (y );
C = fftshift ( Y )/( n +1)
C =
Columns 1 through 2
0.0870
0.0926 - 0.0214i
Columns 3 through 4
0.1098 - 0.0601i
0.1268 - 0.1621i
Columns 5 through 6
-0.0467 - 0.4200i -0.6520
Columns 7 through 8
-0.0467 + 0.4200i
0.1268 + 0.1621i
Columns 9 through 10
0.1098 + 0.0601i
0.0926 + 0.0214i
Les éléments de Y sont reliés aux coefficients ck définis dans (3.23) par la
relation suivante : Y= (n + 1)[c0, . . . , cM , c −(M +μ) , . . . , c−1]. Quand n est impair, le coefficient c (M +1) (qui coïncide avec c −(M +1) ) est négligé. La commande fftshift trie les éléments du tableau d’entrée, de sorte que C=
fftshift
[c −(M +μ) , . . . , c−1, c0, . . . , cM ]. Noter que le programme ifft est plus efficace
quand n est une puissance 2, même s’il fonctionne pour toute valeur de n.
