Séries numériques#

La divergence de la série \(1 + 2 + 3 + 4 + \cdots\) est, pour ainsi dire, un scandale perpétuel.

— Niels Henrik Abel

Définitions fondamentales#

Définition 79 (Série)

Soit \((u_n)_{n \geq 0}\) une suite réelle. On appelle série de terme général \(u_n\) la suite des sommes partielles

\[S_n = \sum_{k=0}^{n} u_k.\]

On note \(\sum u_n\) la série. Si \((S_n)\) converge vers \(S\), on dit que la série converge et on pose \(\displaystyle\sum_{n=0}^{+\infty} u_n = S\).

Définition 80 (Reste d’une série convergente)

Si \(\sum u_n\) converge de somme \(S\), le reste d’ordre \(n\) est

\[R_n = S - S_n = \sum_{k=n+1}^{+\infty} u_k.\]

On a \(R_n \to 0\) car \(S_n \to S\).

Proposition 101 (Condition nécessaire de convergence)

Si \(\sum u_n\) converge, alors \(u_n \to 0\).

Proof. \(u_n = S_n - S_{n-1} \to S - S = 0\).

Remarque 40

La réciproque est fausse : \(u_n = 1/n \to 0\) mais \(\sum 1/n\) diverge. La condition \(u_n \to 0\) est nécessaire mais pas suffisante.

Hide code cell source

import math
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import integrate

sns.set_theme(style="whitegrid", palette="muted", font_scale=1.1)

Séries de référence#

Série géométrique#

Proposition 102 (Série géométrique)

Pour \(q \in \mathbb{R}\),

\[\sum_{n=0}^{+\infty} q^n \text{ converge} \iff |q| < 1, \quad \text{et dans ce cas } \sum_{n=0}^{+\infty} q^n = \frac{1}{1-q}.\]

Le reste vaut \(R_n = \frac{q^{n+1}}{1-q}\), donc \(|R_n| \leq \frac{|q|^{n+1}}{1-|q|}\).

Proof. \(S_n = \frac{1-q^{n+1}}{1-q}\) pour \(q \neq 1\). Si \(|q| < 1\), \(q^{n+1} \to 0\) donc \(S_n \to \frac{1}{1-q}\). Si \(|q| \geq 1\), \(|q^n| \not\to 0\) : condition nécessaire violée.

Série harmonique et séries de Riemann#

Proposition 103 (Divergence de la série harmonique)

\(\displaystyle\sum_{n=1}^{+\infty} \frac{1}{n}\) diverge.

Proof. Méthode des paquets (Oresme, XIV\(^\text{e}\) s.) On regroupe les termes par tranches entre deux puissances de 2 :

\[\sum_{k=2^{p-1}+1}^{2^p} \frac{1}{k} \geq 2^{p-1} \cdot \frac{1}{2^p} = \frac{1}{2}.\]

Donc \(S_{2^k} \geq 1 + \frac{k}{2} \to +\infty\).

Proposition 104 (Séries de Riemann)

\[\sum_{n=1}^{+\infty} \frac{1}{n^\alpha} \text{ converge } \iff \alpha > 1.\]

Pour \(\alpha = 2\) : \(\displaystyle\sum_{n=1}^{+\infty} \frac{1}{n^2} = \frac{\pi^2}{6}\) (problème de Bâle, résolu par Euler en 1735).

Proof. Via la comparaison série-intégrale (voir §\ref{sec:serie-integrale}) : \(\int_1^{+\infty} \frac{dt}{t^\alpha}\) converge \(\iff \alpha > 1\).

Série exponentielle#

Proposition 105 (Série de \(e\))

\(\displaystyle\sum_{n=0}^{+\infty} \frac{x^n}{n!}\) converge pour tout \(x \in \mathbb{R}\), et \(\displaystyle\sum_{n=0}^{+\infty} \frac{x^n}{n!} = e^x\).

En particulier \(e = \sum_{n=0}^{+\infty} \frac{1}{n!}\).

Proof. Pour \(|x| \leq R\), à partir d’un rang \(N > 2R\), \(\frac{|x|^{n+1}/(n+1)!}{|x|^n/n!} = \frac{|x|}{n+1} \leq \frac{1}{2}\), donc le terme général est dominé par une série géométrique convergente (d’Alembert).

Hide code cell source

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

