Fourier-sarjat

18.11.98

Tämä työarkki hoitelee "minkä tahansa funktion" Fourier sarjaksi kehittämisen.

Työarkilla on valmiina Fourier-kertoimien yleiset lausekkeet.

"Napsuttele " lausekkeiden määrittelyt tai käyttää Edit-valikon Execute selection valintaa.

Määrittele käsiteltävän funktion lauseke (Huomaa: lauseke, ei funktiomäärittely).

Anna arvo L:lle.

Kertoimet saat nyt komennoilla value(a0);value(an);value(bn);

Huom! Näitä voi tilanteen mukaan modifioida. Esim. sen suhteen, käsitelläänkö lausekkeena

vai funktiona.

Seuraavassa laitetaan hakemistopoluksi se, johon ohjelmat.mpl on "valutettu" URL:stä

/home/www/public_html/teaching/k3/luentomateriaali/ohjelmat.mpl

TKK:n UNIX-työasemissa käy /p/edu/mat-1.443/maple .

Alla on oman Linux-koneeni polku.

Haemme erityisesti jaksollisen laajentajaoperaattorin ja otamme sille lyhenteen JL (kts. HAM ss. 127 - 128.

> read("/home/www/public_html/teaching/k3/luentomateriaali/ohjelmat.mpl"):alias(JL=PeriodicExtender):op(JL):
#with(plots):

Error, unable to read `/home/www/public_html/teaching/k3/luentomateriaali/ohjelmat.mpl`

Luennon helpottamiseksi määrittelemme kuitenkin tässä.

> PeriodicExtender:=proc(f,d::range)
subs({'F'=f,'L'=lhs(d),'D'=rhs(d)-lhs(d)},
proc(x::algebraic) local y;
y:=floor((x-L)/D);
F(x-y*D);
end)
end:

Fourier-kertoimien määrittely

f on käsiteltävä funktio, Jakso=2L
a0, an ja bn ovat tavallisia yksinkertaisia muuttujia.

Integroimalla saatavissa tuloksissa esiintyy symboli n muuttujana.

Määritelmiä napsuteltaessa on näköjään symbolin n syytä olla myös assume-komennoista vapaa,

muussa tapauksessa voi tapahtua outoa käytöstä.

> f:='f':L:='L':n:='n':
a0:=(1/(2*L))*Int(f,x=-L..L);

> an:=(1/(L))*Int(f*cos(n*Pi*x/L),x=-L..L);

> bn:=(1/(L))*Int(f*sin(n*Pi*x/L),x=-L..L);

[Maple Math]

[Maple Math]

[Maple Math]

Käsittelemme tarkasteltavaa funktiota f lausekkeena.Käytämme Int-muotoa kaavoissa, haluamme integroinnin suoritettavaksi vasta, kun f:n paikalla on jokin konkreettinen funktio.

Jos tarkasteltava funktio on määritelty paloittain, tulee edellä olevia kaavoja modifioida vastaavasti.

Käyttöesimerkki

Olkoon [Maple Math] välillä [Maple Math] . Jatketaan [Maple Math] -jaksoisena koko reaaliakselille.

Ainoa modifioitava on f ja L . Kertoimet a0,an ja bn on edellä määritelty. Muista, että

ladattuasi työarkin, tulee määrittelyt "napsutella" läpi, jotta ne tulisivat voimaan.

> f:=x:L:=Pi:a0:=value(a0);an:=value(an);bn:=value(bn);

[Maple Math]

[Maple Math]

[Maple Math]

Maple ei voi tietää, että tarkoitamme n:llä kokonaislukua. Kerrotaan se sille.

> interface(showassumed=2):assume(n,integer);

> bn;

[Maple Math]
[Maple Math]

Joskus voi olla kiintoisaa katsoa kertoimien listaa.

> blista:=seq(bn,n=1..20);

[Maple Math]

Sarjan osasumma N=10.

> sinis10:=add(bn*sin(n*Pi*x/L),n=1..10);

[Maple Math]
[Maple Math]

> sinisarja:=sum(bn*sin(n*Pi*x),n=1..infinity);

[Maple Math]
[Maple Math]

Huom! Sarjakehitelmää ei kannata käyttää laskentaan, ääretön sarja vie äärettömän kauan.

Lasketaan sarjan osasummia (vaikkapa 5 ensimmäistä) ja pannaan ne jonoon.

> osasummat:=seq(add(bn*sin(n*Pi*x/L),n=1..N),N=1..5);

[Maple Math]
[Maple Math]

Otamme käyttöön jaksollisen laajennusoperaattorin, jonka avulla laajennamme alkuperäisen funktion

[Maple Math] [Maple Math] -jaksoiseksi koko reaaliakselille.

> jaksf:=PeriodicExtender(x->x,-Pi..Pi);

[Maple Math]

> plot({jaksf(x),osasummat},x=-2*Pi..2*Pi);

[Maple Plot]

> plot({jaksf(x),sinis10},x=-2*Pi..2*Pi);

[Maple Plot]

> osasummat;

[Maple Math]
[Maple Math]

> N:=15:
plot([jaksf(x),add(bn*sin(n*Pi*x/L),n=1..N)],x=0..Pi);
plot([jaksf(x)-add(bn*sin(n*Pi*x/L),n=1..N)],x=0..Pi);

[Maple Plot]

[Maple Plot]

>

> add(bn*sin(n*Pi*x/L),n=1..N);

[Maple Math]
[Maple Math]

>

Parilliset ja parittomat laajennukset

Määritellään laaajennusoperaattorit " parillinenjatko " ja " paritonjatko ", jotka jatkavat

positiivisella R-akselilla määritellyn funktion parillisena/parittomana koko R:ään.

Huom! Tätä ei pidä sekoittaa harj10 perint. teht. 4:ssä esiintyvään parilliseen ja parittomaan

osaan jakamisen kanssa. (Niillekin voitaisiin määritellä vastaavat operaattorit, mutta näillä tässä

esitettävillä jatko-operaattoreilla on enemmän käyttöä Fourier-sarjojen yhteydessä.)

> parillinenjatko:=f->unapply(piecewise(x>0,f(x),x<0,f(-x)),x);

[Maple Math]

> plot(parillinenjatko(f),-1..1);fo:=parillinenjatko(f):plot(fo(x),x=-1..1):

[Maple Plot]

> paritonjatko:=f->unapply(piecewise(x>0,f(x),x<0,-f(-x)),x);

[Maple Math]

> plot(paritonjatko(f),-1..1);

[Maple Plot]

> plot(paritonjatko(x->x^2),-1..1);

[Maple Plot]

> jakspariton:=JL(paritonjatko(x->x^2),-1..1);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

> plot(jakspariton,-3..3);

[Maple Plot]

>