3
On peut démontrer que ce produit de convolution est compatible avec DF Tω, c’est-
à-dire que
DF Tω(f∗g) = DF Tω(f)·DF Tω(g),
où le produit ·sur Cnest effectué composante par composante. En fait, DF Tωdéfinit un
isomorphisme d’algèbres de (Cn,+,∗n)dans (Cn,+,·). La matrice de cet isomorphisme
est la matrice de Vandermonde Vωde (1,ω,...,ωn−1)
Vω=
1 1 1 . . . 1
1ω ω2. . . ωn−1
1ω2ω4. . . ω2(n−1)
.
.
..
.
..
.
.....
.
.
1ωn−1ω2(n−1) . . . ω(n−1)2
.
Comme 1,ω, . . . , ωn−1sont deux à deux distincts, la matrice Vωest inversible. Son
inverse donne la matrice permettant de calculer le polynôme d’interpolation en les points
1,ω, . . . , ωn−1, c’est-à-dire, les valeurs aiétant fixées pour i∈ {0,...n−1}, de calculer
l’unique polynôme fde degré inférieur ou égal à n−1tel que f(ωi) = aipour tout i.
Le théorème suivant donne l’inverse de Vω.
Théorème 3.2. Si ω∈Cest une racine primitive nème de l’unité, alors ω−1est aussi
une racine primitive n-ème de l’unité et VωVω−1=nId, où Id est la matrice identité de
taille n.
Revenons à notre problème, qui est de multiplier deux polynômes Fet G. On suppose
que deg(F G)6n−1. La transformée de Fourier discrète revient à évaluer Fet Gsur
npoints, ce qui suffit pour les définir. Dans cette représentation, la multiplication est
rapide à calculer, puisque pour tout idans {0. . . n −1},F G(ωi) = F(ωi)G(ωi). Cela
nous ramène à nmultiplications dans C. Ensuite, comme on connaît le produit F G sur
npoints, et comme deg(F G)6n−1, on peut reconstituer F G. Ici, on peut utiliser
l’application inverse de DF Tω, c’est-à-dire 1
nDF Tω−1.
Voyons maintenant comment calculer rapidement la transformée de Fourier discrète.
On peut utiliser pour cela l’algorithme transformée de Fourier rapide, ou FFT.
On suppose que n= 2k, où n∈N. Pour évaluer Fen 1, . . . , ωn−1, on divise d’abord
Fpar xn/2−1et xn/2+ 1 :
F=q0(xn/2−1) + r0=q1(xn/2+ 1) + r1,
pour q0,r0,q1,r1dans C[x]de degré inférieur strictement à n/2. Nous n’avons besoin
que de calculer r0et r1. Pour cela, on remarque que si F=F1xn/2+F0, alors xn/2−1
divise F−F0−F1, et donc r0=F0+F1. De même, r1=F0−F1. On n’a donc besoin
que de nopérations dans Cpour le calcul de r0et de r1. De plus,
F(ω2l) = r0(ω2l)et F(ω2l+1) = r1(ω2l+1)
pour tout l∈ {0, . . . , n/2}. Il reste à évaluer r0en les puissances paires de ωet r1en
les puissances impaires de ω. Or, ω2est une racine primitive (n/2)ème de l’unité. Soit