```
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!

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]:
```