# 1. Séries géométriques pour diverses valeurs de q
n = np.arange(25)
for q, col in [(0.9, 'C0'), (0.5, 'C1'), (0.2, 'C2'), (-0.7, 'C3')]:
    S = np.cumsum(q**n)
    axes[0].plot(n, S, 'o-', ms=4, color=col, label=f'$q={q}$')
    axes[0].axhline(1/(1-q), color=col, ls='--', lw=1, alpha=0.5)
axes[0].set(xlabel='$n$', title='Séries géométriques $\\sum q^n$')
axes[0].legend(fontsize=9)

# 2. Séries de Riemann
n2 = np.arange(1, 200)
for alpha, col in [(0.5,'C0'),(1.0,'C1'),(1.5,'C2'),(2.0,'C3')]:
    S = np.cumsum(1/n2**alpha)
    axes[1].plot(n2, S, '-', lw=2, color=col, label=f'$\\alpha={alpha}$')
axes[1].axhline(np.pi**2/6, color='C3', ls=':', lw=1.5, alpha=0.7)
axes[1].set(xlabel='$n$', title='Séries de Riemann $\\sum n^{-\\alpha}$', ylim=(0, 20))
axes[1].legend(fontsize=9)

# 3. Convergence de sum 1/n! vers e
n3 = np.arange(16)
u_e = np.array([sum(1/math.factorial(k) for k in range(i+1)) for i in n3])
axes[2].plot(n3, u_e, 'C2o-', ms=7, label=r'$\sum_{k=0}^n \frac{1}{k!}$')
axes[2].axhline(np.e, color='red', ls='--', lw=2, label=r'$e$')
axes[2].fill_between(n3, u_e, np.e, alpha=0.2, color='C2')
axes[2].set(xlabel='$n$', title=r'Série de $e$ : $\sum \frac{1}{n!} = e$')
axes[2].legend()

plt.tight_layout()
plt.show()

print(f"π²/6 = {np.pi**2/6:.6f}")
print(f"Σ 1/n² (n=1..200) = {np.sum(1/n2**2):.6f}")
_images/aa56a53a3826be84fb91a6f2e51bc0904fd0915fb53df5780c610b5c41f57f1b.png
π²/6 = 1.644934
Σ 1/n² (n=1..200) = 1.639922

Séries à termes positifs#

Proposition 106 (Critère de convergence (termes positifs))

Si \(u_n \geq 0\), alors \(\sum u_n\) converge \(\iff\) \((S_n)\) est majorée.

Proof. \((S_n)\) est croissante, donc converge \(\iff\) elle est majorée (théorème de la limite monotone).

Comparaison directe et par équivalents#

Proposition 107 (Comparaison directe)

Si \(0 \leq u_n \leq v_n\) à partir d’un certain rang :

  • \(\sum v_n\) converge \(\Rightarrow\) \(\sum u_n\) converge

  • \(\sum u_n\) diverge \(\Rightarrow\) \(\sum v_n\) diverge

Proposition 108 (Comparaison par équivalent)

Si \(u_n, v_n > 0\) et \(u_n \sim v_n\) (i.e. \(u_n/v_n \to 1\)), alors \(\sum u_n\) et \(\sum v_n\) ont même nature.

Proof. Il existe \(N\) tel que pour \(n \geq N\), \(\frac{1}{2} v_n \leq u_n \leq 2 v_n\). Encadrement et comparaison directe.

Exemple 36

  • \(\sum \frac{1}{n^2+n}\) converge : \(\frac{1}{n^2+n} \sim \frac{1}{n^2}\) et \(\sum \frac{1}{n^2}\) converge.

  • \(\sum \frac{\ln n}{n^2}\) converge : \(\frac{\ln n}{n^2} = o(n^{-3/2})\) et \(\sum n^{-3/2}\) converge.

  • \(\sum \sin(1/n)\) diverge : \(\sin(1/n) \sim 1/n\).

Critère de d’Alembert#

Proposition 109 (Règle de d’Alembert)

Soit \(u_n > 0\) et \(\dfrac{u_{n+1}}{u_n} \to L \in [0, +\infty]\).

  • \(L < 1\) : \(\sum u_n\) converge

  • \(L > 1\) : \(\sum u_n\) diverge

  • \(L = 1\) : pas de conclusion (les deux cas sont possibles)

