Séries de Fourier#

Les mathématiques sont la musique de la raison.

Joseph Fourier

Introduction#

Les séries entières développent les fonctions en puissances de \(x\). Les séries de Fourier les développent en fonctions trigonométriques \(e^{int}\) (ou \(\cos(nt)\), \(\sin(nt)\)). Ce point de vue, introduit par Fourier pour résoudre l’équation de la chaleur (1822), est fondamental en physique (analyse spectrale, traitement du signal, équations aux dérivées partielles) et en mathématiques (analyse harmonique, théorie des distributions).

Hide code cell source

import numpy as np
import matplotlib.pyplot as plt

fig, axes = plt.subplots(3, 1, figsize=(9, 14))

x = np.linspace(-np.pi, np.pi, 1000)

# --- Créneau : approximations successives ---
ax = axes[0]
f_creneau = np.sign(np.sin(x))
ax.plot(x, f_creneau, 'k-', lw=2.5, label='Créneau $f$')

for N, c in zip([1, 3, 7, 21], plt.cm.Blues(np.linspace(0.3, 0.95, 4))):
    sN = sum(4/(np.pi*(2*k-1)) * np.sin((2*k-1)*x) for k in range(1, N+1))
    ax.plot(x, sN, color=c, lw=1.8, alpha=0.9, label=f'$N={N}$')

ax.set_xlim(-np.pi, np.pi); ax.set_ylim(-1.5, 1.5)
ax.set_title('Créneau : $S_N f \\to f$\n(phénomène de Gibbs en $x=0$)', fontsize=10)
ax.set_xlabel('$x$'); ax.legend(fontsize=7)

# --- Phénomène de Gibbs ---
ax = axes[1]
ax.plot(x, f_creneau, 'k-', lw=2.5, label='Créneau')
for N, c in zip([50, 100, 300], plt.cm.Reds(np.linspace(0.3, 0.9, 3))):
    sN = sum(4/(np.pi*(2*k-1)) * np.sin((2*k-1)*x) for k in range(1, N+1))
    ax.plot(x, sN, color=c, lw=1.5, alpha=0.9, label=f'$N={N}$')

ax.set_xlim(-0.3, 0.3); ax.set_ylim(0.7, 1.4)
ax.set_title('Phénomène de Gibbs\n(dépassement $\\approx 9\\%$ en toute discontinuité)', fontsize=10)
ax.set_xlabel('$x$'); ax.legend(fontsize=7)
ax.axhline(1, color='k', lw=0.8, linestyle=':')
ax.axhline(1 + 2/np.pi * np.sin(np.pi), color='gray', lw=0.8, linestyle='--')
# Valeur du dépassement de Gibbs : (1/pi) int_0^pi sin(t)/t dt ≈ 1.0895
ax.axhline(1.0895, color='gray', lw=0.8, linestyle='--', alpha=0.5)
ax.text(0.05, 1.1, f'Limite $\\approx 1 + 2\\int_0^\\pi\\frac{{\\sin t}}{{\\pi t}}dt$', fontsize=7, color='gray')

# --- Spectre de fréquence ---
ax = axes[2]
ns = np.arange(1, 30, 2)  # harmoniques impairs
amplitudes_creneau = 4/(np.pi * ns)
amplitudes_triangle = 8/(np.pi**2 * ns**2)  # fonction triangle

ax.stem(ns, amplitudes_creneau, linefmt='b-', markerfmt='bo', basefmt=' ', label='Créneau: $4/(n\\pi)$')
ax.stem(ns, amplitudes_triangle, linefmt='r-', markerfmt='rs', basefmt=' ', label='Triangle: $8/(n^2\\pi^2)$')
ax.set_xlabel('Harmonique $n$')
ax.set_ylabel('$|c_n|$')
ax.set_title('Spectre : décroissance liée\nà la régularité de $f$', fontsize=10)
ax.legend(fontsize=8)
ax.text(15, 0.8, '$C^0$: $O(1/n)$', color='blue', fontsize=9)
ax.text(15, 0.2, '$C^1$: $O(1/n^2)$', color='red', fontsize=9)

