## Fourierov rad funkcie

### Fourierov rad na intervale dĺžky 2π

Najskôr deklarujeme n (dĺžka Fourierovho radu) ako kladnú
celočíselnú hodnotu.

(declare(n,integer),assume(n>0),facts());

Nastavíme začiatočnú a koncovú hodnotu intervalu, na ktorom
je definovaná základná vzorka pre rozvoj do Fourierovho radu.
Pri tom treba dávať pozor, aby rozdiel medzi hodnotami zac a kon
bol rovný 2π.

zac:-%pi;

kon:%pi;

Nájdeme Fourierov rozvoj funkcie f(x)=x na intervale (-π,π).
Preto definujeme

f(x):=x;

Podľa vzorcov pre Fourierove koeficienty definujeme funkcie pre ich výpočet.
Najskôr samostatne vypočítame koeficient a0:

a0:integrate(f(x),x,zac,kon)/%pi;

Teraz definujeme funkcie pre výpočet ostatných koeficientov an a bn

define(a(n),integrate(f(x)*cos(n*x),x,zac,kon)/%pi);

define(b(n),integrate(f(x)*sin(n*x),x,zac,kon)/%pi);

Konečne definujeme súčet, ktorý zodpovedá Fourierovmu radu funkcie

frad(x,nmax):=a0/2+sum(a(m)*cos(m*x)+b(m)*sin(m*x),m,1,nmax);

Pomocou tejto funkcie môžeme vyjadriť Fourierov rad požadovanej dĺžky,
napr. pre n=10 dostaneme:

frad(x,10);

Pre porovnanie rozvoja so zadaním definujeme funkciu

g(x):=if x>zac and x<kon then f(x);

Vzorku pre porovnanie zobrazíme spolu s rozvojom v jednom grafe. Pri zobrazovaní
iných funkcií venujte pozornosť primeranému rozsahu hodnôt y.
Pri zobrazení si všimnite, že pri rozvoji do Fourierovho radu nehľadáme
aproximáciu (podonú napr. Taylorovmu radu), ale ide o periodické
predĺženie danej vzorky.

plot2d([g(x),frad(x,30)],[x,-20,20],[y,-4,4],[legend,"Original function","Fourier series n=30"],[style,[lines,3,1],[lines,1,2],[lines,1,5]])$

#### Úlohy

Proces opakujte pre uvedené funkcie. Pritom si vyskúšajte
rozvoj na rôznych intervaloch dĺžky 2π.

f(x):=x^2;

f(x):=exp(x);

f(x):=x^2-x;

Nájdime Fourierov rozvoj funkcie y=|x| na intervale (-π,π).

Vzhľadom na definíciu absolútnej hodnoty |x|= x pre x≥0 a |x|=-x
pre x<0, je potrebné pripôsobiť výpočet integrálu pre určenie 
jednotlivých koeficientov radu.

a0:(integrate(-x,x,-%pi,0)+integrate(x,x,0,%pi))/%pi;

define(a(n),(integrate(-x*cos(n*x),x,-%pi,0)+integrate(x*cos(n*x),x,0,%pi))/%pi);

define(b(n),(integrate(-x*sin(n*x),x,-%pi,0)+integrate(x*sin(n*x),x,0,%pi))/%pi );

g(x):=if x>-%pi and x<%pi then abs(x);

plot2d([g(x),frad(x,30)],[x,-20,20],[y,-1,4],[legend,"Original function","Fourier series n=30"],[style,[lines,3,1],[lines,1,2],[lines,1,5]])$

### Fourierov rad na intervale ľubovoľnej dĺžky 2h

Nastavíme začiatočnú a koncovú hodnotu intervalu, na ktorom
je definovaná základná vzorka pre rozvoj do Fourierovho radu.
Hodnotu h určíme ako polovicu dĺžky zadaného intervalu.

zac:-1;

kon:1;

h:(kon-zac)/2;

Nájdeme Fourierov rozvoj funkcie f(x)=x na intervale (-1,1).
Preto definujeme

f(x):=x;

Podľa vzorcov pre Fourierove koeficienty na intervale dĺžky 2h
modifikujeme funkcie pre ich výpočet.
Najskôr samostatne vypočítame koeficient a0:

a0:integrate(f(x),x,zac,kon)/h;

Teraz modefinujeme funkcie pre výpočet ostatných koeficientov an a bn