Proof. \(L < 1\). Soit \(q \in ]L, 1[\). À partir d’un rang \(N\), \(u_{n+1} \leq q\,u_n\), donc \(u_n \leq u_N\,q^{n-N}\). Comparaison géométrique.

\(L > 1\). À partir d’un rang, \(u_{n+1} > u_n\), donc \(u_n \not\to 0\).

Exemple 37

\(\sum \frac{n!}{n^n}\) : \(\frac{u_{n+1}}{u_n} = \frac{(n+1)!\,n^n}{(n+1)^{n+1}\,n!} = \left(\frac{n}{n+1}\right)^n = \frac{1}{(1+1/n)^n} \to \frac{1}{e} < 1\). Convergente.

\(\sum \frac{n^n}{n!}\) : même ratio \(\to e > 1\). Divergente.

\(\sum \frac{1}{n^2}\) : ratio \(\to 1\). D’Alembert ne conclut pas.

Critère de Cauchy (racine)#

Proposition 110 (Règle de la racine (Cauchy))

Soit \(u_n \geq 0\) et \(u_n^{1/n} \to L\).

  • \(L < 1\) : \(\sum u_n\) converge

  • \(L > 1\) : \(\sum u_n\) diverge

  • \(L = 1\) : pas de conclusion

Remarque 41

Le critère de Cauchy est plus fort que celui de d’Alembert : \(\limsup u_{n+1}/u_n \geq \limsup u_n^{1/n}\). Quand d’Alembert conclut, Cauchy aussi ; mais pas l’inverse. En particulier, Cauchy conclut pour \(\sum (2 + (-1)^n)^{-n}\) (ratio oscille entre \(1/3\) et \(3\), sans limite), tandis que d’Alembert échoue.

Critère de condensation de Cauchy#

Proposition 111 (Critère de condensation)

Soit \(f : \mathbb{N}^* \to \mathbb{R}^+\) décroissante. Alors

\[\sum_{n=1}^{+\infty} f(n) \text{ converge } \iff \sum_{k=0}^{+\infty} 2^k f(2^k) \text{ converge.}\]

Proof. Par paquets entre \(2^k\) et \(2^{k+1}\) : chaque paquet est encadré par \(2^k f(2^{k+1}) \leq \sum_{j=2^k}^{2^{k+1}-1} f(j) \leq 2^k f(2^k)\), donc \(\frac{1}{2}\sum_k 2^k f(2^k) \leq \sum_n f(n) \leq \sum_k 2^k f(2^k)\).

Exemple 38

\(\sum \frac{1}{n(\ln n)^2}\) pour \(n \geq 2\) : condensée \(\sum 2^k \cdot \frac{1}{2^k (\ln 2^k)^2} = \sum \frac{1}{k^2 (\ln 2)^2}\), qui converge. Donc la série converge.

\(\sum \frac{1}{n \ln n}\) : condensée \(\sum \frac{1}{k \ln 2}\), qui diverge.

Hide code cell source

fig, axes = plt.subplots(2, 1, figsize=(9, 7))

# Illustration des critères : q_n = u_{n+1}/u_n pour diverses séries
n_max = 40
n = np.arange(1, n_max)

# n!/n^n
u_fact = np.array([math.factorial(k)/k**k for k in range(1, n_max)])
ratio_fact = u_fact[1:] / u_fact[:-1]

# q^n pour différents q
axes[0].plot(n[1:], ratio_fact[:n_max-2], 'C0o-', ms=5, label=r'$\frac{n!}{n^n}$ : ratio $\to 1/e$')
axes[0].axhline(1/np.e, color='C0', ls='--', lw=1.5, alpha=0.7)
axes[0].axhline(1, color='red', ls='-', lw=1.5, label='Seuil = 1')
axes[0].set(xlabel='$n$', ylabel='$u_{n+1}/u_n$',
            title="Critère de d'Alembert : ratio $u_{n+1}/u_n$")
axes[0].legend(fontsize=9)

# Condensation : sum 1/(n log^2 n)
n2 = np.arange(2, 300)
S1 = np.cumsum(1/(n2 * np.log(n2)**2))   # converge
S2 = np.cumsum(1/(n2 * np.log(n2)))       # diverge

axes[1].plot(n2, S1, 'C1-', lw=2, label=r'$\sum \frac{1}{n(\ln n)^2}$ — converge')
axes[1].plot(n2, S2, 'C0-', lw=2, label=r'$\sum \frac{1}{n \ln n}$ — diverge')
axes[1].set(xlabel='$n$', title='Condensation de Cauchy')
axes[1].legend(fontsize=9)