plt.suptitle('Séries de Fourier : approximations, phénomène de Gibbs, spectres', fontsize=12, fontweight='bold')
plt.tight_layout()
plt.show()
_images/5fe3c93d9fbf094abf3f67eef2f4578c98626667205fb428405cb40d0240cc1e.png

L’espace des fonctions périodiques#

Définition 218 (Fonctions \(2\pi\)-périodiques)

\(\mathcal{C}_{2\pi}\) : fonctions continues \(f : \mathbb{R} \to \mathbb{C}\), \(2\pi\)-périodiques. \(\mathcal{C}_{2\pi}^{pm}\) : continues par morceaux et \(2\pi\)-périodiques.

Définition 219 (Produit scalaire \(L^2\))

\[\langle f, g\rangle = \frac{1}{2\pi} \int_{-\pi}^{\pi} f(t)\overline{g(t)}\,dt, \qquad \|f\|_2 = \sqrt{\langle f, f\rangle}\]

Proposition 298 (Système trigonométrique orthonormal)

La famille \((e_n)_{n \in \mathbb{Z}}\), \(e_n(t) = e^{int}\), est orthonormale : \(\langle e_n, e_m\rangle = \delta_{nm}\).

Proof. \(\langle e_n, e_m\rangle = \frac{1}{2\pi}\int_{-\pi}^{\pi} e^{i(n-m)t}\,dt = \delta_{nm}\) (pour \(n \neq m\) : \(\int e^{ikt}\,dt = [e^{ikt}/(ik)]_{-\pi}^{\pi} = 0\) car \(e^{ik\pi} = e^{-ik\pi}\)).

Coefficients de Fourier#

Définition 220 (Coefficients de Fourier)

Les coefficients de Fourier (forme complexe) de \(f \in \mathcal{C}_{2\pi}^{pm}\) :

\[c_n(f) = \langle f, e_n\rangle = \frac{1}{2\pi}\int_{-\pi}^{\pi} f(t)e^{-int}\,dt, \quad n \in \mathbb{Z}\]

Forme trigonométrique (pour \(f\) réelle) :

\[a_0 = \frac{1}{2\pi}\int_{-\pi}^{\pi} f(t)\,dt, \quad a_n = \frac{1}{\pi}\int_{-\pi}^{\pi} f(t)\cos(nt)\,dt, \quad b_n = \frac{1}{\pi}\int_{-\pi}^{\pi} f(t)\sin(nt)\,dt\]

Lien : \(c_0 = a_0\), \(c_n = (a_n - ib_n)/2\), \(c_{-n} = (a_n + ib_n)/2 = \overline{c_n}\).

Définition 221 (Série de Fourier)

La série de Fourier de \(f\) est

\[S_N(f)(x) = \sum_{n=-N}^{N} c_n e^{inx} = a_0 + \sum_{n=1}^N (a_n\cos(nx) + b_n\sin(nx))\]

Exemple 109

Créneau \(f = \text{sgn}(\sin t)\) : \(a_n = 0\), \(b_n = \frac{4}{n\pi}\) pour \(n\) impair, \(0\) sinon.

\[f(t) \sim \frac{4}{\pi}\sum_{k=0}^\infty \frac{\sin((2k+1)t)}{2k+1}\]

Fonction \(|t|\) : \(a_0 = \pi/2\), \(a_n = \frac{2}{n^2\pi}((-1)^n - 1)\) (impairs : \(-4/(n^2\pi)\)), \(b_n = 0\).

En \(t = 0\) : \(0 = \frac{\pi}{2} - \frac{4}{\pi}\sum_{k=0}^\infty \frac{1}{(2k+1)^2}\), d’où \(\sum_{k=0}^\infty \frac{1}{(2k+1)^2} = \frac{\pi^2}{8}\).

