Numerical Methods Contents - SAM
Numerical Methods Contents - SAM
Numerical Methods Contents - SAM
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 />
Ôº º¿