Harj11AV
ti 24.11.02
Alustukset, muista editoida kaikki read-lauseet oman polkumäärityksesi mukaan.
Huomaa, että read -lauseita esiintyy jokaisen restartin jälkeen.
> | restart: |
Warning, the name changecoords has been redefined
> | #read("/p/edu/mat-1.414/maple/v302.mpl"): |
> | #read("c:\\usr\\heikki\\s02\\v302.mpl"): |
> | read("/home/apiola/opetus/peruskurssi/v2-3/maple/v302.mpl"): |
> | plots[setoptions](axes=boxed): |
Fourier-kertoimet
Otetaan "pedagogisista syistä" ensin -jaksoinen ja sitten yleinen.
-jaksoinen funktio f
> | f:='f': |
> | a0:=(1/(2*Pi))*Int(f(x),x=-Pi..Pi); |
> | an:=(1/Pi)*Int(f(x)*cos(n*x),x=-Pi..Pi); |
> | bn:=(1/Pi)*Int(f(x)*sin(n*x),x=-Pi..Pi); |
> | sarja:='a0'+Sum('an'*cos(n*x)+'bn'*sin(n*x),n=1..infinity); |
> | osasumma:=(x,N)->a0+add(an*cos(n*x)+bn*sin(n*x),n=1..N): |
1.
> | f:=x->piecewise(-Pi < x and x < 0, 0,0 < x and x < Pi/2, 1,Pi/2 < x and x < Pi,0); |
> | plot(f(x),x=-Pi..Pi); |
> | Jf:=JJ(f,-Pi..Pi): |
> | plot(Jf,-2*Pi..2*Pi); |
Lasketaanpa Fourier-kertoimet:
> | a0:=(1/(2*Pi))*Int(f(x),x=-Pi..Pi); |
> | value(a0); |
Käsin laskisimme näin:
> | a0:=1/(2*Pi)*int(1,x=0..Pi/2); |
: Annetaan ensin Maplen laskea automaattisesti:
> | an:=(1/Pi)*Int(f(x)*cos(n*x),x=-Pi..Pi); |
> | value(an); |
Käsin laskien:
> |
Nähtiin samalla, että Maplen int hallitsee piecewise-määritellyn funktion. (Tällaiset seikat on hyvä aina varmistaa, kannattaa muistaa, että
symbolilaskentaohjelman tekeminen on erittäin vaativa homma, ja ohjelman tekijätkin ovat inhimilliyydestään johtuen erehtyväisiä.)
> | bn:=(1/Pi)*Int(f(x)*sin(n*x),x=-Pi..Pi); |
> | bn:=value(bn); |
Käsin:
> |
> | trigsiev(bn,n); |
> | seq(an,n=1..10); seq(bn,n=1..10); |
> | sarja:='a0'+Sum('an'*cos(n*x)+'bn'*sin(n*x),n=1..infinity); |
> | osasumma:=(x,N)->a0+add(an*cos(n*x)+bn*sin(n*x),n=1..N): |
> | plot([f(x),osasumma(x,5)],x=-Pi..Pi); |
> | plot([f(x),seq(osasumma(x,N),N=1..20)],x=-Pi..Pi); |
> | plot([Jf(x),seq(osasumma(x,N),N=21..40)],x=-2*Pi..2*Pi); |
> | plot([f(x),osasumma(x,50)],x=-Pi..Pi,color=[gray,blue],numpoints=150); |
Suppenemislauseen ehdot: paloittain jatkuvuus ja vp. ja op. derivoituvuus ovat voimassa. Niinpä sarja suppenee kohti funktion arvoa kaikkialla
muualla paitsi pisteissä . Näissä se suppenee kohti arvoa .
2.
(a)
Seuraa suoraan integraalin lineaarisuudesta.
> | kanttisarja:=(4/Pi)*Sum(sin(2*k-1)*x/(2*k-1),k=1..infinity); |
Olkoon
.
Suoritetaan ensin muuttujan skaalaus uudelle jaksovälille [-1,1]. Olkoon . Merk .
g(t) =
u(t) saadaan g(t):stä lisäämällä 1 ja jakamalla 2:lla:
.
> | usarja:=(1+(4/Pi)*Sum(sin((2*k-1)*Pi*t)/(2*k-1),k=1..infinity))/2; |
> | osasumma:=(t,N)->(1+(4/Pi)*add(sin((2*k-1)*Pi*t)/(2*k-1),k=1..N))/2; |
> | plot(osasumma(t,10),t=-2..2,numpoints=100); |
Hyvältä näyttää!
3.
> | restart: |
Warning, the name changecoords has been redefined
a)
Summa :
Olk. ja parillisia. Olkoon .
= = f(x) , koska kerran ja parillisia.
Olk. ja parittomia. Olkoon .
= = , koska kerran ja parittomia.
Tulot:
Olkoon pariton ja parillinen. Olkoon .
= = .
Siis parittoman ja parillisen tulo on pariton.
Muut aivan vastaavasti: pariton x pariton = parillinen, parillinen x parillinen = parillinen.
b)
Olkoon f annettu realifunktio.
> | fplus:=x->f(x)+f(-x); fmiinus:=x->f(x)-f(-x); |
> | fplus(x)+fmiinus(x); |
> | fe:=fplus/2; fo:=fmiinus/2; |
> | fe(x)+fo(x); |
> | fe(-x)=fe(x); # Niin on. |
> | fo(-x)=-fo(x); # ja näin on. |
Niinpä f voidaan esittää muodossa
,
missä ja .
:tä on luonnollista nimittää f:n parilliseksi osaksi ja :ta parittomaksi osaksi.
Huom! Nämä ovat eri asioita kuin parillinen ja pariton laajennus, vaikka käytämme samoja merkintöjä. Fourier-sarjojen teoriassa l a ajennukset
ovat tärkeämmässä osassa .
c)
> | f:=x->exp(a*x); |
> | fe:=(f(x)+f(-x))/2; convert(fe,trig); |
> | fo:=(f(x)-f(-x))/2; convert(fo,trig); |
Siis hyperbolinen cos on -funktion parillinen osa ja hyperbolinen sin on pariton osa .
4.
Funktio f : [0,L] --> R voidaan laajentaa parilliseksi määrittelemällä ja
parittomaksi määrittelemällä , kun x < 0 .
Esim:
> | f:=x-> exp(x): |
> | Oef:=piecewise(x<0,-f(-x),x>0,f(x)); # Odd extension (of) f |
> | Eef:=piecewise(x<0,f(-x),x>0,f(x)); # Even extension (of) f |
> | plot(Oef,x=-1..1); |
> | plot(Eef,x=-1..1); |
Asiaan:
Havainnollisesti, pinta-aloja ajattelemalla asia on aivan selvä, voidaan perustella täsmällisesti vaikka Riemannin summilla,
tai sitten muuttujan vaihdolla integraaleissa (uusi muuttuja -x).
a) Jos f : [0,L] --> R jatketaan parilliseksi, on kyseessä parillisen jatkon sarja, jolloin -kertoimet ovat nollia, koska
;
ja integroitavana on siis (parillinen pariton), joten tulos = 0.
Tällöin
= .
Vastaava kaava pätee muillekin - kertoimille, koska on parillinen funktio.
Siis:
=
b) Jos f : [0,L] --> R jatketaan parittomaksi, on kyseessä parittoman jatkon sarja, jolloin -kertoimet ovat nollia, koska
;
ja integroitavana on siis (pariton parillinen), eli pariton funktio , joten tulos = 0.
Tällöin:
=
Nämä kaavat pätevät pätevät tietysti aina, kun kyseessä on välillä [-L,L] määritelty (a) parillinen tai (b) pariton
funktio, jolloin niiden käyttö säästää hieman laskuvaivaa.
Parillisen/parittoman jatkamisen tilanteessa kaavoilla on suurempi merkitys sikäli, että niiden avulla saadaan
yksinkertaiset laskukaavat alkuperäisen, välillä [0,L] määritellyn funktion f avulla lausuttuna.
5.
> | restart: |
Warning, the name changecoords has been redefined
> | #read("/p/edu/mat-1.414/maple/v302.mpl"): |
> | #read("c:\\usr\\heikki\\s02\\v302.mpl"): |
> | read("/home/apiola/opetus/peruskurssi/v2-3/maple/v302.mpl"): |
> | plots[setoptions](axes=boxed): |
Tiedostossa v302.mpl on määritelty pariton ja parillinen jatkamisoperaattori. Kun halutaan määritellä funktio
(operaattori), joka palauttaa funktion, niin käytetään unapply-tapaa.
Matemaattisesti looginen olisi myös tapa:
> | ptonj:=f->(x->piecewise(0 < x,f(x),x < 0,-f(-x))); |
Ahaa, Maple 8:ssa tämä toimii, vanhemmissa varmaan ei.
> | op(paritonjatko); |
> | op(parillinenjatko); |
> | f:=x->x: |
> | fe:=parillinenjatko(f);fo:=paritonjatko(f); |
> | plot([fo,fe+0.1],-4..4,title="Funktion f(x)=x parill. ja pariton jatko"); # Piirretään fe+0.1, jotta erottuvat. |
> | Jfo:=JJ(fo,-4..4); |
> | Jfe:=JJ(fe,-4..4); |
> | plot(Jfe,-8..8); plot(Jfo,-8..8); |
Parillinen laajennus:
> | L:=4: # p = 2*L = 8 |
> | a0:=(1/L)*Int(f(x),x=0..L);a0:=value(a0); |
> | an:=(2/L)*Int(f(x)*cos(n*Pi*x/L),x=0..L);an:=value(an); |
> | an:=trigsiev(an,n); |
> | seq(an,n=1..10); |
> | seq(-16/Pi^2/(2*k-1)^2,k=1..5); |
> | ak:=-16/Pi^2/(2*k-1)^2; |
> | sarja:=a0+Sum(ak*cos((2*k-1)*Pi*x/L),k=1..infinity); |
> | osasumma:=unapply(a0+sum(ak*cos((2*k-1)*Pi*x/L),k=1..K),x,K); |
> | osasumma(x,2); |
> | plot([Jfe(x),seq(osasumma(x,j),j=1..7)],x=-8..8); |
Pariton laajennus:
> | bn:=(2/L)*Int(f(x)*sin(n*Pi*x/L),x=0..L);bn:=value(bn); |
> | bn:=trigsiev(bn,n); |
> | sarja:=Sum(bn*sin(n*Pi*x/L),n=1..infinity); |
> | osasumma:=unapply(sum(bn*sin(n*Pi*x/L),n=1..N),x,N); |
> | plot([Jfo(x),osasumma(x,5)],x=-8..8); |
> | plot([Jfo(x),osasumma(x,10)],x=-4..4); |
Tässä nyt on mukana jo LV-tehtävääkin, tarkistuksen vuoksi.
Suppenemislauseen soveltaminen on hyvin mekaanista.
Parillinen laajennus on kaikkialla jatkuva, suppenemiskäytös on hämmästyttävän hyvä.
Lauseen mukaan suppenee kaikkialla kohti f:n arvoa.
Pariton laajennus on epäjatkuva päätepisteissä 4 + k*8, (k=+-1,+-2,...). Kuva vahvistaa lauseen väitteen, mikä näkyy suoraan
sarjasta sijoittamalla x=k*4.
6.
Tässä olis ollut hyvä antaa sarjan muoto, jota haetaan, tosin KRE-kirja pitäisi olla useimmilla, sieltähän löytyy.
> | restart: |
Warning, the name changecoords has been redefined
> | sarja:=Sum(c[n]*exp(i*n*x),n=-infinity..infinity); |
Kun puhutaan systeemin ortogonaalisuudesta, on luonnollista laskea :
> | Int(exp(I*n*x)*exp(-I*k*x),x=-Pi..Pi); |
Sillä sisätulo kompleksikertoimisessa avaruudessa vaatii jälkimmäisen argumentin konjugoinnin. Tämä ei sinänsä
ole tehtävän kannalta välttämätön tieto, koska käydään joka tapauksessa läpi kaikki kokonaisindeksit.
> | int(exp(I*n*x)*exp(-I*k*x),x); |
Tämä lasku on voimassa, jos , jolloin sijoitus antaa 0 ( -jaksoinen funktio).
Jos k=n, saadaan
> | exp(I*n*x)*exp(-I*n*x)=1; |
joten .
Jos siis f:llä on sarjaesitys:
> | f(x) = Sum(c[n]*exp(i*n*x),n = -infinity .. infinity); |
> |
niin kertomalla exp(-i*k*x):llä ja integroimalla saadaan:
Nollasta poikkeavaa tulee vain, kun n=k, jolloin integraali = 2*Pi .
Niinpä saadaan:
.
Huom!: On makuasia, kummassa on miinusmerkki, sarjassa vai kertoimessa.
Todella kaunis ja symmetrinen muoto, ja vähällä vaivalla! Tämä on myös oikea muoto lähestyttäessä Fourier-muunnosta.