Apprendre Maple Séries de Fourier

 
  Page d'accueilPage d'accueil   RechercherRechercher   Forum de discussionForum de discussion   ContactContact   SommaireSommaire 
  Cours MapleCours Maple   Travaux dirigésTravaux dirigés   Thèmes d'activitésThèmes d'activités   Thèmes d'activitésMaplets
Ecran MapleEcran Maple  TéléchargementTéléchargement  BibliographieBibliographie  LiensLiens  

 


 

Page d'accueil   Thèmes d'activités   << Thème précédent   Thème suivant >>


Module sur les séries de Fourier

Corrigé du thème

> restart;

 

f est une fonction périodique de classe C1 par morceaux sur IR, à valeurs dans IR..

 

Paramètres formels passés à la procédure Serie_Fourier:

T : période de f .
subdivision : subdivision de l'intervalle [- T /2 , T /2].
liste_fonction : définition de f sur chacun des intervalles de la subdivision précédente.
t : nom de la variable.

 

Variables locales exportées par le module créé par Serie_Fourier:
periode : T .

pulsation : omega = 2*Pi/T .
a ( n ), b ( n ): coefficients de Fourier réels a[n] et b[n] de f
.

c ( n ): coefficients de Fourier exponentiels c[n] de f .

Harmonique ( n :: nonnegint) : rend le n -ième harmonique proc (t) options operator, arrow; a[0]+Sum(a[k]*cos... .
graphe ( Nmin :: nonnegint, Nmax :: nonnegint, a , b
) :

Nmin , Nmax : ordre minimum et maximum des harmoniques souhaités.
a , b : entier minimum et maximum( ... la valeur -1 correspond à [-3* T /2 , - T /2] , la valeur 0 correspond à [- T /2 , T /2],

la valeur 1 correspond à [ T /2 , 3* T /2] etc ...)
La procédure
graphe représente f et les harmoniques correspondant aux entiers de Nmin à Nmax ,

sur l'intervalle [- T /2+ a * T , T /2+ b * T ]
serieR () : rend la série de Fourier (coefficients réels) de f , définie par proc (t) options operator, arrow; a[0]+Sum(a[k]*cos...
.

serieC () : rend la série de Fourier (coefficients complexes) de f , définie par proc (t) options operator, arrow; Sum(c[k]*exp(I*k*... .

Parseval () : rend l'identité de Parseval , définie par 1/T Int(f(t)^2,t = 0 .. T) = a[0]^2 + 1/2 Sum(a[k]^2+b[k]^2,k = 1 .. infinity)

 

Procédures locales de la procédure Serie_Fourier:

 

integrale ( phi ) : calcule l'intégrale de la fonction proc (t) options operator, arrow; f(t)*phi(t) end p... sur [0, T ] .

 

def : définition de f en une seule formule à partir des intervalles de la subdivision de [- T /2 , T /2]

 


 

Corrigé:

Énoncé du thème

> Serie_Fourier:=proc(T,subdivision::list,liste_fonction::list,t::name)
        

    module()


        description "Ce module comporte des outils sur les séries de Fourier";
        option `Copyright (c) Octobre 2001 A.Le Stang`;
        export periode, pulsation, a, b, c,
                        harmonique, graphe, serieR, serieC, Parseval;
        local p,q,integrale,def;
            periode := T;
            pulsation := 2*Pi/T;
            p:=nops(subdivision);q:=nops(liste_fonction);
            if q<>p-1 or subdivision[1]<>-T/2 or subdivision[p]<>T/2
            then error "Paramètres non conformes" end if;


integrale:=proc(phi)
    local i,s;
    s:=0;
    for i to nops(liste_fonction) do
        s:=s+int(liste_fonction[i](t)*phi(t),t=subdivision[i]..subdivision[i+1]);
    end do;
    s;
end proc;

a:=proc(n)
    local i,cond,T,w;
    T:=periode;
    w:=pulsation;
    i:=1/T*integrale(unapply(cos(n*w*t),t));
    if n=0 then return(i) end if;
    if type(n,name) then
        cond:=cos(n*Pi)=(-1)^n,sin(n*Pi)=0,((-1)^n)^2=1,cos(n*Pi/2)=0:
        factor(subs(cond,2*i));
    else 2*i end if;
end proc;

b:=proc(n)
    local i,cond,T,w;
    T:=periode;
    w:=pulsation;
    i:=2/T*integrale(unapply(sin(n*w*t),t));
    if type(n,name) then
        cond:=cos(n*Pi)=(-1)^n,sin(n*Pi)=0,((-1)^n)^2=1,cos(n*Pi/2)=0:
        factor(subs(cond,i));
    else i end if;
end proc;

c:=proc(n)
    local i,cond,T,w;
    T:=periode;
    w:=pulsation;
    i:=1/T*integrale(unapply(exp(-I*n*w*t),t));
    if n=0 then return(i) end if;
    if type(n,name) then         
        cond:=exp(I*n*Pi)=(-1)^n,exp(-I*Pi*n)=(-1)^n,exp(2*I*n*Pi)=0,((-1)^n)^2=1:             factor(subs(cond,i));
    else i end if;
end proc;

harmonique:=proc(n::nonnegint)
    local sf,k,w;
    w:=pulsation;
    sf:=array(0..n);
    sf[0]:=unapply(a(0),t);
    if n=0 then return sf[0] end if;
    for k from 1 to n do
        sf[k]:=unapply(sf[k-1](t)+a(k)*cos(k*w*t)+b(k)*sin(k*w*t),t);
    end do;
end proc;

def:=proc()
    local i,s;
    s:=0;
    for i to nops(liste_fonction) do  s:=s+(Heaviside(t-subdivision[i])-Heaviside(t-subdivision[i+1]))*liste_fonction[i](t)
    end do;
    s:=unapply(s,t);
end proc;

graphe:=proc(Nmin::nonnegint,Nmax::nonnegint,a, b)
    local i,s,F,CF,CH,T;
    if a>b or Nmin>Nmax then error "Paramètres non conformes" end if;
    T:=periode;
    F:=def();
    s:=0;
    for i from a to b do
        s:=s+F(t-i*T)
    end do;
    F:=unapply(s,t);
    CF:=plot(F(t),t=-T/2+a*T..T/2+b*T,thickness=2,color=black):             
    CH:=plot({seq(harmonique(i)(t),i=Nmin..Nmax)},t=-T/2+a*T..T/2+b*T):
    plots[display]({CF,CH});
end proc;

serieR:=proc()
    local n,w;
    w:=pulsation;     
    unapply(a(0)+Sum(a(n)*cos(n*w*t)+b(n)*sin(n*w*t),n=1..infinity),t);
end proc;

serieC:=proc()
    local n,w;
    w:=pulsation; unapply(Sum(c(n)*exp(I*n*w*t),n=-infinity..infinity),t);
end proc;

Parseval:=proc()
    local i,k,L,T,n;
    T:=periode;
    L:=map(t->t^2,liste_fonction);
    i:=0;
    for k to nops(L) do
        i:=i+int(L[k](t),t=subdivision[k]..subdivision[k+1]);
    end do;
    1/T*i=a(0)^2+1/2*Sum(a(n)^2+b(n)^2,n=1..infinity);
end proc;

end module;


end proc;

Serie_Fourier := proc (T, subdivision::list, liste_...
Serie_Fourier := proc (T, subdivision::list, liste_...
Serie_Fourier := proc (T, subdivision::list, liste_...
Serie_Fourier := proc (T, subdivision::list, liste_...
Serie_Fourier := proc (T, subdivision::list, liste_...
Serie_Fourier := proc (T, subdivision::list, liste_...
Serie_Fourier := proc (T, subdivision::list, liste_...

 

Premier exemple:

> Sf:=Serie_Fourier(2*Pi,[-Pi,0,Pi],[t->-1,t->1],t):

> Sf:-periode;

2*Pi

> Sf:-pulsation;

1

> Sf:-a(0);

0

> Sf:-a(n);

0

> Sf:-b(n);

-2/Pi*(-1+(-1)^n)/n

> Sf:-c(n);

I/Pi*(-1+(-1)^n)/n

> Sf:-harmonique(9);

proc (t) options operator, arrow; 4/Pi*sin(t)+4/3/P...

> Sf:-graphe(1,9,-1,1);

[Maple Plot]

> Sf:-serieR();

proc (t) options operator, arrow; Sum(-2/Pi*(-1+(-1...

> Sf:-serieC();

proc (t) options operator, arrow; Sum(I/Pi*(-1+(-1)...

> Sf:-Parseval();

1 = 1/2*Sum(4/Pi^2*(-1+(-1)^n)^2/n^2,n = 1 .. infin...

 

Deuxième exemple: alpha est un réel non entier.

> Sf:=Serie_Fourier(2*Pi,[-Pi,Pi],[t->cos(alpha*t)],t):

> Sf:-periode;

2*Pi

> Sf:-pulsation;

1

> Sf:-a(0);

1/Pi*sin(Pi*alpha)/alpha

> Sf:-a(n);

-2/Pi*alpha*sin(Pi*alpha)*(-1)^n/(-alpha+n)/(alpha+...

> Sf:-b(n);

0

> Sf:-c(n);

-1/Pi*alpha*sin(Pi*alpha)*(-1)^n/(-alpha+n)/(alpha+...

> Sf:-harmonique(3);

proc (t) options operator, arrow; 1/Pi*sin(Pi*alpha...

La série de Fourier de f coïncide avec f sur [ -Pi, Pi ] :

> cos(alpha*t) = Sf:-serieR()(t);

cos(alpha*t) = 1/Pi*sin(Pi*alpha)/alpha+Sum(2/Pi*al...

> Sf:-serieC()(t);

Sum((-1)^n*alpha*sin(Pi*alpha)/Pi/(alpha-n)/(alpha+...

 

Troisième exemple:

> Sf:=Serie_Fourier(2*Pi,[-Pi,0,Pi],[t->-t*(2*Pi+t),t->t*(2*Pi-t)],t):

> Sf:-periode;

2*Pi

> Sf:-pulsation;

1

> Sf:-a(0);

2/3*Pi^2

> Sf:-a(n);

-4*1/(n^2)

> Sf:-b(n);

0

> Sf:-c(n);

-2*1/(n^2)

> Sf:-harmonique(5);

proc (t) options operator, arrow; 2/3*Pi^2-4*cos(t)...

La série de Fourier de f coïncide avec f sur [ 0, Pi ]:

> t*(2*Pi-t) = expand(Sf:-serieR()(t));

t*(2*Pi-t) = 2/3*Pi^2-4*Sum(1/n^2*cos(n*t),n = 1 .....

> eq:=expand(-1/4*subs(t=0,%)):isolate(eq,op(2,rhs(%)));

Sum(1/(n^2),n = 1 .. infinity) = 1/6*Pi^2

> expand(Sf:-Parseval());

8/15*Pi^4 = 4/9*Pi^4+8*Sum(1/(n^4),n = 1 .. infinit...

> eq:=expand(1/8*%):isolate(eq,op(2,rhs(%)));

Sum(1/(n^4),n = 1 .. infinity) = 1/90*Pi^4

 


Reconstitution d'un signal carré à l'aide de séries de Fourier:

 

 

 

haut de cette page


©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.