plt.tight_layout()
plt.show()
_images/8102053efecf461d1945526b60153e9c14aa3220a3c9026b79c4739670bcd913.png

Convergence absolue et conditionnelle#

Définition 81 (Convergence absolue)

\(\sum u_n\) converge absolument si \(\sum |u_n|\) converge.

Proposition 112 (Absolue \(\Rightarrow\) convergente)

Si \(\sum u_n\) converge absolument, elle converge, et \(\left|\sum_{n=0}^{+\infty} u_n\right| \leq \sum_{n=0}^{+\infty} |u_n|\).

Proof. Posons \(u_n^+ = \max(u_n, 0)\) et \(u_n^- = \max(-u_n, 0)\). Alors \(0 \leq u_n^\pm \leq |u_n|\), donc \(\sum u_n^\pm\) convergent. D’où \(\sum u_n = \sum u_n^+ - \sum u_n^-\) converge.

Définition 82 (Convergence conditionnelle)

Une série converge conditionnellement (ou semi-converge) si elle converge mais pas absolument.

Exemple 39

\(\sum \frac{(-1)^{n+1}}{n} = \ln 2\) converge conditionnellement (\(\sum \frac{1}{n}\) diverge).

\(\sum \frac{(-1)^n}{n^2}\) converge absolument (\(\sum \frac{1}{n^2}\) converge).

Théorème de réarrangement de Riemann#

Proposition 113 (Théorème de Riemann (1854))

Soit \(\sum u_n\) une série conditionnellement convergente. Pour tout \(S \in \mathbb{R} \cup \{+\infty, -\infty\}\), il existe une permutation \(\sigma\) de \(\mathbb{N}\) telle que \(\sum u_{\sigma(n)} = S\).

Autrement dit, en réarrangeant les termes, on peut faire converger la série vers n’importe quelle valeur !

Proof. (Idée) Soient \(p_n\) les termes positifs et \(q_n = -u_n\) les termes négatifs pour \(u_n < 0\). Les deux séries \(\sum p_n\) et \(\sum q_n\) divergent (sinon \(\sum u_n\) convergerait absolument). On additionne assez de \(p_n\) pour dépasser \(S\), puis assez de \(q_n\) pour repasser en dessous, et ainsi de suite. L’écart tend vers 0 car \(p_n, q_n \to 0\).

Remarque 42

En revanche, une série absolument convergente peut être réarrangée librement : la somme ne change pas (théorème de réarrangement de Fubini-Tonelli).

Séries alternées#

Proposition 114 (Critère de Leibniz)

Si \((a_n)\) est décroissante et tend vers 0, alors \(\sum (-1)^n a_n\) converge. De plus :

\[|R_n| \leq a_{n+1}, \qquad \text{et } S \text{ est entre } S_n \text{ et } S_{n+1}.\]

