21.06.2014 Views

Numerical Methods Contents - SAM

Numerical Methods Contents - SAM

Numerical Methods Contents - SAM

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

8 end<br />

9 t1 = min ( t1 , toc ) ;<br />

10 end<br />

11 [ I , J ] = meshgrid ( 0 : n−1 ,0:n−1) ; F = exp(−2∗pi∗ i ∗ I .∗ J / n ) ;<br />

12 t2 = realmax ; for k =1:5 , t i c ; c = F∗y ; t2 = min ( t2 , toc ) ; end<br />

13 t3 = realmax ; for k =1:5 , t i c ; d = f f t ( y ) ; t3 = min ( t3 , toc ) ; end<br />

14 res = [ res ; n t1 t2 t3 ] ;<br />

15 end<br />

16<br />

17 figure ( ’name ’ , ’FFT t i m i n g ’ ) ;<br />

18 semilogy ( res ( : , 1 ) , res ( : , 2 ) , ’ b−’ , res ( : , 1 ) , res ( : , 3 ) , ’ k−’ ,<br />

res ( : , 1 ) , res ( : , 4 ) , ’ r−’ ) ;<br />

19 ylabel ( ’ { \ b f run time [ s ] } ’ , ’ Fontsize ’ ,14) ;<br />

20 xlabel ( ’ { \ b f vector l e n g th n } ’ , ’ Fontsize ’ ,14) ;<br />

21 legend ( ’ loop based computation ’ , ’ d i r e c t m a trix m u l t i p l i c a t i o n ’ , ’MATLAB<br />

f f t ( ) f u n c t i o n ’ ,1) ;<br />

22 p r i n t −deps2c ’ . . / PICTURES/ f f t t i m e . eps ’<br />

Ôº¿ º¿<br />

The secret of MATLAB’s fft():<br />

the Fast Fourier Transform algorithm [14]<br />

(discovered by C.F. Gauss in 1805, rediscovered by Cooley & Tuckey in 1965,<br />

one of the “top ten algorithms of the century”).<br />

An elementary manipulation of (7.2.8) for n = 2m, m ∈ N:<br />

Note m-periodicity:<br />

n−1 ∑<br />

c k = y j e −2πi n jk<br />

=<br />

j=0<br />

m−1 ∑<br />

m−1<br />

y 2j e −2πi n 2jk ∑<br />

+<br />

j=0<br />

m−1 ∑<br />

= y 2j e −2πi m<br />

} {{ jk }<br />

j=0 =ωm<br />

} {{ jk<br />

}<br />

=:˜c even<br />

k<br />

˜c even<br />

k<br />

= ˜c even<br />

k+m ,<br />

˜codd k<br />

j=0<br />

+e −2πi n k ·<br />

= ˜c odd<br />

k+m .<br />

y 2j+1 e −2πi n (2j+1)k<br />

m−1 ∑<br />

y 2k+1 e −2πi m<br />

} {{ jk }<br />

j=0 =ωm<br />

} {{ jk<br />

}<br />

=:˜c odd<br />

k<br />

.<br />

(7.3.1)<br />

Ôº º¿<br />

MATLAB-CODE naive DFT-implementation<br />

c = zeros(n,1);<br />

omega = exp(-2*pi*i/n);<br />

c(1) = sum(y); s = omega;<br />

for j=2:n<br />

c(j) = y(n);<br />

for k=n-1:-1:1<br />

c(j) = c(j)*s+y(k);<br />

end<br />

s = s*omega;<br />

end<br />

run time [s]<br />

10 1<br />

10 0<br />

10 −1<br />

10 −2<br />

10 −3<br />

10 −4<br />

10 −5<br />

10 −6<br />

loop based computation<br />

direct matrix multiplication<br />

MATLAB fft() function<br />

0 500 1000 1500 2000 2500 3000<br />

vector length n<br />

Incredible! The MATLAB fft()-function clearly beats the O(n 2 ) asymptotic complexity of the other<br />

implementations. Note the logarithmic scale!<br />

✸<br />

Ôº º¿<br />

Note:<br />

(7.3.1):<br />

˜c even<br />

k<br />

, ˜c odd<br />

k<br />

from DFTs of length m!<br />

with y even := (y 0 , y 2 ,...,y n−2 ) T ∈ C m :<br />

with y odd := (y 1 , y 3 ,...,y n−1 ) T ∈ C m :<br />

✗<br />

✖<br />

Idea:<br />

(˜c<br />

even) m−1<br />

k k=0 = F my even ,<br />

( ) m−1<br />

˜c odd<br />

k = F my odd .<br />

k=0<br />

DFT of length 2m = 2× DFT of length m + 2m additions & multiplications<br />

divide & conquer recursion<br />

(for DFT of length n = 2 L )<br />

FFT-algorithm<br />

Computational cost of fftrec:<br />

Code 7.3.3: Recursive FFT<br />

1 function c = f f t r e c ( y )<br />

2 n = length ( y ) ;<br />

3 i f ( n == 1) , c = y ; return ;<br />

4 else<br />

5 c1 = f f t r e c ( y ( 1 : 2 : n ) ) ;<br />

6 c2 = f f t r e c ( y ( 2 : 2 : n ) ) ;<br />

7 c = [ c1 ; c1 ] +<br />

( exp(−2∗pi∗ i / n ) . ^ ( ( 0 : n−1) ’ ) )<br />

. ∗ [ c2 ; c2 ] ;<br />

8 end<br />

✔<br />

✕<br />

Ôº º¿

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!