Accueil ⇒ Mathématiques ⇒ Maple ⇒ Séries de Fourier avec Maple

Séries de Fourier avec Maple

Introduction

Au cours de ce bref article, nous allons approximer deux fonctions classiques, respectivement un signal triangulaire et un créneau, sous forme de somme de cosinus. On n'explicitera pas la théorie de Fourier qui appuie les résultats : l'intéret ici est de considérer plusieurs approches pour afficher les approximations successives, d'abord sous forme de graphe statique, puis sous forme animée.

restart: 
with(plots):

Définition des coefficients

On commence par définir dans un tableau les coefficients des séries de cosinus : a pour la fonction triangulaire et b pour le créneau.

a := array(0..50): 
b := array(0..50): 
for i from 0 to 50 do 
   a[i] := 4 / (((2*i+1)^2)*(Pi^2)); 
   b[i] := (-1)^i * 4 / ((2*i+1)*Pi); 
od:

Approximation avec une procédure

La fonction que l'on cherche à obtenir pour le triangle est la suivante :

\large f(t)\,=\,{1 \over 2}\,+\,\sum_{k=0}^n{a_kcos((2k+1)t)}

Une première idée pour la représenter est d'écrire une procédure qui calcule la valeur en t, puis apple la fonction plot directement, comme suit :

triangle := proc(n,couleur,afficher) 
    local i, s; 
    global a, b, f; 
    s := 1/2; 
    for i from 0 to n do 
        s := s + a[i] * cos(t * (2*i+1)); 
    od: 
    f[n] := s; 
    if (evalb(afficher)) then 
        plot(s,t=-2*Pi..2*Pi, color=couleur); 
    fi; 
end:

L'affichage du résultat pour la somme des 42 premiers coefficients se résume alors à :

triangle(42,red,true);
Une approximation du signal triangulaire

Animation de la construction

Cependant, l'expression sous forme de somme peut tout aussi bien s'écrire avec l'instruction sum de Maple. On peut donc définir une fonction fa(t,n) qui calcule la somme des n premiers termes :

f_a := (t,n) -> 1/2 + sum(a[k] * cos(t * (2*k+1)), k=0..n):

L'avantage de cette écriture est qu'elle permet l'utilisation de la procédure animate du logiciel. Cette dernière s'utilise comme plot, si ce n'est que l'on précise les intervalles des deux variables (ainsi qu'une éventuelle fréquence d'affichage) :

animate(f_a(t,n), t=(-2*Pi)..(+2*Pi), n=1..50, frames=100, color=blue);
Animation du processus d'approximation du signal triangulaire

On peut alors procéder de même pour le signal créneau :

f_b := (t,n) -> 1/2 + sum(b[k] * cos(t * (2*k+1)), k=0..n):
animate(f_b(t,n), t=(-2*Pi)..(+2*Pi), n=1..50, frames=50, color=red);
Animation du processus d'approximation du créneau

Conclusion

Bien que la première approche soit souvent plus instinctive pour un programmeur, la dernière expression est beaucoup plus concise, tout aussi efficiente, et permet l'utilisation de nouvelles instructions Maple sympathiques tels que les graphes animés.

Annexes