Skip to content
Fourier Approximation

Fourier Approximation

fourier.py
import matplotlib.pyplot as plt
import numpy as np

def f(x):
    mask = x < 0.3
    mask2 = np.logical_and(x >= 0.3 , x < 0.7)
    mask3 = x >= 0.7
    out = np.zeros_like(x)
    out[mask] = 0
    out[mask2] = 1
    out[mask3] = 2 - 5*np.exp(x[mask3] - 0.7)
    return out

def base(k, x):
    return np.exp(np.pi * 2 * 1.j * k * x)

def inter(c, x):
    m = (len(c) - 1)//2
    out = np.zeros_like(x, dtype=complex)
    for i in range(-m, m+1, 1):
        out += base(i, x) * c[i]
    return out

a = 0.0
b = 1.0
tt = np.linspace(a,b,1000)
n = 20

for j in range(4, n, 4):
    p = np.linspace(a,b,j)
    c = np.fft.fft(f(p)) / j
    plt.plot(tt, f(tt))
    plt.plot(tt, np.real(inter(c, tt)))

plt.show()