> restart:

> with(pldx): kernelopts(ASSERT=true):

`pldx  ;  author : <douillet@ensait.fr>  ;  last mo...

La dent de scie

> x:= t->t;
X:= t-> t-floor((t+Pi)/2/Pi)*Pi*2;

> plot(X(t),t=-10..10);

x := proc (t) options operator, arrow; t end proc

X := proc (t) options operator, arrow; t-2*floor(1/...

[Maple Plot]

>

Un produit scalaire

> Ps:= proc(f,g); Int(conjugate(f(t))*g(t), t=-Pi..Pi); end:

> ps:= proc(f,g) option remember; Ps(f,g); xplif(%,[t,real]); end:
ps(f,g);

int(conjugate(f(t))*g(t),t = -Pi .. Pi)

La base de Hilbert formée par les exponentielles

> Ps(t-> exp(I*j*t), t-> exp(I*k*t)): %= convert(value(%), trig);
Ps(t-> exp(I*j*t), t-> exp(I*j*t)): %= convert(value(%), trig);

Int(exp(-I*conjugate(j*t))*exp(I*k*t),t = -Pi .. Pi...

Int(exp(-I*conjugate(j*t))*exp(I*j*t),t = -Pi .. Pi...

La base de Hilbert formée par 1, cos(kt), sin (kt)

et les coefficients c[0], a[k], b[k] ..... avec k>0 parce que le continu et l'alternatif, ce n'est pas la même chose !!!

> cfe:= proc(f,j) option remember; t-> exp(I*j*t); ps(f,%)/ps(%,%); end:
cfc:= proc(f,j) option remember; t-> cos(j*t); ps(f,%)/ps(%,%); end:
cfs:= proc(f,j) option remember; t-> sin(j*t); ps(f,%)/ps(%,%); end:

> dcpo:= proc(f,n) option remember; local fu; fu:= eval(f);
cfe(fu,0)+ add(cfs(fu,j)*sin(j*t),j=1..n) + add(cfc(fu,j)*cos(j*t),j=1..n) ;
end:

> X:= t-> t-floor((t+Pi)/2/Pi)*Pi*2;

X := proc (t) options operator, arrow; t-2*floor(1/...

La dent de scie

> f1:= x: fu=%, dcpo=dcpo(f1,4);

fu = x, dcpo = 2*sin(t)-sin(2*t)+2/3*sin(3*t)-1/2*s...

> pl1:= plot([seq(dcpo(x,k), k=0..8)], t=-2*Pi..2*Pi, color=[red]):;;

> pl10:= plot([seq(dcpo(x,k), k=30)], t=-2*Pi..2*Pi, color=[red]):;;

> pl2:= plot([Pi,-Pi], t=-2*Pi..2*Pi, color=[green]):

> display(pl1, pl2); display(pl10, pl2);

[Maple Plot]

[Maple Plot]

On teste la formule de Parseval

> ps(x,x); Sum( (2/k)^2, k=1..infinity)*ps(sin,sin); (ASSERT@value)(%=%%);

2/3*Pi^3

Sum(4*1/(k^2),k = 1 .. infinity)*Pi

Bien comprendre la différence entre "fonction d'énergie nulle" et fonction nulle

>

La primitive périodique

> unapply(int(f1(t),t),t); f2:= % - unapply(cfe(%,0), t); macro(f=f2):

proc (t) options operator, arrow; 1/2*t^2 end proc

f2 := proc (t) options operator, arrow; 1/2*t^2 end...

> (fu=f)(t), dcpo=dcpo(f,4);

fu(t) = 1/2*t^2-1/6*Pi^2, dcpo = -2*cos(t)+1/2*cos(...

>

> ql1:= plot([seq(dcpo(f,k), k=0..8)], t=-2*Pi..2*Pi, color=[red]):;;

> ql10:= plot([seq(dcpo(f,k), k=30)], t=-2*Pi..2*Pi, color=[red]):;;

> ql2:= plot([(f@X)(t)], t=-2*Pi..2*Pi, color=[green]):

> display(ql1, ql2); display(ql10, ql2);

[Maple Plot]

[Maple Plot]

On teste Parseval

> ps(f,f); Sum( (2/k^2)^2, k=1..infinity)*ps(sin,sin); (ASSERT@value)(%=%%);

2/45*Pi^5

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

Et on pourrait recommencer

> unapply(int(f2(t),t),t); f3:= % - unapply(cfe(%,0), t);

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

f3 := proc (t) options operator, arrow; -1/6*Pi^2*t...

>

>

Le créneau

> f3:= 2*Heaviside-1; macro(f=f3):

f3 := 2*Heaviside-1

> (fu=f)(t), dcpo=dcpo(f,6);

fu(t) = 2*Heaviside(t)-1, dcpo = 4*sin(t)/Pi+4/3*si...

> ql1:= plot([seq(dcpo(f,k), k=0..8)], t=-2*Pi..2*Pi, color=[red]):;;

> ql10:= plot([seq(dcpo(f,k), k=30)], t=-2*Pi..2*Pi, color=[red]):;;

> ql2:= plot([(f@X)(t)], t=-2*Pi..2*Pi, color=[green]):

> display(ql1, ql2); display(ql10, ql2);

[Maple Plot]

[Maple Plot]

On teste Parseval

> ps(f,f); Sum( ``(4/Pi/(2*k+1))^2, k=0..infinity)*ps(sin,sin); (ASSERT@value@yjoli)(%=%%);

2*Pi

Sum(``(4*1/(Pi*(2*k+1)))^2,k = 0 .. infinity)*Pi

>

Le triangle

> f4:= (2*Heaviside-1)*x; macro(f=f4):

f4 := (2*Heaviside-1)*x

> (fu=f)(t), dcpo=dcpo(f,6);

fu(t) = (2*Heaviside(t)-1)*t, dcpo = 1/2*Pi-4*cos(t...

> ql1:= plot([seq(dcpo(f,k), k=0..8)], t=-2*Pi..2*Pi, color=[red]):;;

> ql10:= plot([seq(dcpo(f,k), k=15)], t=-2*Pi..2*Pi, color=[red]):;;

> ql2:= plot([(f@X)(t)], t=-2*Pi..2*Pi, color=[green]):

> display(ql1, ql2); display(ql10, ql2);

[Maple Plot]

[Maple Plot]

On teste Parseval

> ps(f,f); ``(Pi/2)^2 *ps(1,1)+Sum( ``(4/Pi/(2*k+1)^2)^2, k=0..infinity)*ps(sin,sin); (ASSERT@value@yjoli)(%=%%);

2/3*Pi^3

2*``(1/2*Pi)^2*Pi+Sum(``(4*1/(Pi*(2*k+1)^2))^2,k = ...

>

>

>

Noyau de Dirichlet

> Dn:= Sum( cos(k*t), k=-n..n); (value)(%): collect(%, sin(t), normal):
xtrig(%, (n+1)*t, n*t): xtrig(%, (n+1)*t, n*t):
xtrig(%,t,0): xtrig(%,t,0): val_Dn:=(simplify@factor)(%):

Dn := Sum(cos(k*t),k = -n .. n)

> Dn=val_Dn;

Sum(cos(k*t),k = -n .. n) = sin(1/2*t*(2*n+1))/sin(...

Le noyau de Dirichlet est oscillant

> plot(subs(n=5, val_Dn),t=-Pi..Pi);

[Maple Plot]

>

>

Noyau de Fejer

> Fn:= Sum( subs(n=k, val_Dn), k=0..n);
collect((value@expand)(%), [cos(t/2), sin(t/2)], normal):
collect(xtrig(%,t,0), [cos((n+1)*t), sin((n+1)*t)], simplify):
normal(%): xtrig(%,(n+1)*t,0): -sin(t/2)^2: val_Fn:= subs(simplify(%)=%, %%):

Fn := Sum(sin(1/2*t*(2*k+1))/sin(1/2*t),k = 0 .. n)...

> Fn=val_Fn;

Sum(sin(1/2*t*(2*k+1))/sin(1/2*t),k = 0 .. n) = sin...

Le noyau de Fejer est positif

> plot(subs(n=5, val_Fn),t=-Pi..Pi);

[Maple Plot]

>

>

Comparaison Dirichlet-Fejer

Pour comparer

> evalf(ps(x,x));

20.67085113

En bleu, l'approximation de Fejer

> kx:=30: fej||kx:= add(dcpo(f1,k),k=0..kx)/kx:
plot(%, t=-2*Pi..2*Pi, color= blue, linestyle=24):
display(%, pl10, plot(X(t), t=-2*Pi..2*Pi, color= black));

Warning, computation interrupted

> dif:= unapply(dcpo(x,kx)-fej||kx,t):

> plot(dif(t), t=-10..10); evalf(ps(dif,dif));

[Maple Plot]

.3298277960

> unapply(dcpo(x,kx),t)-x: evalf(ps(%,%));

.41197526

> unapply(fej||kx,t)-x: evalf(ps(%,%));

.74180306

On vérifie l'orthogonalité entre fu - dcpo et fejer - dcpo

> ps(unapply(dcpo(x,kx),t)-x, dif);

0

>