Propriétés des coefficients#

Proposition 299 (Symétries)

  • \(f\) paire \(\Rightarrow\) \(b_n = 0\) (série en cosinus)

  • \(f\) impaire \(\Rightarrow\) \(a_n = 0\) (série en sinus)

  • \(f\) réelle \(\Rightarrow\) \(c_{-n} = \overline{c_n}\) (spectre hermitien)

Proposition 300 (Lemme de Riemann-Lebesgue)

Si \(f \in \mathcal{C}_{2\pi}^{pm}\), alors \(c_n(f) \to 0\) quand \(|n| \to +\infty\).

Proof. Pour \(f \in \mathcal{C}^1\) : une intégration par parties donne \(c_n(f) = c_n(f')/(in)\). Comme \(|c_n(f')| \leq \|f'\|_1\), on a \(|c_n(f)| \leq \|f'\|_1/|n| \to 0\).

Proposition 301 (Régularité et décroissance des coefficients)

\[f \in \mathcal{C}^k \implies c_n(f) = O(1/|n|^k)\]

Plus \(f\) est régulière, plus ses coefficients décroissent vite. Principe fondamental : régularité \(\leftrightarrow\) décroissance spectrale.

Proof. \(k\) intégrations par parties : \(c_n(f) = c_n(f^{(k)})/(in)^k\). Comme \(|c_n(f^{(k)})| \leq \|f^{(k)}\|_1\).

Convergence de la série de Fourier#

Convergence en norme \(L^2\)#

Théorème 28 (Inégalité de Bessel)

\[\sum_{n=-N}^{N} |c_n(f)|^2 \leq \|f\|_2^2\]

Proof. \(0 \leq \|f - S_N f\|_2^2 = \|f\|_2^2 - \sum_{|n|\leq N}|c_n|^2\) (développer en utilisant \(\langle f, e_n\rangle = c_n\) et l’orthonormalité).

Théorème 29 (Égalité de Parseval)

Pour \(f \in \mathcal{C}_{2\pi}^{pm}\) :

\[\|f\|_2^2 = \sum_{n=-\infty}^{+\infty} |c_n(f)|^2, \qquad \text{i.e.,} \quad \frac{1}{2\pi}\int_{-\pi}^{\pi} |f(t)|^2\,dt = \sum_{n \in \mathbb{Z}} |c_n(f)|^2\]

Remarque 116

Parseval signifie que \((e_n)_{n \in \mathbb{Z}}\) est une base hilbertienne de \(L^2_{2\pi}\) : toute \(f \in L^2\) est entièrement déterminée par ses coefficients de Fourier, et la norme se conserve. C’est l’analogue de Pythagore en dimension infinie.

L’application \(f \mapsto (c_n)_{n \in \mathbb{Z}}\) est une isométrie \(L^2_{2\pi} \to \ell^2(\mathbb{Z})\).

Exemple 110

Problème de Bâle (Euler 1735).

Pour \(f(t) = t\) sur \([-\pi, \pi]\) : \(b_n = 2(-1)^{n+1}/n\), \(a_n = 0\).

Parseval : \(\frac{1}{2\pi}\int_{-\pi}^{\pi} t^2\,dt = \frac{\pi^2}{3} = \frac{1}{2}\sum_{n=1}^\infty \frac{4}{n^2}\), d’où \(\boxed{\sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}}\).

Convergence ponctuelle#

Théorème 30 (Théorème de Dirichlet)

Soit \(f\) \(2\pi\)-périodique, continue par morceaux et de classe \(\mathcal{C}^1\) par morceaux. Pour tout \(x \in \mathbb{R}\) :

\[S_N(f)(x) \xrightarrow[N \to +\infty]{} \frac{f(x^+) + f(x^-)}{2}\]