Proof. \((S_{2n})\) est croissante (car \(S_{2n+2} - S_{2n} = a_{2n+1} - a_{2n+2} \geq 0\)) et majorée par \(S_1\) (car \(S_{2n+1} \leq S_1\)). Elle converge vers \(\ell\). \((S_{2n+1})\) est décroissante, minorée par \(S_0\), converge vers \(\ell'\). Or \(\ell' - \ell = \lim(S_{2n+1} - S_{2n}) = \lim (-a_{2n+1}) = 0\), donc \(\ell = \ell'\).

Exemple 40

  • \(\sum \frac{(-1)^{n+1}}{n} = \ln 2\)série de Mercator

  • \(\sum \frac{(-1)^n}{2n+1} = \frac{\pi}{4}\)formule de Leibniz-Gregory

  • \(\sum \frac{(-1)^n}{n!}\) converge absolument vers \(e^{-1}\)

Hide code cell source

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

n = np.arange(1, 50)

# Série harmonique alternée -> ln(2)
a_altern = (-1)**(n+1) / n
S_altern = np.cumsum(a_altern)
axes[0].plot(n, S_altern, 'C0o-', ms=4, label=r'$S_n = \sum_{k=1}^n \frac{(-1)^{k+1}}{k}$')
axes[0].axhline(np.log(2), color='red', ls='--', lw=2, label=r'$\ln 2 \approx 0{,}693$')
axes[0].fill_between(n, S_altern, np.log(2), alpha=0.2, color='C0')
axes[0].set(xlabel='$n$', title='Série alternée harmonique $\\to \\ln 2$')
axes[0].legend(fontsize=9)

# Formule de Leibniz : sum (-1)^n/(2n+1) -> pi/4
n2 = np.arange(0, 200)
a_pi = (-1)**n2 / (2*n2+1)
S_pi = np.cumsum(a_pi)
axes[1].plot(n2, S_pi, 'C1-', lw=1.5, label=r'$\sum_{k=0}^n \frac{(-1)^k}{2k+1}$')
axes[1].axhline(np.pi/4, color='red', ls='--', lw=2, label=r'$\pi/4$')
axes[1].set(xlabel='$n$', title=r'Formule de Leibniz : $1 - 1/3 + 1/5 - \cdots = \pi/4$')
axes[1].legend(fontsize=9)

plt.tight_layout()
plt.show()

print(f"ln(2) = {np.log(2):.8f}")
print(f"S_50  = {S_altern[-1]:.8f}")
print(f"Borne Leibniz |R_50| ≤ 1/51 = {1/51:.6f}")
print(f"\nπ/4 = {np.pi/4:.8f}, S_200 = {S_pi[-1]:.8f}")
_images/715e0053c4955ba9a0f2a59db203afd810b784b7f9ac701ae70533932b0746d0.png
ln(2) = 0.69314718
S_50  = 0.70324716
Borne Leibniz |R_50| ≤ 1/51 = 0.019608

π/4 = 0.78539816, S_200 = 0.78414817

Transformation d’Abel (sommation par parties)#

Proposition 115 (Transformation d’Abel)

Soient \((a_n)\) et \((b_n)\) deux suites. On pose \(B_n = \sum_{k=0}^n b_k\). Alors :

\[\sum_{k=0}^{n} a_k b_k = a_n B_n - \sum_{k=0}^{n-1} (a_{k+1} - a_k) B_k.\]

Proof. On écrit \(b_k = B_k - B_{k-1}\) (avec \(B_{-1} = 0\)) et on effectue une sommation par parties (analogue de l’intégration par parties) :

\[\sum_{k=0}^n a_k b_k = \sum_{k=0}^n a_k (B_k - B_{k-1}) = a_n B_n - \sum_{k=0}^{n-1} (a_{k+1} - a_k) B_k.\]

Proposition 116 (Critère d’Abel)

Si \((a_n)\) est monotone et tend vers 0, et si les sommes partielles \((B_n)\) de \(\sum b_n\) sont bornées, alors \(\sum a_n b_n\) converge.

Proof. Par la transformation d’Abel, \(\sum a_n b_n = a_n B_n - \sum (a_{k+1}-a_k) B_k\). Le premier terme \(\to 0\) (car \(a_n \to 0\) et \(B_n\) borné). La série \(\sum (a_{k+1}-a_k) B_k\) converge absolument car \(|a_{k+1}-a_k| B_k \leq M |a_{k+1}-a_k|\) et \(\sum |a_{k+1}-a_k| = |a_0 - 0|\) (série télescopique, car \((a_n)\) est monotone).

Exemple 41

\(\sum \frac{\cos(n\theta)}{n}\) pour \(\theta \notin 2\pi\mathbb{Z}\) : prendre \(a_n = 1/n\) et \(b_n = \cos(n\theta)\). Les sommes partielles de \(\sum \cos(n\theta)\) sont bornées (formule de Dirichlet). Par Abel, la série converge.

\(\sum \frac{\sin n}{n}\) converge (même argument avec \(b_n = \sin n\)).

Hide code cell source

fig, axes = plt.subplots(2, 1, figsize=(9, 7))

# sum cos(n*theta)/n pour theta = pi/3
n = np.arange(1, 300)
theta = np.pi/3

S_cos = np.cumsum(np.cos(n*theta) / n)
S_sin = np.cumsum(np.sin(n) / n)

axes[0].plot(n, S_cos, 'C0-', lw=1.5, label=r'$\sum \frac{\cos(n\pi/3)}{n}$')
# Somme exacte via log(2sin(theta/2)) : Re(-log(1-e^{i*theta}))
import cmath
lim_cos = -np.real(cmath.log(1 - cmath.exp(1j*theta)))
axes[0].axhline(lim_cos, color='red', ls='--', lw=2, label=f'Limite $\\approx {lim_cos:.3f}$')
axes[0].set(xlabel='$n$', title=r'Critère d\'Abel : $\sum \frac{\cos(n\theta)}{n}$')
axes[0].legend(fontsize=9)

axes[1].plot(n, S_sin, 'C1-', lw=1.5, label=r'$\sum \frac{\sin n}{n}$')
# Valeur exacte : (pi-1)/2
lim_sin = (np.pi - 1) / 2
axes[1].axhline(lim_sin, color='red', ls='--', lw=2, label=f'Limite $= (\\pi-1)/2 \\approx {lim_sin:.3f}$')
axes[1].set(xlabel='$n$', title=r'$\sum \frac{\sin n}{n}$ (critère d\'Abel)')
axes[1].legend(fontsize=9)

plt.tight_layout()
plt.show()
_images/db1c249c87ce054d048555b0899f5574d9f5b17204f62d1ce53e8a6ed6ac4f67.png

Comparaison série-intégrale#

Proposition 117 (Critère intégral de Cauchy-Maclaurin)

Soit \(f : [1, +\infty[ \to \mathbb{R}^+\) continue et décroissante. Alors :

\[\int_{n+1}^{+\infty} f(t)\,dt \leq R_n = \sum_{k=n+1}^{+\infty} f(k) \leq \int_{n}^{+\infty} f(t)\,dt.\]

En particulier, \(\sum f(n)\) converge \(\iff\) \(\int_1^{+\infty} f(t)\,dt < +\infty\).

Proof. Comme \(f\) est décroissante, pour \(t \in [k, k+1]\) : \(f(k+1) \leq f(t) \leq f(k)\). En intégrant : \(f(k+1) \leq \int_k^{k+1} f(t)\,dt \leq f(k)\). La sommation de \(k=n+1\) à \(+\infty\) donne l’encadrement.

Exemple 42

  • \(f(t) = t^{-\alpha}\) : \(\int_1^{+\infty} t^{-\alpha}dt\) converge \(\iff \alpha > 1\). D’où la nature des séries de Riemann.

  • \(f(t) = \frac{1}{t(\ln t)^2}\) pour \(t \geq 2\) : \(\int_2^{+\infty} \frac{dt}{t(\ln t)^2} = \left[-\frac{1}{\ln t}\right]_2^{+\infty} = \frac{1}{\ln 2} < +\infty\). Convergente.

  • Constante d’Euler. \(\gamma_n = \sum_{k=1}^n \frac{1}{k} - \ln n \to \gamma \approx 0{,}5772\) (la suite est décroissante et minorée par 0).

Hide code cell source

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

# Illustration graphique : aire sous f vs somme
x = np.linspace(1, 8, 500)
f = lambda t: 1/t
n_bars = np.arange(1, 8)

axes[0].plot(x, f(x), 'C0-', lw=2.5, label='$f(t) = 1/t$')
for k in n_bars:
    # Sous-estimation : f(k+1) pour t in [k,k+1]
    axes[0].bar(k, f(k+1) if k+1 <= 8 else 0, width=1, bottom=0,
                align='edge', color='C1', alpha=0.4, edgecolor='C1')
    # Sur-estimation : f(k) pour t in [k,k+1]
    axes[0].bar(k, f(k), width=1, bottom=0,
                align='edge', color='C0', alpha=0.15, edgecolor='C0')
axes[0].set(xlabel='$t$', title='Comparaison série-intégrale : encadrement de $R_n$')
axes[0].legend()

# Convergence de la constante d'Euler
n_euler = np.arange(1, 500)
H_n = np.cumsum(1/n_euler)
gamma_n = H_n - np.log(n_euler)
gamma = 0.5772156649015329

axes[1].plot(n_euler, gamma_n, 'C2-', lw=2, label=r'$H_n - \ln n$')
axes[1].axhline(gamma, color='red', ls='--', lw=2, label=f'$\\gamma \\approx {gamma:.4f}$')
axes[1].set(xlabel='$n$', title='Constante d\'Euler-Mascheroni $\\gamma$')
axes[1].legend()

plt.tight_layout()
plt.show()

print(f"γ = {gamma:.10f}")
print(f"H_500 - ln(500) = {gamma_n[-1]:.10f}")
_images/0e74bae102d6502cd2b604a711d21bf9978779751a779f767c19c94d7b594abe.png
γ = 0.5772156649
H_500 - ln(500) = 0.5782173342

Produit de Cauchy et séries entières#

Définition 83 (Produit de Cauchy)

Le produit de Cauchy de \(\sum a_n\) et \(\sum b_n\) est \(\sum c_n\) avec \(c_n = \sum_{k=0}^n a_k b_{n-k}\) (convolution).

Proposition 118 (Théorème de Mertens)

Si \(\sum a_n\) converge absolument et \(\sum b_n\) converge (de somme \(B\)), alors le produit de Cauchy \(\sum c_n\) converge et

\[\sum_{n=0}^{+\infty} c_n = \left(\sum_{n=0}^{+\infty} a_n\right) \cdot B.\]

Exemple 43

Produit de Cauchy de \(\sum x^n/n!\) par \(\sum y^n/n!\) : \(c_n = \frac{1}{n!}\sum_{k=0}^n \binom{n}{k} x^k y^{n-k} = \frac{(x+y)^n}{n!}\), ce qui donne \(e^x \cdot e^y = e^{x+y}\).

Introduction aux séries entières#

Définition 84 (Série entière)

Une série entière est une série de la forme \(\sum_{n=0}^{+\infty} a_n x^n\)\((a_n) \subset \mathbb{R}\) et \(x \in \mathbb{R}\).

Proposition 119 (Rayon de convergence)

À toute série entière \(\sum a_n x^n\) est associé un rayon de convergence \(R \in [0, +\infty]\) tel que :

  • Pour \(|x| < R\) : convergence absolue

  • Pour \(|x| > R\) : divergence

  • Pour \(|x| = R\) : à étudier au cas par cas

\[R = \frac{1}{\limsup_{n\to+\infty} |a_n|^{1/n}} \quad \text{(formule de Hadamard).}\]

Proof. (Idée) Appliquons le critère de Cauchy à \(|a_n x^n|^{1/n} = |a_n|^{1/n}|x| \to L|x|\)\(L = \limsup |a_n|^{1/n}\). Convergence absolue si \(L|x| < 1\), i.e. \(|x| < 1/L = R\).

Exemple 44

Série entière

Rayon \(R\)

Somme sur \(]-R,R[\)

\(\sum x^n\)

\(1\)

\(\frac{1}{1-x}\)

\(\sum \frac{x^n}{n!}\)

\(+\infty\)

\(e^x\)

\(\sum \frac{(-1)^n x^{2n+1}}{2n+1}\)

\(1\)

\(\arctan x\)

\(\sum \frac{(-1)^{n+1} x^n}{n}\)

\(1\)

\(\ln(1+x)\)

\(\sum \frac{(-1)^n x^{2n}}{(2n)!}\)

\(+\infty\)

\(\cos x\)

Hide code cell source

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

x = np.linspace(-0.99, 0.99, 300)

# Approximations de ln(1+x) par sommes partielles
def partial_log(x, N):
    """Somme partielle de sum (-1)^{n+1} x^n / n jusqu'à ordre N."""
    s = np.zeros_like(x)
    for n in range(1, N+1):
        s += ((-1)**(n+1)) * x**n / n
    return s

axes[0].plot(x, np.log(1+x), 'k-', lw=3, label=r'$\ln(1+x)$')
for N, col in [(1,'C0'),(3,'C1'),(7,'C2'),(15,'C3')]:
    axes[0].plot(x, partial_log(x, N), '--', color=col, lw=1.5, label=f'$N={N}$')
axes[0].set(xlabel='$x$', ylim=(-2, 1),
            title=r'Série entière : $\ln(1+x) = \sum_{n=1}^\infty \frac{(-1)^{n+1}}{n} x^n$')
axes[0].legend(fontsize=9)

# Approximations de arctan(x)
def partial_arctan(x, N):
    s = np.zeros_like(x)
    for n in range(N+1):
        s += ((-1)**n) * x**(2*n+1) / (2*n+1)
    return s

axes[1].plot(x, np.arctan(x), 'k-', lw=3, label=r'$\arctan(x)$')
for N, col in [(0,'C0'),(2,'C1'),(5,'C2'),(12,'C3')]:
    axes[1].plot(x, partial_arctan(x, N), '--', color=col, lw=1.5, label=f'$N={N}$')
axes[1].set(xlabel='$x$',
            title=r'Série entière : $\arctan(x) = \sum_{n=0}^\infty \frac{(-1)^n}{2n+1} x^{2n+1}$')
axes[1].legend(fontsize=9)

plt.tight_layout()
plt.show()

# pi/4 par Leibniz (arctan(1) = pi/4)
N_terms = 10000
k = np.arange(N_terms)
pi_approx = 4 * np.sum((-1)**k / (2*k+1))
print(f"Formule de Leibniz (10000 termes) : π ≈ {pi_approx:.6f}")
print(f"π réel : {np.pi:.6f}")
_images/10d591165ed1495a9e621de9b8e00a0088d59c95cc4f22c16365bc7c736354f3.png
Formule de Leibniz (10000 termes) : π ≈ 3.141493
π réel : 3.141593

Récapitulatif des critères#

Hide code cell source

fig, ax = plt.subplots(figsize=(12, 7))
ax.axis('off')

# Tableau des critères
criteres = [
    ("Condition nécessaire", "$u_n \\to 0$", "diverge si $u_n \\not\\to 0$", "ne conclut pas si $u_n \\to 0$"),
    ("Comparaison directe", "$0 \\leq u_n \\leq v_n$", "$\\sum v_n$ conv. $\\Rightarrow$ $\\sum u_n$ conv.", ""),
    ("Équivalents ($u_n>0$)", "$u_n \\sim v_n$", "même nature", ""),
    ("d'Alembert ($u_n>0$)", "$\\frac{u_{n+1}}{u_n} \\to L$", "conv. si $L<1$, div. si $L>1$", "indécis si $L=1$"),
    ("Cauchy racine ($u_n\\geq 0$)", "$u_n^{1/n} \\to L$", "conv. si $L<1$, div. si $L>1$", "indécis si $L=1$"),
    ("Condensation ($f\\searrow$)", "$\\sum f(n)$ vs $\\sum 2^k f(2^k)$", "même nature", ""),
    ("Leibniz (alternées)", "$(-1)^n a_n$, $a_n\\searrow 0$", "converge, $|R_n|\\leq a_{n+1}$", ""),
    ("Abel", "$\\sum b_n$ sommes bornées, $a_n\\searrow 0$", "$\\sum a_n b_n$ converge", ""),
    ("Intégrale ($f$ cont. décrois.)", "$\\int_1^\\infty f$", "même nature que $\\sum f(n)$", ""),
]

headers = ["Critère", "Condition", "Conclusion", "Remarque"]
col_widths = [0.22, 0.28, 0.30, 0.20]
col_x = [0.01, 0.23, 0.51, 0.81]
row_h = 0.085
y0 = 0.93

# En-têtes
for j, h in enumerate(headers):
    ax.text(col_x[j], y0, h, fontsize=10, fontweight='bold',
            transform=ax.transAxes, va='top',
            bbox=dict(boxstyle='round', facecolor='#1565C0', alpha=0.8))
    ax.text(col_x[j]+0.005, y0-0.01, h, fontsize=10, fontweight='bold',
            color='white', transform=ax.transAxes, va='top')

for i, row in enumerate(criteres):
    y = y0 - (i+1)*row_h
    bg = '#F5F5F5' if i % 2 == 0 else '#E3F2FD'
    ax.axhspan(y-row_h+0.01, y+0.005, alpha=0.5, color=bg, transform=ax.transAxes)
    for j, cell in enumerate(row):
        ax.text(col_x[j]+0.005, y-0.01, cell, fontsize=8.5,
                transform=ax.transAxes, va='top', wrap=True)

ax.set_title('Récapitulatif des critères de convergence des séries', fontsize=13, y=0.98)
plt.tight_layout()
plt.show()
_images/77e6a03a7b249f6d288578a814585678d9f4cfd66843a9b07bdf90d0875b07e7.png

Remarque 43

Stratégie pratique. Face à une série \(\sum u_n\) :

  1. Vérifier \(u_n \to 0\) (condition nécessaire).

  2. Si \(u_n > 0\) et a une forme de quotient ou puissance : essayer d’Alembert ou Cauchy racine.

  3. Si \(u_n \sim v_n\) avec \(v_n\) connu : comparaison par équivalents.

  4. Si la série est alternée : Leibniz.

  5. Si \(u_n = f(n)\) avec \(f\) intégrable : comparaison série-intégrale.

  6. Si les sommes partielles des \(b_n\) sont bornées : Abel.