In [2]:
from IPython.html.services.config import ConfigManager
from IPython.utils.path import locate_profile
cm = ConfigManager(profile_dir=locate_profile(get_ipython().profile))
cm.update('livereveal', {
'theme': 'sky',
'transition': 'zoom',
'start_slideshow_at': 'selected',
})
Out[2]:
In [9]:
%matplotlib inline
import matplotlib.pyplot as plt
plt.xkcd()
import seaborn as sns
Fast Fourier Transform relies on the uniform grid!
$$g(x) = \int_a^b e^{i x y} f(y) dy $$Then, the FFT is just
$$g_k = \sum_l w^{kl} f_l, \quad w^n = 1.$$In fact, it should be FFFT (Fast Finite Fourier Transform), but FFT is better.
Quiz: Can you find low-rank submatrices in the Fourier matrix?
Consider the evaluation of Fourier integral operators
$u(x) = \sum_{k \in \Omega} e^{2 \pi i \Phi(x,k)} f(k), \quad x \in X,$
where $\Omega = \{ -\frac{N}{2} \leq k_1, k_2 \leq \frac{N}{2} \}$.
Both $x$ and $k$ can be two (three) dimensional.
In two dimensions with $n \times n$ grid evaluation will take $\mathcal{O}(n^4)$
Assumption: $\Phi(x, k)$ is smooth and homogenious, $\Phi(x, \lambda k) = \lambda \Phi(x, k)$
For simplicity, consider 2D case.
First step: represent frequency variables in polar coordinates
$k = (k_1, k_2) = \frac{1}{\sqrt{2}} Nnp_1 e^{2 \pi i p_2}, \quad e^{2 \pi i p_2} = (\cos 2 \pi i p_2, \sin 2 \pi i p_2)$
This guarantees that each point $(p_1, p_2)$ belongs to the unit square $[0, 1]^2$.
Due to homogenuity, $\Phi(x, k) = N \Psi(x, p)$
Then, $ e^{2 \pi i n \Psi(x, p)} = e^{2 \pi i n \Psi(x_0(A), p)} e^{2 \pi i n \Psi(x, p_0(B))} \cdot e^{-2 \pi i n \Psi(x_0(A), p_0(B))} e^{2 \pi i n R^{AB}} $
Applying mean-value theorem to $R^{AB}$ we get $R^{AB} = \mathcal{O}(\frac{1}{n})$
It means, that the phase is bounded, thus can be approximated by low-rank
In [4]:
from IPython.core.display import HTML
def css_styling():
styles = open("./styles/custom.css", "r").read()
return HTML(styles)
css_styling()
Out[4]: