Suites et séries de fonctions#

La convergence uniforme est la clef de voûte de l’analyse : elle permet de passer à la limite sous le signe \(\int\), \(\frac{d}{dx}\) et \(\sum\).

Karl Weierstrass

Introduction#

En analyse, on approche souvent une fonction par une suite ou une série de fonctions plus simples. La question cruciale : les propriétés de la limite (continuité, dérivabilité, intégrabilité) se déduisent-elles de celles des termes ? La réponse dépend du mode de convergence. La convergence simple est trop faible ; la convergence uniforme est la clé.

Hide code cell source

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import math

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

# --- CV simple mais pas uniforme : x^n sur [0,1] ---
ax = axes[0]
x = np.linspace(0, 1, 500)
ns = [1, 2, 5, 10, 30, 100]
colors = cm.viridis(np.linspace(0.1, 0.9, len(ns)))

for n, c in zip(ns, colors):
    ax.plot(x, x**n, color=c, lw=1.8, alpha=0.9, label=f'$n={n}$')

# Limite discontinue
ax.plot([0, 0.99], [0, 0], 'k--', lw=2.5, label='Limite $f$')
x_limit = np.linspace(0, 0.999, 400)
ax.plot(x_limit, np.zeros_like(x_limit), 'k--', lw=2.5)
ax.plot([1], [1], 'ko', markersize=8)

ax.set_xlabel('$x$'); ax.set_ylabel('$f_n(x) = x^n$')
ax.set_title('CV simple, PAS uniforme\n$x^n \\to f$ discontinue', fontsize=10)
ax.legend(fontsize=7, loc='upper left')
ax.set_xlim(0, 1); ax.set_ylim(-0.05, 1.1)

# --- Tube de convergence uniforme ---
ax = axes[1]
x2 = np.linspace(0, 2*np.pi, 500)
target = np.sin(x2)

def f_n(x, n):
    return np.sin(x) + np.sin(n*x)/(n**0.7)

epsilon = 0.3
ax.fill_between(x2, target - epsilon, target + epsilon, alpha=0.2, color='blue', label=f'Tube $\\varepsilon={epsilon}$')
ax.plot(x2, target, 'b-', lw=2.5, label='$f(x) = \\sin x$')

for n, c in zip([3, 7, 15], ['tomato', 'orange', 'green']):
    fn = f_n(x2, n)
    ax.plot(x2, fn, color=c, lw=1.5, alpha=0.8, label=f'$f_{n}$, $\\|f_n-f\\|_\\infty={np.max(np.abs(fn-target)):.2f}$')

ax.set_xlabel('$x$'); ax.set_ylabel('$f_n(x)$')
ax.set_title('CV uniforme : graphes dans\nun tube autour de $f$', fontsize=10)
ax.legend(fontsize=7)

# --- Comparaison des modes de convergence ---
ax = axes[2]
ns_arr = np.array([1, 2, 3, 5, 10, 20, 50, 100])

# f_n(x) = x/(1+nx^2) : converge uniformement vers 0
sup_norms = [np.max(np.abs(x / (1 + n*x**2))) for n in ns_arr]

# g_n = x^n sur [0,1] : converge simplement mais pas uniformement
# sup |g_n - f| = max pour x proche de 1
sup_xn = [np.max(np.abs(x**(n) - np.where(x < 1, 0, 1))) for n in ns_arr]

ax.semilogy(ns_arr, sup_norms, 'b-o', lw=2, markersize=6, label='$\\|f_n\\|_\\infty = \\|x/(1+nx^2)\\|_\\infty \\to 0$')
ax.semilogy(ns_arr, sup_xn, 'r-s', lw=2, markersize=6, label='$\\|x^n - f\\|_\\infty = 1$ (pas CV unif.)')

ax.axhline(1, color='r', linestyle='--', lw=1, alpha=0.5)
ax.set_xlabel('$n$'); ax.set_ylabel('$\\|f_n - f\\|_\\infty$ (log)')
ax.set_title('Décroissance de $\\|f_n - f\\|_\\infty$\n(CV unif. $\\Leftrightarrow$ tend vers 0)', fontsize=10)
ax.legend(fontsize=8)

plt.suptitle('Suites de fonctions : convergences simple et uniforme', fontsize=13, fontweight='bold')
plt.tight_layout()
plt.show()
_images/e130386a99c32c2461ee13a95a3eaf2358b5607b8250f80deca2978773c39fc7.png

Convergence simple et convergence uniforme#

Définition 214 (Convergence simple)

