Tillämpad matematik TMA 990 KB2 - 2002/2003
Datorstudio 1: Fourierserier.
Syftet med denna övning är att skriva ett Matlabprogram som beräknar approximationer till Fourierserier av en godtycklig periodisk funktion. Genom att plotta olika delsummor av serien kan man också få en visuell förståelse för konvergensen hos Fourierserier. Titta i kapitel 3.1-3 i Jan Peterssons Fourieranalysbok för mer detaljerade definitioner och mer teori.
Problemformulering.Givet en funktion f(t) med perioden T ska ni skriva en Matlabfunktion som beräknar delsumman S_N(t) = 1/2*a_0 + sum_n( a_n*cos(n*W*t)+b_n*sin(n*W*t) ), 1 <= n <= N där W=2*pi/T betecknar grundvinkelfrekvensen. S_N(t) ger då en approximation till f(t) som konvergerar punktvis (i alla punkter där f är dervierbar) då N går mot oändligheten. Vi har att
a_n = 2/T int_0^T f(t)*cos(n*W*t)dt
f(t) kan vara besvärlig att skriva med ett enkelt uttryck och
ska därför implementeras i en egen Matlabfil som ges ett passande
namn; i instruktionerna har den fått namnet f.m.
Programstruktur.Nedan ges en struktur att följa när ni skriver ert program:
Indata: 'f', t, T, N
Struktur:
Att tänka på:
Skriv programmet. Testa först att det ger rätt svar om ni ger en sinus-
eller cosinusfunktion som indata (serien ska ju då endast innehålla
denna komponent och sammanfaller då med funktionen).
Prova sedan med en fyrkantsvåg enligt Exempel 1 på sidan 3:07 i
boken. Fyrkantsvågen kan implementeras som
Plotta 'fyrkant' och S_N i samma figur. Kan ni
återskapa bliderna i Figur 7 på sidan 3:09?
Prova med andra funktioner. Fundera över följande frågor: Vad är
S_0? Vad händer när ni ökar N? Vad händer om antalet
kvadraturpunkter är för få?
Utöka programmet så att du plottar S_N varje gång du adderat
nya termer i loopen. Börja med att plotta 'f' inne i
programmet, plotta sedan S_N varje gång i loopen (ta bort den
gamla S_N innan du plottar den nya, se tipsen nedan).
Räkna ut och plotta ett amplitudspektrum.
Om man använder ett stort N och många kvadraturpunkter så
blir programmet väldigt långsamt. Försök skriva om integralberäkningen
så att ni inte behöver använda en loop. Finns det fler sätt att få
programmet att gå snabbare?
1)
2)
3)
(Se även funktionen fyrkant ovan.)
4)
Lycka till!!!
P.S.
|
Editor: Rickard Bergström Last modified: 2002-10-23 |