Laboration 3 - KTHfabo02/tilnum/labb3.pdf · 2005-04-15 · som ˜ar viktigt att notera ˜ar att...
Transcript of Laboration 3 - KTHfabo02/tilnum/labb3.pdf · 2005-04-15 · som ˜ar viktigt att notera ˜ar att...
Laboration 3
Tillampade Numeriska Metoder
Symmetriska egenvarden och FFT
Farid Bonawiede [email protected] Litton [email protected]
Grupp 17
15 april 2005
Innehall
1 Lanczos metod for symmetriska egenvarden 21.1 Diagonalmatriser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Symmetriska slumpmatriser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 Normalfordelade slumpmatriser . . . . . . . . . . . . . . . . . . . . . . . . 41.2.2 Rektangelfordelade slumpmatriser . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Slutsats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Snabb Fouriertransform - FFT 102.1 En naiv implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2 En harledning av periodicitetsegenskaper . . . . . . . . . . . . . . . . . . . . . . 122.3 Undersokning av komplexitetsegenskaper . . . . . . . . . . . . . . . . . . . . . . . 122.4 En rekursiv implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.5 En jamforelse av berakningseffektivitet . . . . . . . . . . . . . . . . . . . . . . . . 152.6 Ytterligare funderingar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1
1 Lanczos metod for symmetriska egenvarden
Denna del av laborationen gick ut pa att vi skulle hitta egenvarderna till symmetriska matriser.Vi anvande oss av Lanczos algoritm som ar en iterativ metod for att transformera en matris Atill en tridiagonalmatris T . Saledes soker man efter en ortogonalmatris Q sadan att QT AQ = T .Egenvardena till T blir da en approximation av egenvardena till A och brukar kallas Ritzvarden(Sats 7.1 i Demmels bok berattigar oss till just detta). Paige avhandling 1972 forklarar attda ortogonalitet tappas i basmatrisen Q kommer ett Ritzvarde konvergera mot ett egenvardetill A. Detta innebar att vi var tvunga att rakna ut ortogonaliteten i varje steg i algoritmen,genom ‖QT
k qk+1‖2. Pa grund av att vi raknar med flyttalsaritmetik kommer ortogonalitetentappas tidigare an i exakt aritmetrik. Detta kan motverkas genom att omortogonalisera dennya basvektorn i varje steg. Tyvarr ar detta ratt dyrt berakningsmassigt och darmed inte alltidvart besvaret. Vi kommer emellertid inte ga in pa det utan har istallet valt att implementeraalgoritmen utan omortogonalisering.
Vi ar aven intresserade av residualen for berakningarna: ‖A(Qkvi)− (Qkvi)θi‖2 = βk|vi(k)|.Med andra ord om vi ar egenvektor till A, kommer den storsta skillnaden mellan vart ritzvardeθi och λi vara βk|vi(k)|. Dar βk = ‖zk‖ (zk ar den nya framraknade basvektorn innan dennormerats). Ty detta galler i det fallet da vi anvander oss av Lanczos algoritm for att beraknaQk.
Da vi i algoritmen skulle rakna fram den tridiagonala matrisen T anvande vi oss forst avberakningen T = QT AQ. Som alltid nar vi gor numeriska berakningar uppkommer ofta problemmed maskinnoggrannheten. Detta intraffade aven har och var T -matris blev inte helt tridiago-nal utan det uppkom ett flertal andra nollskilda element. Istallet andrade vi varat satt att tafram matrisen. Vi vet namligen att super- och subdiagonalen bestar av βi ifran 1 till k-1. Ochhuvuddiagonalen av projektionen av den nya basvektorn qk pa qk−1.
Tk =
α1 β1
β1 α2. . .
. . . . . . βk−1
βk−1 αk
Till att borja med undersokte vi detta samband for diagonal matriser. Det ar sjalvklart for enmanniska att diagonalen representerar matrisens egenvarden, darfor tankte vi lata var algoritmberakna dessa. Vi kommer sedan att slumpa fram lite olika fordelade symmetriska matriser foratt undersoka hur det hela forhaller sig.
1.1 Diagonalmatriser
Vi borjade med att tillampa algoritmen pa en diagonalmatris med vardena 1, 2 . . . 30 i diagonalen.I detta fall ska egenvektorerna vara det samma som basvektorerna. Vi undersoker darfor dettaoch noterar att ‖V − Qk‖ ≈ 3.6 · 108, vilket far anses som en rimlig skillnad. Figur 1 visar degenererade Ritzvardena.
Som man ser i figuren hittar man alltsa inte alla egenvarden innan man har natt sista steget.Darfor betraktar man en plot av ortogonaliteten for att se om detta kan ha nagot med sakenoch gora. Se vanstra plotten i figur 2. Precis som vantat ser vi hur vi tappar ortogonalitetenhelt vid k = 30 och saledes har alla egenvarden konvergerat. For att fa en uppfattning om
2
0 5 10 15 20 25 300
5
10
15
20
25
30
Lanczos steg
Ege
nvär
dena
n steg av Lanczos applicerat på A
Figur 1: Plot av Ritzvardena
hur bra approximationen av egenvardena ar, vid inte fullt sa manga k, foljer har en plot overresidualuppskattning (hogra plotten i figur 2). Med andra ord, om vi inte kraver mer an enviss noggrannhet, finns det ingen anledning att fortsatta iterera. Som man ser i figuren garresidualuppskattningen emot maskinepsilon ε da k = 30 vilket innebar att vi har natt bastatankbara egenvarde som kan beraknas med hjalp av en dator.
5 10 15 20 25 30
10−14
10−12
10−10
10−8
10−6
10−4
10−2
100
Plot av ortogonaliteten för den nya basen
Lanczos steg0 5 10 15 20 25 30
10−16
10−14
10−12
10−10
10−8
10−6
10−4
10−2
100
102
Residualuppskattningen av Ritz−värdena
β ik
Lanczos steg − k
Figur 2: Semilogy plottar over ortogonaliteten samt residualuppskattningen
Vad vi hittills har sett ar alltsa att algoritmen verkar stamma overens med vad Paiges slut-satser. Nu later vi istallet A ha diagonalen 1, 2 . . . 100. Plotten for ritzvardena foljer alltsa i figur3.
Det denna bild kan saga oss ar endast att den huvudsakligen verkar ha konvergerat ratt.For att fa battre forstaelse av hur bra de har konvergerat mot de korrekta egenvardena tar vioch jamfor plotten av ortogonaliteten (vanstra plotten i figur 4) med plotten av residualskat-tningen (hogra plotten i figur 4). Har ser vi nagot som skiljer sig fran tidigare undersokning.Ortogonaliteten tappas redan vid k = 80 samtidigt som residualskattningen ar dar ar nere pa
3
0 10 20 30 40 50 60 70 80 90 1000
10
20
30
40
50
60
70
80
90
100
Lanczos steg
Ege
nvär
dena
n steg av Lanczos applicerat på A
Figur 3: Plot av Ritzvardena
maskinepsilon for att sedan stiga en aning. Genom att studera ritzvardena noggrannare inses attvi borjar fa dubletter av de hogre egenvardena vilket forklarar den okande residualskattningen.Hur dessa dubletter uppkommer diskuteras senare.
10 20 30 40 50 60 70 80 90 100
10−14
10−12
10−10
10−8
10−6
10−4
10−2
100
Plot av ortogonaliteten för den nya basen
Lanczos steg0 10 20 30 40 50 60 70 80 90 100
10−16
10−14
10−12
10−10
10−8
10−6
10−4
10−2
100
102
Residualuppskattningen av Ritz−värdena
β ik
Lanczos steg − k
Figur 4: Semilogy plottar over ortogonaliteten samt residualuppskattningen
1.2 Symmetriska slumpmatriser
1.2.1 Normalfordelade slumpmatriser
I denna del av laborationen anvande vi oss av normalfordelade slumpmatriser som genereradesmed hjalp av A = randn(n) och A = A + A. Saledes fick vi en matris som ar symmetrisk meddimensionen n× n. Vi anvande aven har de tva storlekarna n = 30 och n = 100. Vi borjar medfallet n = 30. Aterigen inleder vi med att betrakta Ritzvardesplotten, se figur 5.
I plotten av egenvardena kan man ser att det verkar existera en viss konvergens redan innan
4
0 5 10 15 20 25 300
10
20
30
40
50
60
70
80
90
100
Lanczos steg
Ege
nvär
dena
n steg av Lanczos applicerat på A
Figur 5: Plot av Ritzvardena
det sista steget. Vi tittar darfor narmare pa ortogonaliteten samt residualskattningen for attavgora hur bra skattning ritzvardena ar till matrisen A:s egenvarden, se figur 6.
5 10 15 20 25 3010
−16
10−14
10−12
10−10
10−8
10−6
10−4
10−2
100
Plot av ortogonaliteten för den nya basen
Lanczos steg0 5 10 15 20 25 30
10−2
10−1
100
101
102
Residualuppskattningen av Ritz−värdena
β ik
Lanczos steg − k
Figur 6: Semilogy plottar over ortogonaliteten samt residualuppskattningen
Ur ortogonalitetsplotten ser vi att man tappar ortogonaliteten vid k = 26. Om man daremotundersoker residualuppskattningen ser vi att efter k = 15 fas vi ingen namvard forbattring avresidualen. Vart att observera ar att dessa plottar ar genererade med en normalfordelad x-vektoroch kan da och da leda till valdigt annorlunda matriser. Vi lagger darfor in tva andra grafer (figur7) av residualuppskattningen for att illustrera olika mojligheter. Aven dessa tva har n = 30. Detsom ar viktigt att notera ar att ar att aven har ser man att efter k ≈ 15− 16 sker ingen kraftfullforbattring vilket innebar att vi anser att detta val av k ar godkant.
Nu anvander vi istallet den storre matrisen med n = 100 och later algoritmen iterera 100steg. De framraknade Ritzvardena presenteras i vanstra plotten i figur 8. Beteendet kanns igenoch kan jamforas med bild 7.2 i Demmels bok.
For att forsta beteendet tar vi aven har en titt pa ortogonaliteten och residualskattningen, se
5
0 5 10 15 20 25 3010
−2
10−1
100
101
102
Residualuppskattningen av Ritz−värdena
β ik
Lanczos steg − k0 5 10 15 20 25 30
10−2
10−1
100
101
102
Residualuppskattningen av Ritz−värdena
β ik
Lanczos steg − k
Figur 7: Semilogy plottar over residualuppskattningen for ytterligare tva matriser
0 10 20 30 40 50 60 70 80 90 1000
50
100
150
200
250
300
350
400
Lanczos steg
Ege
nvär
dena
n steg av Lanczos applicerat på A
0 10 20 30 40 50 60 70 80 90 10010
−18
10−16
10−14
10−12
10−10
10−8
10−6
10−4
10−2
100
Plot av minsta singulärvärdet till basmatrisen Qk
Lanczos steg
Figur 8: Plot av Ritzvardena samt en semilogy plot over minsta singularvardet till basmatrisen
figur 9.Liksom tidigare ser vi att det efter halften av iterationerna inte erhalls mycket battre nog-
grannhet. Vi ser aven att det ar vid ungefar samma iteration som vi tappar ortogonaliteten.Vart att observera ar att ortogonaliteten aven har borjar oscillera for att sedan konvergera emotett. Vi anar att denna oscillation kan vara anledningen till att vi aterigen erhaller degenererandeegenvarden. Det ar emellertid svart att avgora och vi kommer att ta upp detta lite senare foren annan typ av matriser. Genom att berakna det minsta singularvardet hos basmatrisen Q kanman forsoka hitta ytterligare samband (hogra plotten i figur 8). Detta eftersom vi vet att detborde lamna ett nar ortogonalitet borjar tappas. Precis som vantat sa sker detta. Beteendet kanjamforas med exemplet i Demmels bok (se Fig 7.6 i Demmel).
6
10 20 30 40 50 60 70 80 90 100
10−14
10−12
10−10
10−8
10−6
10−4
10−2
100
Plot av ortogonaliteten för den nya basen
Lanczos steg0 10 20 30 40 50 60 70 80 90 100
10−2
10−1
100
101
102
103
Residualuppskattningen av Ritz−värdena
β ik
Lanczos steg − k
Figur 9: Semilogy plottar over ortogonaliteten samt residualuppskattningen
1.2.2 Rektangelfordelade slumpmatriser
Nu tankte vi avsluta vara tester av algoritmen med rektangelfordelade slumpmatriser genom attanvanda matlabfunktionen rand. Da fas en matris med ett ordentligt dominerande egenvardeλ1. Detta egenvarde brukar kallas for Perronroten. Aven har later vi n = 30 och som tidigareborjar vi med att presentera en plot over de beraknade Ritzvardena (se vanstra plotten i figur10). I plotten syns bland annat storleksskillnaden och man kan ana vissa egenvardesdubblettervid k = 11, 19, 26.
0 5 10 15 20 25 300
50
100
150
200
250
Lanczos steg
Ege
nvär
dena
n steg av Lanczos applicerat på A
0 5 10 15 20 25 3010
−18
10−16
10−14
10−12
10−10
10−8
10−6
10−4
10−2
100
Plot av minsta singulärvärdet till basmatrisen Qk
Lanczos steg
Figur 10: Plot av Ritzvardena och en semilogy plot over minsta singularvardet till basmatrisen
Nu ar vi intresserade av att forklara dessa dubletter med hjalp av ortogonaliteten eller resid-ualskattningen. Vi tar darfor och ritar ut dessa i figur 11.
Ortogonaliteten forloras forsta gangen vid n = 10 vilket innebar att Perronroten har konverg-erat for detta n. Sedan verkar det som om att det dyker upp tva stycken kopior av Perronrotenvid n = 18, 25. Den sista toppen i ortogonalitetsplotten befinner sig vid n = 29 och nar inte rik-
7
5 10 15 20 25 3010
−16
10−14
10−12
10−10
10−8
10−6
10−4
10−2
100
Plot av ortogonaliteten för den nya basen
Lanczos steg0 5 10 15 20 25 30
10−3
10−2
10−1
100
101
102
Residualuppskattningen av Ritz−värdena
β ik
Lanczos steg − k
Figur 11: Semilogy plottar over ortogonaliteten samt residualuppskattningen
tigt ett, men genom att studera de numeriska vardena ser vi att det ar i den 14:e decimalen somskillnaden dyker upp. Detta innebar att vi far anse situationen som konvergent. Denna typ avortogonalitetsoscillation och dubblering av ritzvarden sag vi tidigare for de normalfordelade ma-triserna. Emellertid var det inte lika utmarkande dar. Nu nar vi kan anvanda oss av Perronrotenblir det lattare att folja forloppet. Da kan man kontrollera att forsta forlusten av ortogonalitethanger ihop med hur minsta singularvardet i basmatrisen gar borjar vika av fran ett. Se hograplotten i figur 10.
Avslutningsvis undersoker vi en rektangelfordelad slumpmatris med n = 100. Aven har harvi en Perronrot och forvantar oss darfor en snabb forlust av ortogonalitet samt degenerationav ritzvarden som har konvergerat till Perronroten. Ur singularvardesplotten i figur 12 inses attortogonaliteten tappas for forsta gangen vid k = 8, vilket bekraftas av ortogonalitetsplotten i figur13. Antalet toppar, i figuren, svarar mot antalet Ritzvarden som har kovergerat mot Perronroten.Vi far det till att vid 15 tillfallen tappas ortogonalitet, och genom att studera ritzvardena insesatt det finns 15 stycken kopior av Perronroten, detta bekraftar hypotesen.
0 10 20 30 40 50 60 70 80 90 1000
500
1000
1500
2000
2500
3000
Lanczos steg
Ege
nvär
dena
n steg av Lanczos applicerat på A
0 10 20 30 40 50 60 70 80 90 10010
−18
10−16
10−14
10−12
10−10
10−8
10−6
10−4
10−2
100
Plot av minsta singulärvärdet till basmatrisen Qk
Lanczos steg
Figur 12: Plot av Ritzvardena samt en semilogy plot over det minsta singularvardet i basmatrisen
8
10 20 30 40 50 60 70 80 90 100
10−14
10−12
10−10
10−8
10−6
10−4
10−2
100
Plot av ortogonaliteten för den nya basen
Lanczos steg0 10 20 30 40 50 60 70 80 90 100
10−3
10−2
10−1
100
101
102
103
Residualuppskattningen av Ritz−värdena
β ik
Lanczos steg − k
Figur 13: Semilogy plottar over ortogonaliteten samt residualuppskattningen
1.3 Slutsats
Vi har i denna del visat hur Paiges avhandling om hur ortogonaliteten tappas da ett ritzvardekonvergerat emot ett egenvarde till ursprungliga matrisen verkar stamma. Det visade sig att daegenvardena lag tatt konvergerade fler ritzvarden mot sina respektive korrekta egenvarden. Omegenvardena var av spridd storleksordning fick vi istallet degeneration av ritzvarden som da kon-vergerat emot samma egenvarde. Detta visade sig valdigt tydligt da vi hade en rektangelfordeladslumpmatris. Google anvander sig av ett liknande satt da de vill ranka internetsidor. Da ar ma-trisen A uppbyggd av ettor och nollor. En etta betyder att nod i lankar till nod j. Da kommer Aatt ha ett dominerande egenvarde som ar perronroten och dess egenvektor ar positiv. Da kan manalltsa se egenvektorn som stationara lagets slumpvandring. Denna mtris tappar ortogonalitet iett tidigt skede.
Da vi anvande oss av Lanczosalgoritmen har vi utnyttjat det billiga sattet att rakna framresidualuppskattningen och slipper pa sa satt gora nagra matrismultiplikationer. Detta far ansessom vettigt da det stundtals ror sig om relativt stora korningar.
9
2 Snabb Fouriertransform - FFT
Utvecklingsavdelningen pa Mathworks vet uppenbarligen precis var dom haller pa med, och domar riktigt bra pa det ocksa, men det ar inte det intressanta. Det intressanta ar hur mycket battreen algoritm kan goras genom nagra fa skarpsinniga observationer.
Uttrycket nedan beskriver den Diskreta FourierTransformen och kallas sa da det harleds urden kontinuerliga motsvarigheten.
Fn ≡N−1∑
k=0
fke−2πink/N
DFT, forkortat, har manga trevliga egenskaper. Exempelvis kan namnas att transformenavslojar dold periodicitet i matdata och ger ett matt pa, i datamangder, periodiska komponentersrelativa styrka.
2.1 En naiv implementation
I den har delen av laborationen skulle vi forst implementera den naiva diskreta fouriertransfor-men, given enligt nedan.
f = Fnf , dar Fn ar fouriermatrisen
Detta gjordes pa tva satt, forst genom att generera F med hjalp av dubbla for-sligor och sedangenom att anvanda oss av matlabs inbyggda matrisaritmetik. Det sistnamnda implementeradessom foljer.
function result = dft(f)n = length(f);result = ((exp(-2*pi*i/n)*ones(n)).^((0:1:n-1)’*(0:1:n-1)))*f;
Darefter jamfordes de tva for att avgora vilken som var lampligast att anvanda. Se figur 14.
0 50 100 150 200 250 300 350 400 450 5000
1
2
3
4
5
6
7
Fouriermatrisens sida
Tid
en (
sek)
DFT en rad kodDFT for slingor
Figur 14: Algoritmjamforelse tva naiva implementationer emellan
10
Som forvantat, i samklang med forelasare i numerisk analys negativa installning till for-slingor,ar det lampligare att anvanda matrisaritmetiken. Emellertid bor det noteras att det spelar ingenroll for matriser med mindre an 19 600 element, dvs. 140 × 140.
Sedan undersokte vi ett par olika slumpvektorer vars langd var nagon liten multipel av tusen.Detta innebar att var funktion genererade 1000 × 1000 matriser och multiplicerade dessa denslumpade kolonnvektorn. Vi har valt ut nagra fa av dessa berakningar for att illustrera denanmarkningsvarda skillnaden mellan dft() och fft(). Dessa berakningar presenteras i tabell 1samt i figur 15.
Tabell 1: Tidsatgang vid korning pa polaris.nada.kth.se
n Naiv implementation (sek) MATLABs FFT (sek)1000 7.31000 0.000102000 33.28999 0.000203000 80.67999 0.001404000 151.05000 (ca. 2:30 min) 0.001705000 245.09000 0.001906000 363.97000 0.002607000 508.23000 (ca. 8:30 min) 0.00310
1000 2000 3000 4000 5000 6000 700010
−4
10−3
10−2
10−1
100
101
102
103
Tidsjämförelse emellan matlabs rutin och vår naiva
Stoleken på matrisen − n
Tid
såtg
ånge
n i s
ekun
der
− s
Vår naivaMatlabs
Figur 15: Jamforelse emellan var naiva och Matlabs rutin
Sag nu att man har 7000 olika matvarden fran nagot hemligt experiment man har utfortpa sina kurskamrater och man i denna datamangd vill forsoka hitta nagot monster. Genom attanvanda sig av matlabs inbyggda funktion ar berakningen gjord pa mindre an ett ogonblickistallet for att kasta bort hela kafferasten. Tyvarr kunde vi inte gora nagra ytterligare un-dersokningar, for annu storre n, da var naiva implementation glufsade i sig nastan allt minnesom fanns tillgangligt pa testmaskinen.
11
2.2 En harledning av periodicitetsegenskaper
Tanken bakom FFT, den snabba fouriertransformen, ar att forsoka hitta periodicitet i fourier-matrisen och pa sa satt minska antalet nodvandiga berakningar. Den bakomliggande iden ar attman hela tiden gora likformiga forskjutningar for att pa sa satt hitta den efterfragade period-iciteten. Detta gors genom att man forst noterar att matrismultiplikation inte ar nagonting annatan additioner och multiplikationer och sedan gor en uppdelning utifran detta enligt
Fnf = A · f0 + B · f1 + C · f2 + . . .
Valjer man nu en listig uppdelning av f, var n:te term, racker det med att man bara sparar en avovanstaende matriser. Detta har att gora med vandermondestrukturen hos fouriermatrisen somtillater introduktionen av en upplyftningsoperator Λ. Denna lyfter exponenten hos frekvenserna,ωn, ett steg uppat. Har man gjort denna observation faller det sig naturligt att en uppdelningav tre stycken termer ges av
Fnf = Af0 + ΛAf1 + Λ2Af2
dar ingaende matriser definieras analogt med laborationsanvisningarna. Detta ar ju uppenbarli-gen trevligt eftersom man bara behover anvanda en n× n/m matris, dar m ar valet av termup-pdelning. Tanker man sig nu att man fixerar A-matrisen och undersoker vad som hander omman tar exakt ett n/m steg at hoger finner man att
ω(n/m+j)mkn = e−2πi(n/m+j)mk/n = e−2πike−2πimjk/n = ωjk
n/m
I fallet m = 3 undersoker man ovanstaende for j = 0 och 2n/m och dessa tre resultat tillsam-mans medfor da att man kan skriva A som tre pa varandra staende Fn/3 matriser. Analogt kanman fundera pa vad som hander om man tar lika langa steg utmed en linje frekvensexponenteruppstallda enligt 1, ωn, ω2
n, . . . , ωn−1n , alltsa diagonalen i Λ.
ωn/m+kn = e−2πi(n/m+k)/n = e−2πi/mωk
n = z1ωkn
Undersoker man ocksa detta for 2n/3 trillar det ut ytterligare en komplex konstant z2 = z1 =−1/2 + i
√3/2. Saledes kan man nu skriva transformen som
Fnf =
Fn/3
Fn/3
Fn/3
f0 +
Dn/3 0 00 z1Dn/3 00 0 z1Dn/3
Fn/3
Fn/3
Fn/3
f1+
+
D2n/3 0 00 z2
1D2n/3 0
0 0 z21D
2n/3
Fn/3
Fn/3
Fn/3
f2
Ovanstaende kan nu anvandas for att skriva om algoritmen som darefter far vasentligt hogreprestationsgrad.
2.3 Undersokning av komplexitetsegenskaper
I laborationsanvisningarna anges en rekursionsformel for berakningskostnaden enligt
bn = bn/2 +32n
12
da man delar upp berakningen i tva stycken termer. Det bor anses att Fnf = Af0 + Bf1 bordekunna skrivas bn = 2bn/2 + n dar termen n kommer fran addition av tva stycken n× 1 vektorer.Det viktiga ar nu att beroendet fortfarande ar linjart da man delar upp B enligt B = ΛA. Antarman att algoritmen kan konstrueras sa att nollelement ignoreras och man samtidigt inte bryrsig om strukturen hos diagonalen leder detta till att det maste goras n stycken multiplikationer.Emellertid delas diagonalen upp i tva stycken talfoljder som enbart skiljer pa ett tecken. Kan mannu anse att ett teckenbyte pa halften av elementen inte kraver nagon relevant berakningskraftracker det med n/2 multiplikationer och man kommer da fram till den angivna rekursionsformlen.
Generaliserar man ett steg, till tre termer, borde motsvarande transformationskostnad kunnaskrivas
bn = 3bn/3 + 2n + f(n)
dar 2n kommer ur en summering av tre n×1-vektorer och f(n) uppkommer da man introducerartidigare namnda Λ. Det som forefaller lite lurigt ar om rotationer i C ska raknas som en ickeforsumbar operation. Om man valjer att gora detta blir kostnaden for introduktionen 2n: noperationer fran varje diagonalmatrismultiplikation med antagandet enligt forra stycket. A andrasidan, om man kan anse att skalningen kraver forsumbar berakningskraft, erhaller man istallet2n/3 operationer av samma anledning som vid tvatermsuppdelningen. Beroendet ar fortfarandelinjart och konstanten framfor n ar inte sa viktig men det ska fortfarande noteras att om manar oforsiktig kommer berakningarna ta langre tid an vad de skulle behova gora. Exempelvis kandet namnas att beroendet blir kvadratiskt om man utfor multiplikation med nollorna i Λ. Dettainnebar att vi antingen kan anvanda bn = 3bn/3 + 4n eller bn = 3bn/3 + 8
3n. Oavsett vilkenav dessa man valjer kan ett komplexitetsuttryck hittas med hjalp av huvudsatsen (the mastertheorem).
Huvudsatsen Antag att T (n) ges av rekursionen T (n) = aT (n/b) + F (n) och T (1) = d dagaller foljande
1. Om F (n) vaxer langsammare an nlogba galler att T (n) ∈ O(nlogba
)
2. Om F (n) ∈ O(nlogba
)galler att T (n) ∈ O(
nlogba log n)
3. Om F (n) vaxer snabbare an nlogba galler att T (n) ∈ O(F (n))
Da satsen uppenbarligen galler for den formulerade rekursionen inses att (2) ar tillampbarvilket i sin tur innebar nedanstaende.
bn ∈ O(n log n)
Ytterligare, precis som i laborationsanvisningarna kan man skriva
bn =83n log3 n
2.4 En rekursiv implementation
Nu nar vi har gatt igenom varfor det ar fordelaktigt att skriva om fouriertransformen pa det harsattet ar det dags att implementera den och testa den praktiskt. Vi illustrerar tanken bakom varrekursiva implementation med tre stycken figurer.
13
� � � � � � � � � �
� � � � �
� � �
� � � � � � � � � � � � � � � � � � � �
� � � � �
� � �� � �
Figur 16: Forst skickas kolonnvektorn f, som man vill transformera, som argument till funktionen.I den forsta noden delas vektorn upp i tre nya vektorer f0, f1 och f2 som innehaller var tredjeelement i f.
� � � � � � � � � � � � � � �
� � � � �
� � �
�
� � � � � � � � � � � � � � �
� � � � �
� � �
�
� � � � � � � � � � � � � � �
� � � � �
� � �
�
Figur 17: Vektorerna delas upp till det endast kvarstar tre stycken element i varje. Dessa multi-pliceras med fouriermatrisen F3 och genererar totalt m stycken nya vektorer om n = 3m.
� � � � � � � � � � � � � � �
� � � � �
� � � � � � � � � � � � � � �
� � � � �
� � � � � � � � � � � � � � �
� � � � �
Figur 18: De nya vektorerna kombineras nu, enligt den harledda formeln, hela vagen upp tilltoppen av rekursionstradet. Alltsa 3 × 1 → 9 × 1 → · · · → n × 1 som ar den transformeradevektorn f = Fnf . Pa grund av den valda strukturen kan varje ny vektorkonstruktion goras ilinjar tid vilket medfor att algoritmen blir effektiv.
14
De beskrivande figurerna realiseras i den matlabkod som foljer.
function result = fft_r(f)n = length(f);omega = exp(-2*pi*i/n);if n == 3
% Figur 17result = [1,1,1;1,omega,omega^2;1,omega^2,omega^4]*f;
else% Figur 16 och 17box1 = fft_r(f(1:3:n-2));box2 = fft_r(f(2:3:n-1));box3 = fft_r(f(3:3:n));% Figur 18result = [box1;box1;box1] +
[omega.^(0:-1:1-n)]’.*[box2;box2;box2] ++ [omega.^(0:-2:2-2*n)]’.*[box3;box3;box3];end
2.5 En jamforelse av berakningseffektivitet
Forst tittade vi pa n = 38 vilket ar ganska nara det varde som avslutade jamforelserna avden naiva implementationen. Okandes sedan exponenten med ett fram till och med 14. Dessaberakningar presenteras i tabell 2 samt i figur 19.
Tabell 2: Tidsatgang vid korning pa polaris.nada.kth.se
n Var rekursiva fft (sek) MATLABs FFT (sek)6561 (38) 0.959999 0.00270019683 (39) 3.040000 0.00880059049 (310) 9.860000 0.026600177147 (311) 32.180000 0.098200531441 (312) 105.280000 0.3358001594323 (313) 344.339999 0.9559994782969 (314) - 4.696000
De slutsatser som kan dras ar att det uppenbarligen finns mer algoritmoptimering att gora.Troligen ar det sa att man kan konstruera metoder for att kanna av vilken variant av fourierup-pdelning som lampar sig bast vi olika langd och utseende pa indata. Ytterligare kan man ocksatanka sig att viss optimering kan goras nere pa processor niva vilket vi inte kan komma at daman arbetar flera lager upp hierarkin.
15
103
104
105
106
107
10−3
10−2
10−1
100
101
102
103
Tidsjämförelse emellan matlabs fft och vår fft (med bas 3)
Stoleken på matrisen − n
Tid
såtg
ånge
n i s
ekun
der
− s
Vår fftMatlabs
Figur 19: Jamforelse emellan var fft och Matlabs
2.6 Ytterligare funderingar
FFT, nar den implementeras korrekt, ar uppenbarligen en fruktansvart snabb algoritm for hanter-ing av stora matriser med ratt utseende. Fran borjan anvandes den som bekant for att analysernasignaler eftersom dessa analyseras antingen som en funktion av tid f(t) eller som en funktion avfrekvens f(ω), transformen fungerar som en brygga mellan dessa tva. Detta kom att revolutioneratelekommunikationsindustrin under forra arhundradet, det ar inte svart att forsta varfor.
Avslutningsvis kan namnas att den rekursiva implementationen ar uppenbarligen vasentligtlangsammare an den implementation som matlab har inbyggd. Det far oss att stalla fragan omdenna verkligen ar rekursiv, det borde finns mojlighet att skriva en snabb iterativ algoritm.Dessutom upplever vi att det finns mojlighet att valja matrisuppdelningen listigt med avseendepa vektorn man ska transformera. Vi har emellertid inte forsokt att gora nagonting sadant dauppgiften var att undersoka slumpvektorer av olika langder.
16