\((f_n)\) converge simplement vers \(f : A \to \mathbb{R}\) si

\[\forall x \in A, \; \forall \varepsilon > 0, \; \exists N(x, \varepsilon) \in \mathbb{N}, \; \forall n \geq N, \; |f_n(x) - f(x)| < \varepsilon\]

Le rang \(N\) dépend de \(x\) et de \(\varepsilon\).

Exemple 104

Sur \([0, 1]\), \(f_n(x) = x^n\) converge simplement vers \(f(x) = \mathbf{1}_{\{1\}}(x)\). Chaque \(f_n\) est continue, mais \(f\) est discontinue : la CV simple ne préserve pas la continuité.

Définition 215 (Convergence uniforme)

\((f_n)\) converge uniformément vers \(f\) sur \(A\) si

\[\|f_n - f\|_\infty = \sup_{x \in A} |f_n(x) - f(x)| \xrightarrow[n \to +\infty]{} 0\]

Équivalent : \(\forall \varepsilon > 0\), \(\exists N(\varepsilon)\) (indépendant de \(x\)), \(\forall n \geq N\), \(\forall x \in A\), \(|f_n(x) - f(x)| < \varepsilon\).

Géométriquement : le graphe de \(f_n\) est entièrement dans un tube de largeur \(2\varepsilon\) autour du graphe de \(f\).

Proposition 292 (Critère de Cauchy uniforme)

\((f_n)\) converge uniformément sur \(A\) \(\Leftrightarrow\) \(\forall \varepsilon > 0\), \(\exists N\), \(\forall p, q \geq N\), \(\sup_{A}|f_p - f_q| < \varepsilon\).

Proof. C’est le critère de Cauchy dans l’espace de Banach \((\mathcal{B}(A, \mathbb{R}), \|\cdot\|_\infty)\).

Exemple 105

Sur \([0, 1]\), \(f_n(x) = x/(1 + nx^2)\). Par AM-GM : \(nx^2 + 1 \geq 2\sqrt{n}|x|\), donc \(|f_n(x)| \leq 1/(2\sqrt{n})\). Ainsi \(\|f_n\|_\infty \leq 1/(2\sqrt{n}) \to 0\) : convergence uniforme vers \(0\).

Théorèmes d’interversion#

Continuité#

Théorème 19 (Continuité de la limite uniforme)

Si les \(f_n\) sont continues sur \(A\) et \((f_n)\) converge uniformément vers \(f\), alors \(f\) est continue.

Proof. Soit \(a \in A\) et \(\varepsilon > 0\). Par CV uniforme, \(\exists N\) tel que \(\|f_N - f\|_\infty < \varepsilon/3\). Par continuité de \(f_N\) en \(a\), \(\exists \delta > 0\) tel que \(|x-a| < \delta \Rightarrow |f_N(x) - f_N(a)| < \varepsilon/3\).

Pour \(|x - a| < \delta\) :

\[|f(x) - f(a)| \leq \underbrace{|f(x) - f_N(x)|}_{< \varepsilon/3} + \underbrace{|f_N(x) - f_N(a)|}_{< \varepsilon/3} + \underbrace{|f_N(a) - f(a)|}_{< \varepsilon/3} < \varepsilon\]

Remarque 113

Le \(\varepsilon/3\) trick : décomposer en trois termes. La CV uniforme est essentielle : elle permet de choisir \(N\) indépendamment de \(x\).

Contre-exemple (CV simple) : \(f_n(x) = x^n\) sur \([0,1]\) — la limite est discontinue en \(x = 1\).

Intégration#

Théorème 20 (Interversion limite-intégrale)

Si les \(f_n\) sont continues sur \([a, b]\) et \((f_n)\) converge uniformément vers \(f\), alors

\[\lim_{n \to +\infty} \int_a^b f_n(t)\,dt = \int_a^b f(t)\,dt\]

Proof. \(\left|\int_a^b (f_n - f)\right| \leq \int_a^b |f_n - f| \leq (b-a)\|f_n - f\|_\infty \to 0\).

Dérivation#

Théorème 21 (Interversion limite-dérivée)