define(a(n),integrate(f(x)*cos(n*%pi*x/h),x,zac,kon)/h);

define(b(n),integrate(f(x)*sin(n*%pi*x/h),x,zac,kon)/h);

Konečne definujeme súčet, ktorý zodpovedá Fourierovmu radu funkcie
definovanej na intervale dĺžky 2h

frad(x,nmax):=a0/2+sum(a(m)*cos(m*%pi*x/h)+b(m)*sin(m*%pi*x/h),m,1,nmax);

Pre porovnanie rozvoja so zadaním definujeme funkciu

g(x):=if x>zac and x<kon then f(x);

Vzorku pre porovnanie zobrazíme spolu s rozvojom v jednom grafe. 
Pri zobrazovaní iných funkcií venujte pozornosť primeranému rozsahu
hodnôt y.
Pri zobrazení si všimnite, že pri rozvoji do Fourierovho radu nehľadáme
aproximáciu (podonú napr. Taylorovmu radu), ale ide o periodické
predĺženie danej vzorky.

plot2d([g(x),frad(x,30)],[x,-20,20],[y,-2,2],[legend,"Original function","Fourier series n=30"],[style,[lines,3,1],[lines,1,2],[lines,1,5]])$

#### Úlohy

Proces opakujte pre uvedené funkcie. Pritom si vyskúšajte
rozvoj na rôznych intervaloch dĺžky 2h.

f(x):=x^2;

f(x):=exp(x);

Pri nasledujúcej úlohe opäť zvážte, ako je potrebné
upraviť výpočet integrálov v definícii koeficientov

f(x):=abs(x);

### Kosínusový a sínusový rad

Budeme predpokladať, že funkcia je daná na intervale (0,h)
a na základe tejto vzorky potom budeme konštruovať koeficienty
pre jej párne resp. nepárne rozšírenie na intervale (-h,h).

zac:0;

kon:1;

h:kon-zac;

Nájdeme rozvoj funkcie f(x)=x na intervale (0,1) do kosínusového
a sínusového radu.

f(x):=x;

Najskôr definujeme koeficienty pre kosínusový rad (t.j. pre párne
rozšírenie funkcie.

a0:2*integrate(f(x),x,zac,kon)/h;

define(a(n),2*integrate(f(x)*cos(n*%pi*x/h),x,zac,kon)/h);

Teraz definujeme súčet kosínusového radu

kosinrad(x,nmax):=a0/2+sum(a(m)*cos(m*%pi*x/h),m,1,nmax);

Pre porovnanie rozvoja so zadaním definujeme funkciu

g(x):=if x>zac and x<kon then f(x);

Vzorku pre porovnanie zobrazíme spolu s rozvojom v jednom grafe. 
Pri zobrazovaní iných funkcií venujte pozornosť primeranému rozsahu
hodnôt y.
Pri zobrazení si všimnite, že pri rozvoji do Fourierovho radu nehľadáme
aproximáciu (podonú napr. Taylorovmu radu), ale ide o periodické
predĺženie danej vzorky.

plot2d([g(x),kosinrad(x,30)],[x,-20,20],[y,-0.5,1.5],[legend,"Original function","Fourier series n=30"],[style,[lines,3,1],[lines,1,2],[lines,1,5]])$

Podobne definujeme koeficienty pre sínusový rad

define(b(n),2*integrate(f(x)*sin(n*%pi*x/h),x,zac,kon)/h);

sinrad(x,nmax):=sum(b(m)*sin(m*%pi*x/h),m,1,nmax);

Vzorku pre porovnanie zobrazíme spolu s rozvojom v jednom grafe. 
Pri zobrazovaní iných funkcií venujte pozornosť primeranému rozsahu
hodnôt y.

plot2d([g(x),sinrad(x,30)],[x,-20,20],[y,-1.5,1.5],[legend,"Original function","Fourier series n=30"],[style,[lines,3,1],[lines,1,2],[lines,1,5]])$

#### Úlohy

Proces opakujte pre uvedené funkcie. Pritom si vyskúšajte
rozvoj na rôznych intervaloch dĺžky (0,h).

f(x):=x^2;

f(x):=exp(x);

Pri nasledujúcej úlohe opäť zvážte, ako je potrebné
upraviť výpočet integrálov v definícii koeficientov

f(x):=abs(x);