> restart:
> with(pldx): kernelopts(ASSERT=true):
La dent de scie
>
x:= t->t;
X:= t-> t-floor((t+Pi)/2/Pi)*Pi*2;
> plot(X(t),t=-10..10);
>
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);
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);
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;
La dent de scie
> f1:= x: fu=%, dcpo=dcpo(f1,4);
> 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);
On teste la formule de Parseval
> ps(x,x); Sum( (2/k)^2, k=1..infinity)*ps(sin,sin); (ASSERT@value)(%=%%);
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):
> (fu=f)(t), dcpo=dcpo(f,4);
>
> 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);
On teste Parseval
> ps(f,f); Sum( (2/k^2)^2, k=1..infinity)*ps(sin,sin); (ASSERT@value)(%=%%);
Et on pourrait recommencer
> unapply(int(f2(t),t),t); f3:= % - unapply(cfe(%,0), t);
>
>
Le créneau
> f3:= 2*Heaviside-1; macro(f=f3):
> (fu=f)(t), dcpo=dcpo(f,6);
> 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);
On teste Parseval
> ps(f,f); Sum( ``(4/Pi/(2*k+1))^2, k=0..infinity)*ps(sin,sin); (ASSERT@value@yjoli)(%=%%);
>
Le triangle
> f4:= (2*Heaviside-1)*x; macro(f=f4):
> (fu=f)(t), dcpo=dcpo(f,6);
> 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);
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)(%=%%);
>
>
>
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=val_Dn;
Le noyau de Dirichlet est oscillant
> plot(subs(n=5, val_Dn),t=-Pi..Pi);
>
>
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=val_Fn;
Le noyau de Fejer est positif
> plot(subs(n=5, val_Fn),t=-Pi..Pi);
>
>
Comparaison Dirichlet-Fejer
Pour comparer
> evalf(ps(x,x));
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));
> unapply(dcpo(x,kx),t)-x: evalf(ps(%,%));
> unapply(fej||kx,t)-x: evalf(ps(%,%));
On vérifie l'orthogonalité entre fu - dcpo et fejer - dcpo
> ps(unapply(dcpo(x,kx),t)-x, dif);
>