suivant: Exercice 19 - Représentation
monter: L'heure du code
précédent: Exercice 17 - Tri
Table des matières
Nous allons étudier la transformée discrète de Fourier et la façon
dont on peut la calculer efficacement. Etant donné un vecteur
, la transformée discrète de Fourier de
est un vecteur
, noté
dont le
-ème élément est
- Commençons par étudier les racines complexes de
. Vous vous
doutez probablement
a deux racines carrées
et
. Vérifiez que
,
et
sont
racines cubiques de
.
- Vérifiez que
,
,
et
sont
racines
quatrièmes de
.
- Vérifiez que
est l'ensemble
des racines
-èmes de
.
- Posons
, véfifiez
que
.
- Prouvez que pour tous
et
,
.
On considère l'algorithme
- Soit
un
polynome de degré
. Que vaut l'algorithme
?
- Quelle est la complexité de
?
- La méthode de Horner est basée sur la relation suivante
. Ecrivez
l'algorithme récursif
qui calcule
en utilisant cette
relation.
- Quelle est la complexité de
?
- Soit
un
polynôme de degré
et
. Montrez que
.
- Comment calculer
en utilisant le sous-programme
?
Ecrivez le sous-programme
.
- On note
la transformée inverse de Fourier, nous admettrons
que si
, alors
Ecrivez le sous-programme
.
- Quelle sont les complexités de
et de
?
- Prouvez que pour tous
et
,
.
- Supposons que
est pair, donc qu'il existe
tel que
. Soit
,
,
et
. Soit
, montrez que
puis que
- Ecrire le sous-programme
qui calcule la transformée discrète
de Fourier d'un vecteur de taille
en utilisant la relation
de récurrence ci-dessus.
- Quelle est la complexité de
?
- Supposons que
est pair, donc qu'il existe
tel que
. Soit
,
,
et
. Soit
et
. Montrez que
puis que
- Ecrire le sous-programme
qui calcule la transformée
inverse de Fourier d'un vecteur de taille
en utilisant la
relation de récurrence ci-dessus.
- Quelle est la complexité de
?
- Ecrivez les fonctions du fichier fourier.c correspondant au
fichier fourier.h ci-dessous.
#ifndef FOURIER_H
#define FOURIER_H
#include"linkedList.h"
#include"complexe.h"
/*
Retourne la transformee discrete de Fourier du vecteur l.
Algorithme iteratif en O(n^2).
*/
linkedList* transformeeFourierIt(linkedList* l);
/*
Retourne la transformee discrete de Fourier inverse
du vecteur l. Algorithme iteratif en O(n^2).
*/
linkedList* transformeeInverseFourierIt(linkedList* l);
/*
Retourne la transformee discrete de Fourier du vecteur l, de taille
n = 2^m. Algorithme recursif en O(n log n).
*/
linkedList* FFT(linkedList* l);
/*
Retourne la transformee discrete de Fourier inverse
du vecteur l de taille n = 2^m. Algorithme recursif en
O(n log n).
*/
linkedList* inverseFFT(linkedList* l);
#endif
fourier.h
Vous utiliserez les fonctions auxiliaires suivantes :
- linkedList* uniteRacinesComplexe(complexe c, unsigned long
n), retourne les n racines n-ème de
.
- complexe horner(link* p, complexe x), retourne
l'image de x par le polynôme p.
suivant: Exercice 19 - Représentation
monter: L'heure du code
précédent: Exercice 17 - Tri
Table des matières
klaus
2010-08-05