Soit \((f_n)\) une suite de fonctions \(\mathcal{C}^1\) sur \([a, b]\). Si :

  1. \((f_n)\) converge simplement en au moins un point \(x_0 \in [a, b]\)

  2. \((f_n')\) converge uniformément sur \([a, b]\)

Alors \((f_n)\) converge uniformément vers \(f \in \mathcal{C}^1\), et \(f' = \lim f_n'\).

Proof. Notons \(g = \lim f_n'\) (CV uniforme), continue. Par le TFA : \(f_n(x) = f_n(x_0) + \int_{x_0}^x f_n'(t)\,dt\).

En passant à la limite (CV de \(f_n(x_0)\) par hypothèse 1, interversion intégrale par CV uniforme des \(f_n'\)) :

\[f(x) := \lim f_n(x) = \lim f_n(x_0) + \int_{x_0}^x g(t)\,dt\]

La CV est uniforme car \(|f_n(x) - f(x)| \leq |f_n(x_0) - f(x_0)| + (b-a)\|f_n' - g\|_\infty \to 0\) uniformément en \(x\).

Et \(f' = g\) (TFA).

Hide code cell source

import numpy as np
import matplotlib.pyplot as plt

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

# --- Théorème d'interversion : intégrale ---
ax = axes[0]
x = np.linspace(0, 1, 500)

def fn(x, n): return n*x * np.exp(-n*x**2)
# fn -> 0 simplement, mais int fn -> 1/2 != 0
# (convergence simple SEULEMENT => interversion fausse)

ns = [1, 3, 10, 50]
colors = plt.cm.Reds(np.linspace(0.3, 0.9, len(ns)))
for n, c in zip(ns, colors):
    y = fn(x, n)
    area = np.trapezoid(y, x)
    ax.plot(x, y, color=c, lw=2, label=f'$n={n}$, $\\int f_n={area:.3f}$')

ax.plot(x, np.zeros_like(x), 'k--', lw=2, label='Limite $f=0$, $\\int f=0$')
ax.set_title('$f_n=nxe^{-nx^2}$: CV simple vers 0\nmais $\\int f_n \\to 1/2 \\neq 0$\n(CV NON uniforme!)', fontsize=9)
ax.set_xlabel('$x$'); ax.set_ylabel('$f_n(x)$')
ax.legend(fontsize=7)

# --- Polynômes de Bernstein : Weierstrass ---
ax = axes[1]
def bernstein(f, n, x):
    """Polynôme de Bernstein d'ordre n de f évalué en x."""
    k = np.arange(n+1)
    # B_n(f)(x) = sum_k f(k/n) C(n,k) x^k (1-x)^(n-k)
    from scipy.special import comb
    result = np.zeros_like(x, dtype=float)
    for ki in k:
        result += f(ki/n) * comb(n, ki, exact=False) * x**ki * (1-x)**(n-ki)
    return result

target_f = lambda t: np.abs(np.sin(3*t))
x3 = np.linspace(0, 1, 300)
ax.plot(x3, target_f(x3), 'k-', lw=2.5, label='$f(x) = |\\sin(3x)|$')

for n, c in zip([3, 8, 20, 50], plt.cm.Blues(np.linspace(0.3, 0.9, 4))):
    Bn = bernstein(target_f, n, x3)
    sup_err = np.max(np.abs(Bn - target_f(x3)))
    ax.plot(x3, Bn, color=c, lw=1.8, label=f'$B_{n}$, err$={sup_err:.3f}$')

ax.set_title('Théorème de Weierstrass\nPolynômes de Bernstein $\\to$ $f$', fontsize=10)
ax.set_xlabel('$x$'); ax.set_ylabel('')
ax.legend(fontsize=7)

# --- CV normale : critère pratique ---
ax = axes[2]
x4 = np.linspace(-3, 3, 400)

# Série sum (-1)^n x^(2n+1) / (2n+1)! = sin(x)
partial_sums = [np.zeros_like(x4)]
norms = []
for k in range(10):
    term = ((-1)**k * x4**(2*k+1)) / math.factorial(2*k+1)
    partial_sums.append(partial_sums[-1] + term)
    norms.append(np.max(np.abs(x4**(2*k+1))) / math.factorial(2*k+1))

colors5 = plt.cm.plasma(np.linspace(0.1, 0.9, 6))
for i, (N, c) in enumerate(zip([0, 1, 2, 3, 5, 9], colors5)):
    ax.plot(x4, partial_sums[N+1], color=c, lw=1.8, alpha=0.9, label=f'$N={N}$')

ax.plot(x4, np.sin(x4), 'k--', lw=2.5, label='$\\sin(x)$')
ax.set_xlabel('$x$'); ax.set_ylabel('$S_N(x)$')
ax.set_title('$\\sum \\frac{(-1)^n x^{2n+1}}{(2n+1)!} = \\sin x$\n(CV normale sur tout compact)', fontsize=10)
ax.legend(fontsize=7, loc='lower right')
ax.set_ylim(-2, 2)

plt.suptitle('Interversion limite/intégrale/dérivée, Weierstrass', fontsize=13, fontweight='bold')
plt.tight_layout()
plt.show()
_images/3b9f20421c620044c881f694f3032c32474b732163d364535c4f6a57e0f28de3.png

Séries de fonctions#

Définition 216 (Modes de convergence des séries)

La série \(\sum f_n\) converge simplement (resp. uniformément) si les sommes partielles \(S_N = \sum_{n=0}^N f_n\) convergent simplement (resp. uniformément).

\(\sum f_n\) converge normalement sur \(A\) si \(\sum \|f_n\|_\infty < +\infty\).

Proposition 293 (Hiérarchie)

Convergence normale \(\Rightarrow\) convergence uniforme \(\Rightarrow\) convergence simple.

Proof. CV normale \(\Rightarrow\) CV uniforme : le critère de Cauchy uniforme est satisfait car \(\sup_A |\sum_{n=p+1}^q f_n| \leq \sum_{n=p+1}^q \|f_n\|_\infty \to 0\).

Théorème 22 (Théorèmes d’interversion pour les séries)

Soit \(\sum f_n\) une série de fonctions continues sur \([a, b]\).

  • Continuité : CV uniforme \(\Rightarrow\) \(\sum f_n\) est continue

  • Intégration : CV uniforme \(\Rightarrow\) \(\int_a^b \sum f_n = \sum \int_a^b f_n\)

  • Dérivation : \(f_n \in \mathcal{C}^1\), \(\sum f_n\) CV simple en un point, \(\sum f_n'\) CV uniforme \(\Rightarrow\) \((\sum f_n)' = \sum f_n'\)

Exemple 106

Exponentielle : \(e^x = \sum \frac{x^n}{n!}\) converge normalement sur \([-R, R]\) pour tout \(R > 0\) (car \(\sum R^n/n! = e^R < \infty\)). Donc \(e^x\) est \(\mathcal{C}^\infty\) et \((e^x)' = \sum \frac{nx^{n-1}}{n!} = \sum \frac{x^{n-1}}{(n-1)!} = e^x\).

Fonction \(\zeta\) de Riemann : \(\zeta(s) = \sum n^{-s}\) converge normalement sur \([a, +\infty[\) pour \(a > 1\). Donc \(\zeta\) est \(\mathcal{C}^\infty\) sur \((1, +\infty)\).

Approximation uniforme#

Théorème 23 (Théorème de Weierstrass)

Toute fonction continue sur \([a, b]\) est limite uniforme d’une suite de polynômes. Autrement dit, \(\mathbb{R}[X]\) est dense dans \((\mathcal{C}([a,b]), \|\cdot\|_\infty)\).

Proof. On se ramène à \([0,1]\). Le \(n\)-ième polynôme de Bernstein de \(f\) :

\[B_n(f)(x) = \sum_{k=0}^n f\left(\frac{k}{n}\right) \binom{n}{k} x^k (1-x)^{n-k}\]

est un polynôme de degré \(\leq n\). Les poids \(\binom{n}{k}x^k(1-x)^{n-k}\) forment la loi \(\mathcal{B}(n,x)\) de moyenne \(x\) et variance \(x(1-x)/n\). Par la continuité uniforme de \(f\) et les inégalités de concentration (Bienaymé-Tchebychev), \(\|B_n(f) - f\|_\infty \to 0\).

Remarque 114

Théorème de Stone-Weierstrass (généralisation) : toute sous-algèbre de \(\mathcal{C}(K, \mathbb{R})\) (pour \(K\) compact) qui sépare les points et contient les constantes est dense. Ceci inclut les polynômes, les fonctions trigonométriques, et bien d’autres.

Résumé#

Mode de convergence

Définition

Préserve

Simple

\(\forall x\), \(f_n(x) \to f(x)\)

rien en général

Uniforme

\(|f_n - f|_\infty \to 0\)

continuité, \(\int\), \(\frac{d}{dx}\)

Normale (séries)

\(\sum |f_n|_\infty < +\infty\)

\(\Rightarrow\) uniforme

Interversion

Hypothèse minimale

\(\lim \int = \int \lim\)

CV uniforme

\((\lim f_n)' = \lim f_n'\)

CV unif. des \(f_n'\) + CV simple en un point

\((\sum f_n)' = \sum f_n'\)

CV unif. de \(\sum f_n'\) + CV simple de \(\sum f_n\) en un point