En particulier, si \(f\) est continue en \(x\) : \(S_N(f)(x) \to f(x)\).

Remarque 117

La preuve utilise le noyau de Dirichlet :

\[D_N(t) = \sum_{n=-N}^{N} e^{int} = \frac{\sin\left((N+\frac{1}{2})t\right)}{\sin(t/2)}\]

et l’écriture \(S_N(f)(x) = \frac{1}{2\pi}\int_{-\pi}^{\pi} f(x-t)D_N(t)\,dt\).

Le phénomène de Gibbs : en toute discontinuité, la série de Fourier dépasse la valeur de \(f\) d’environ \(9\%\) (plus précisément : dépassement \(\approx \frac{2}{\pi}\int_0^\pi \frac{\sin t}{t}\,dt - 1 \approx 0.0895\)), quel que soit \(N\).

Convergence normale#

Théorème 31 (Convergence normale pour les fonctions régulières)

Si \(f \in \mathcal{C}^1\) et \(2\pi\)-périodique, la série de Fourier de \(f\) converge normalement (et donc uniformément) vers \(f\).

Proof. \(c_n(f) = c_n(f')/(in)\). Par Cauchy-Schwarz : \(\sum_{n \neq 0} |c_n(f)| = \sum \frac{|c_n(f')|}{|n|} \leq \left(\sum \frac{1}{n^2}\right)^{1/2} \left(\sum |c_n(f')|^2\right)^{1/2} = \frac{\pi}{\sqrt{3}} \|f'\|_2 < +\infty\).

Noyau de Fejér et convergence des moyennes#

Définition 222 (Noyau de Fejér et moyennes de Césaro)

Le noyau de Fejér est \(K_N(t) = \frac{1}{N+1}\sum_{n=0}^N D_n(t) = \frac{1}{N+1}\frac{\sin^2((N+1)t/2)}{\sin^2(t/2)} \geq 0\).

Les moyennes de Césaro sont \(\sigma_N(f) = \frac{1}{N+1}\sum_{n=0}^N S_n(f)\).

Théorème 32 (Théorème de Fejér)

Si \(f \in \mathcal{C}_{2\pi}\), alors \(\sigma_N(f) \to f\) uniformément.

Proof. \(K_N \geq 0\), \(\frac{1}{2\pi}\int K_N = 1\), et \(\sup_{|t| \geq \delta} K_N(t) \to 0\) pour tout \(\delta > 0\) : propriétés d’une approximation de l’identité (bonne noyau).

\(|\sigma_N(f)(x) - f(x)| \leq \frac{1}{2\pi}\int_{-\pi}^{\pi} |f(x-t)-f(x)| K_N(t)\,dt\). Découper l’intégrale en \(|t| < \delta\) (contrôlé par continuité uniforme) et \(|t| \geq \delta\) (contrôlé par décroissance de \(K_N\)).

Hide code cell source

import numpy as np
import matplotlib.pyplot as plt

fig, axes = plt.subplots(3, 2, figsize=(12, 14))

x = np.linspace(-np.pi, np.pi, 1000)

# --- Dent de scie ---
ax = axes[0, 0]
f_scie = x.copy()  # f(t)=t sur (-pi,pi), puis periodique
ax.plot(x, f_scie, 'k-', lw=2.5, label='$f(t)=t$')
for N, c in zip([1, 5, 15, 50], plt.cm.Greens(np.linspace(0.3, 0.95, 4))):
    sN = sum(2*(-1)**(n+1)/n * np.sin(n*x) for n in range(1, N+1))
    ax.plot(x, sN, color=c, lw=1.5, label=f'$N={N}$')
ax.set_title('Dent de scie $f(t)=t$', fontsize=10)
ax.set_xlabel('$t$'); ax.legend(fontsize=7)

# --- |t| : série en cosinus ---
ax = axes[0, 1]
f_abs = np.abs(x)
ax.plot(x, f_abs, 'k-', lw=2.5, label='$f(t)=|t|$')
for N, c in zip([1, 3, 7, 20], plt.cm.Oranges(np.linspace(0.3, 0.95, 4))):
    sN = np.pi/2 + sum(2*(((-1)**n - 1)/(np.pi*n**2)) * np.cos(n*x) for n in range(1, N+1))
    ax.plot(x, sN, color=c, lw=1.5, label=f'$N={N}$')
ax.set_title('$f(t)=|t|$ : série en cosinus ($C^0$, $c_n=O(1/n^2)$)', fontsize=10)
ax.set_xlabel('$t$'); ax.legend(fontsize=7)

# --- Équation de la chaleur ---
ax = axes[1, 0]
# u(x,t) = sum c_n e^{-n^2 t} e^{inx}
# CI : f(x) = x^2 - pi^2/3
def heat_solution(x, t, N=20):
    # f(x) = x^2 sur [-pi,pi] : c_0 = pi^2/3, c_n = 2(-1)^n/n^2 (n!=0)
    u = np.pi**2/3 * np.ones_like(x) + 0j  # c_0 e^0
    for n in range(1, N+1):
        cn = 2*(-1)**n / n**2
        u += cn * (np.exp(1j*n*x) + np.exp(-1j*n*x)) * np.exp(-n**2 * t)
    return u.real

ax.plot(x, x**2, 'k-', lw=2.5, label='$t=0$ : $f(x)=x^2$')
for t, c in zip([0.01, 0.1, 0.5, 2.0], plt.cm.plasma(np.linspace(0.1, 0.9, 4))):
    u = heat_solution(x, t)
    ax.plot(x, u, color=c, lw=1.8, label=f'$t={t}$')
ax.set_title('Équation de la chaleur\n$u_t = u_{xx}$ : lissage en temps', fontsize=10)
ax.set_xlabel('$x$'); ax.legend(fontsize=7)

# --- Parseval : série de Bâle ---
ax = axes[1, 1]
N_terms = np.arange(1, 100)
partial_sums = np.cumsum(1/N_terms**2)
ax.plot(N_terms, partial_sums, 'b-', lw=2, label='$\\sum_{n=1}^N 1/n^2$')
ax.axhline(np.pi**2/6, color='red', lw=2, linestyle='--', label=f'$\\pi^2/6 \\approx {np.pi**2/6:.4f}$')
ax.set_xlabel('$N$'); ax.set_ylabel('$S_N$')
ax.set_title('Parseval pour $f(t)=t$ :\n$\\sum 1/n^2 = \\pi^2/6$', fontsize=10)
ax.legend(fontsize=9)

# --- Noyau de Dirichlet et Fejér ---
ax = axes[2, 0]
t = np.linspace(-np.pi+0.01, np.pi-0.01, 1000)
for N, c in zip([3, 7, 15], plt.cm.Blues(np.linspace(0.3, 0.9, 3))):
    DN = np.sin((N+0.5)*t) / np.sin(t/2)
    KN = (1/(N+1)) * np.sin((N+1)*t/2)**2 / np.sin(t/2)**2
    ax.plot(t, KN, color=c, lw=2, label=f'Fejér $N={N}$')

ax.plot(t, np.ones_like(t)*0, 'k-', lw=0.5)
ax.set_xlim(-np.pi, np.pi); ax.set_ylim(-1, 16)
ax.set_title('Noyau de Fejér $K_N$\n(approximation de l\'identité, $K_N \\geq 0$)', fontsize=10)
ax.set_xlabel('$t$'); ax.legend(fontsize=8)
ax.axhline(0, color='k', lw=0.5)

# --- Décroissance des coefficients selon la régularité ---
ax = axes[2, 1]
ns = np.arange(1, 40)
# Créneau (C^0 par morceau) : |c_n| ~ 1/n
ax.semilogy(ns, 4/(np.pi*ns), 'b-o', markersize=4, lw=1.5, label='Créneau: $O(1/n)$')
# |t| (C^0) : |c_n| ~ 1/n^2
ax.semilogy(ns, 4/(np.pi**2*ns**2), 'r-s', markersize=4, lw=1.5, label='$|t|$: $O(1/n^2)$')
# t^2 (C^1) : |c_n| ~ 1/n^2
ax.semilogy(ns, 2/ns**2, 'g-^', markersize=4, lw=1.5, label='$t^2$: $O(1/n^2)$')
# Gaussienne (C^inf) : exponentielle
gauss_coefs = np.exp(-ns**2/4)
ax.semilogy(ns, gauss_coefs/gauss_coefs[0], 'm-D', markersize=4, lw=1.5, label='$e^{-t^2/4}$: $O(e^{-n^2})$')

# Droites de référence
ax.semilogy(ns, 1/ns, 'b--', lw=0.8, alpha=0.5)
ax.semilogy(ns, 1/ns**2, 'r--', lw=0.8, alpha=0.5)

ax.set_xlabel('Harmonique $n$')
ax.set_ylabel('$|c_n|$ (log)')
ax.set_title('Régularité $\\leftrightarrow$ décroissance spectrale', fontsize=10)
ax.legend(fontsize=7)

plt.suptitle('Séries de Fourier : convergences, Parseval, équation de la chaleur', fontsize=13, fontweight='bold')
plt.tight_layout()
plt.show()
_images/192593021d4524009b092c2671481564eb482e32873849b568a5e81ba1ef06b5.png

Applications#

Équation de la chaleur#

Exemple 111

Trouver \(u(x,t)\) vérifiant \(\partial_t u = \partial_{xx}^2 u\) avec \(u(x,0) = f(x)\) (\(2\pi\)-périodique).

En posant \(u(x,t) = \sum_{n \in \mathbb{Z}} c_n(t) e^{inx}\), on obtient \(c_n'(t) = -n^2 c_n(t)\), d’où

\[u(x,t) = \sum_{n \in \mathbb{Z}} c_n(f) e^{-n^2 t} e^{inx}\]

Les hautes fréquences sont exponentiellement amorties : la chaleur lisse la condition initiale. Pour \(t > 0\), \(u(\cdot, t)\) est analytique même si \(f\) ne l’est pas.

Calcul de sommes de séries#

Exemple 112

De \(f(t) = t^2\), \(c_0 = \pi^2/3\), \(c_n = 2(-1)^n/n^2\) :

  • Parseval : \(\pi^2/3 = \sum_{n \neq 0} 4/n^2\), soit \(\sum_{n=1}^\infty 1/n^2 = \pi^2/6\)

  • En \(t = \pi\) : \(\pi^2 = \pi^2/3 + 4\sum_{n=1}^\infty 1/n^2\) → confirme \(\zeta(2) = \pi^2/6\)

  • Identités analogues donnent \(\zeta(4) = \pi^4/90\), \(\zeta(6) = \pi^6/945\)

Résumé#

Concept

Formule / Propriété

Coefficients

\(c_n = \frac{1}{2\pi}\int_{-\pi}^{\pi} fe^{-int}\,dt\)

Riemann-Lebesgue

\(c_n \to 0\)

Régularité

$f \in C^k \Rightarrow c_n = O(1/

Parseval

$|f|_2^2 = \sum

Dirichlet

\(S_Nf(x) \to (f(x^+)+f(x^-))/2\) si \(f\) \(C^1\) par morceaux

Gibbs

Dépassement \(\approx 9\%\) irréductible aux discontinuités

Fejér

Moyennes de Césaro convergent uniformément

\(f \in C^1\)

CV normale de la série de Fourier

Chaleur

\(\hat{u}_n(t) = c_n(f)e^{-n^2t}\)