FFT
<<< Powrót do strony głównej
przedmiotu Metody numeryczne
Oglądaj wskazówki i rozwiązania __SHOWALL__
Ukryj wskazówki i rozwiązania __HIDEALL__
Ćwiczenie
Udowodnij, że faktycznie macierz jest macierzą unitarną,
to znaczy .
Rozwiązanie
Należy przeliczyć, korzystając ze struktury macierzy i jej symetrii, że
Parser nie mógł rozpoznać (nieznana funkcja „\begincases”): {\displaystyle \displaystyle w_j^* w_k = \begincases N, \qquad \mbox{gdy } j = k\\ 0, \qquad \mbox{w przeciwnym przypadku,} \endcases }
gdzie oznacza -ty wiersz (kolumnę) macierzy . Dowód tego faktu to
prosty wniosek ze wzoru na sumę wyrazów ciągu geometrycznego.
Ćwiczenie
Jak zastosować FFT do szybkiego wymnożenia dwóch, rzeczywistych wektorów
długości przez macierz DFT?
Rozwiązanie
Niech dane wektory to . Oczywiście możemy przyłożyć DFT do zespolonego wektora ,
Po dłuższych rachunkach stwierdzamy, że
Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned F_N f &= \frac{1}{2} \left( Re(w + T_N w) + i\, Im(w- T_Nw)\right)\\ F_N g &= \frac{1}{2} \left( Im(w + T_N w) - i\, Re(w- T_Nw)\right), \endaligned}
gdzie jest operatorem, który odwraca kolejność wszystkich (oprócz
pierwszej) współrzędnych wektora, tzn. .
Ćwiczenie
Jak zastosować FFT do szybkiego wymnożenia jednego rzeczywistego wektora
długości przez macierz ?
Wskazówka
Sprowadź zadanie do poprzedniego!
Ćwiczenie
Podaj algorytm wyznaczania , gdzie jest zadanym
wektorem, a jest macierzą DFT.
Wskazówka
Sprowadź zadanie do zadania mnożenia przez macierz DFT!
Rozwiązanie
Ponieważ
to stąd implementacja w Octave (przypomnijmy, że w Octave operator '
oznacza
hermitowskie sprzężenie) mógłby wyglądać tak:
Ćwiczenie
Zaimplementuj rekurencyjną wersję FFT i porównaj wyniki (zwłaszcza: czas wykonania) z wynikami
procedury z biblioteki FFTW, a także z procedurą opartą na mnożeniu wprost przez macierz (możesz nawet skorzystać ze zoptymalizowanych BLASów).