Suites réelles#

L’essence des mathématiques, c’est la liberté.

— Georg Cantor

Définitions et exemples fondamentaux#

Définition 67 (Suite réelle)

Une suite réelle est une application \(u : \mathbb{N} \to \mathbb{R}\). On note \(u_n\) l’image de \(n\) et \((u_n)_{n \in \mathbb{N}}\) la suite.

Définition 68 (Suites particulières)

Une suite \((u_n)\) est

  • constante si \(\exists c \in \mathbb{R},\ \forall n \in \mathbb{N},\ u_n = c\)

  • stationnaire si \(\exists N \in \mathbb{N},\ \forall n \geq N,\ u_n = u_N\)

  • arithmétique de raison \(r\) si \(\forall n,\ u_{n+1} = u_n + r\), d’où \(u_n = u_0 + nr\)

  • géométrique de raison \(q\) si \(\forall n,\ u_{n+1} = q\,u_n\), d’où \(u_n = u_0\,q^n\)

Proposition 84 (Sommes partielles)

\[\sum_{k=0}^{n}(u_0 + kr) = (n+1)\,\frac{u_0 + u_n}{2}\]
\[\begin{split}\sum_{k=0}^{n} u_0\,q^k = \begin{cases} u_0\,\dfrac{1 - q^{n+1}}{1 - q} & \text{si } q \neq 1 \\ (n+1)\,u_0 & \text{si } q = 1 \end{cases}\end{split}\]

Proof. Somme géométrique. Posons \(S = \sum_{k=0}^n q^k\). Alors \(qS = \sum_{k=1}^{n+1} q^k\), donc \(S - qS = 1 - q^{n+1}\), d’où \(S = \frac{1-q^{n+1}}{1-q}\) pour \(q \neq 1\).

Hide code cell source

import math
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import seaborn as sns

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

Hide code cell source

# Suites arithmétiques et géométriques
fig, axes = plt.subplots(2, 1, figsize=(9, 7))

n = np.arange(20)
u_arith = 2 + 0.5 * n
u_geo   = 2 * 1.12**n

axes[0].stem(n, u_arith, linefmt='C0-', markerfmt='C0o', basefmt=' ')
axes[0].set(xlabel='$n$', ylabel='$u_n$',
            title=r'Suite arithmétique : $u_n = 2 + 0{,}5\,n$')

axes[1].stem(n, u_geo, linefmt='C1-', markerfmt='C1o', basefmt=' ')
axes[1].set(xlabel='$n$', ylabel='$u_n$',
            title=r'Suite géométrique : $u_n = 2 \cdot (1{,}12)^n$')

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

Monotonie et bornitude#

Définition 69 (Monotonie et bornitude)

Une suite \((u_n)\) est croissante si \(u_{n+1} \geq u_n\), décroissante si \(u_{n+1} \leq u_n\).

Elle est majorée si \(\exists M,\ \forall n,\ u_n \leq M\) ; minorée si \(\exists m,\ \forall n,\ u_n \geq m\) ; bornée si \(\exists M,\ \forall n,\ |u_n| \leq M\).

Remarque 34

Pour étudier la monotonie on examine le signe de \(u_{n+1} - u_n\), ou, si \(u_n > 0\), le rapport \(u_{n+1}/u_n\) comparé à 1.

Convergence : définition et propriétés#

Définition 70 (Limite d’une suite)

Soit \(\ell \in \mathbb{R}\). On dit que \((u_n)\) converge vers \(\ell\), noté \(u_n \to \ell\), si

\[\forall \varepsilon > 0,\ \exists N \in \mathbb{N},\ \forall n \geq N,\ |u_n - \ell| < \varepsilon.\]

Une suite qui ne converge pas est divergente.

Remarque 35

Géométriquement : tout intervalle ouvert \(]\ell - \varepsilon, \ell + \varepsilon[\) contient tous les termes \(u_n\) à partir d’un certain rang \(N(\varepsilon)\).

Proposition 85 (Unicité de la limite)

Si \((u_n)\) converge, sa limite est unique.

Proof. Supposons \(u_n \to \ell\) et \(u_n \to \ell'\) avec \(\ell \neq \ell'\). Pour \(\varepsilon = \frac{|\ell-\ell'|}{2} > 0\), il existe \(N\) tel que pour \(n \geq N\), \(|u_n - \ell| < \varepsilon\) et \(|u_n - \ell'| < \varepsilon\). Alors

\[|\ell - \ell'| \leq |u_n - \ell| + |u_n - \ell'| < 2\varepsilon = |\ell - \ell'|,\]

contradiction.

Proposition 86 (Suite convergente \(\Rightarrow\) bornée)

Toute suite convergente est bornée. La réciproque est fausse.

Proof. Soit \(\ell = \lim u_n\). Pour \(\varepsilon = 1\), il existe \(N\) tel que \(|u_n| \leq |\ell| + 1\) pour \(n \geq N\). On pose \(M = \max(|u_0|, \ldots, |u_{N-1}|, |\ell|+1)\).

Exemple 27

  • \(u_n = (-1)^n\) est bornée mais diverge (ses sous-suites paires et impaires convergent vers des limites différentes).

  • \(u_n = \frac{1}{n}\) converge vers 0 : pour \(\varepsilon > 0\), prendre \(N > 1/\varepsilon\) (Archimède).

  • \(u_n = q^n\) avec \(|q| < 1\) converge vers 0 : poser \(|q| = \frac{1}{1+h}\), alors \(|q^n| \leq \frac{1}{nh} \to 0\).

Opérations sur les limites#

Proposition 87 (Algèbre des limites)

Si \(u_n \to \ell\) et \(v_n \to \ell'\), alors

  • \(u_n + v_n \to \ell + \ell'\), \(\quad \lambda\,u_n \to \lambda\ell\), \(\quad u_n v_n \to \ell\ell'\)

  • Si \(\ell' \neq 0\) : \(v_n \neq 0\) à partir d’un rang et \(\frac{u_n}{v_n} \to \frac{\ell}{\ell'}\)

Proof. Produit. Comme \((u_n)\) est bornée (\(|u_n| \leq M\)) :

\[|u_n v_n - \ell\ell'| \leq |u_n|\,|v_n - \ell'| + |\ell'|\,|u_n - \ell| \leq M|v_n - \ell'| + |\ell'|\,|u_n - \ell| \to 0.\]

Théorèmes de comparaison#

Proposition 88 (Passage à la limite dans les inégalités)

Si \(u_n \leq v_n\) à partir d’un certain rang, \(u_n \to \ell\), \(v_n \to \ell'\), alors \(\ell \leq \ell'\).

L’inégalité stricte ne se conserve pas : \(\frac{1}{n} > 0\) mais \(\lim \frac{1}{n} = 0\).

Proposition 89 (Théorème des gendarmes)

Si \(u_n \leq w_n \leq v_n\) à partir d’un certain rang et \(\lim u_n = \lim v_n = \ell\), alors \(w_n \to \ell\).

Proof. Soit \(\varepsilon > 0\). Il existe \(N\) tel que pour \(n \geq N\), \(u_n \leq w_n \leq v_n\) et \(\ell - \varepsilon < u_n\) et \(v_n < \ell + \varepsilon\). Donc \(|w_n - \ell| < \varepsilon\).

Exemple 28

\(\dfrac{\sin n}{n} \to 0\) : encadrement \(-\frac{1}{n} \leq \frac{\sin n}{n} \leq \frac{1}{n}\).

\(\dfrac{n!}{n^n} \to 0\) : \(0 \leq \frac{n!}{n^n} = \prod_{k=1}^n \frac{k}{n} \leq \frac{1}{n} \to 0\).

Hide code cell source

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

n = np.arange(1, 60)

# Convergence de 1/n avec bande epsilon
axes[0].plot(n, 1/n, 'C0o-', markersize=4, label=r'$u_n = 1/n$')
eps = 0.1
axes[0].axhline(0, color='red', lw=1.5, ls='--', label='Limite $\\ell=0$')
axes[0].fill_between(n, -eps, eps, alpha=0.2, color='red', label=f'$\\varepsilon = {eps}$')
N_eps = int(np.ceil(1/eps))
axes[0].axvline(N_eps, color='green', ls=':', label=f'$N={N_eps}$')
axes[0].set(xlabel='$n$', ylim=(-0.25, 1.1),
            title=r'Convergence de $u_n = 1/n$')
axes[0].legend(fontsize=9)

# Suite (-1)^n bornée mais divergente
axes[1].stem(n[:40], (-1)**n[:40], linefmt='C1-', markerfmt='C1o', basefmt='k-')
axes[1].set(xlabel='$n$', ylim=(-1.6, 1.6),
            title=r'$u_n = (-1)^n$ : bornée mais divergente')
axes[1].axhline(1, color='gray', ls=':', alpha=0.6)
axes[1].axhline(-1, color='gray', ls=':', alpha=0.6)
axes[1].text(30, 1.1, 'valeur d\'adhérence $+1$', fontsize=9, color='gray')
axes[1].text(30, -1.25, 'valeur d\'adhérence $-1$', fontsize=9, color='gray')

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

Limites infinies#

Définition 71 (Limite infinie)

\((u_n)\) tend vers \(+\infty\) si \(\forall A \in \mathbb{R},\ \exists N,\ \forall n \geq N,\ u_n > A\).

\((u_n)\) tend vers \(-\infty\) si \(\forall A \in \mathbb{R},\ \exists N,\ \forall n \geq N,\ u_n < A\).

Proposition 90 (Comparaison et limite infinie)

Si \(u_n \leq v_n\) à partir d’un certain rang et \(u_n \to +\infty\), alors \(v_n \to +\infty\).

Suites monotones et théorème fondamental#

Proposition 91 (Théorème de la limite monotone)

  • Toute suite croissante majorée converge (vers \(\sup\{u_n\}\)).

  • Toute suite décroissante minorée converge (vers \(\inf\{u_n\}\)).

  • Toute suite croissante non majorée tend vers \(+\infty\).

Proof. Suite croissante majorée. L’ensemble \(\{u_n \mid n \in \mathbb{N}\}\) est non vide et majoré ; soit \(\ell = \sup\{u_n\}\) (propriété de la borne supérieure de \(\mathbb{R}\)). Soit \(\varepsilon > 0\) ; comme \(\ell - \varepsilon\) n’est pas un majorant, il existe \(N\) tel que \(u_N > \ell - \varepsilon\). Pour \(n \geq N\), la croissance donne \(\ell - \varepsilon < u_N \leq u_n \leq \ell\), donc \(|u_n - \ell| < \varepsilon\).

Remarque 36

Ce théorème est faux dans \(\mathbb{Q}\) : la suite \((r_n)\) des approximations décimales de \(\sqrt{2}\) est croissante et majorée dans \(\mathbb{Q}\), mais sa limite \(\sqrt{2}\) n’est pas dans \(\mathbb{Q}\). C’est pourquoi la complétude de \(\mathbb{R}\) est indispensable.

Exemple 29

La suite \(u_n = \sum_{k=0}^{n} \frac{1}{k!}\) converge vers \(e\). Elle est croissante. Pour \(k \geq 1\), \(k! \geq 2^{k-1}\), donc \(u_n \leq 1 + \sum_{k=1}^{n} \frac{1}{2^{k-1}} < 3\).

Hide code cell source

n = np.arange(15)
u_e = np.array([sum(1/math.factorial(k) for k in range(i+1)) for i in n])

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

axes[0].plot(n, u_e, 'C0o-', ms=8, label=r'$u_n = \sum_{k=0}^n \frac{1}{k!}$')
axes[0].axhline(np.e, color='red', ls='--', lw=2, label=r'$e \approx 2{,}718$')
axes[0].fill_between(n, u_e, np.e, alpha=0.25, color='C0', label='Écart')
axes[0].set(xlabel='$n$', title='Suite croissante majorée $\to e$')
axes[0].legend()

# Vitesse de convergence
axes[1].semilogy(n, np.abs(u_e - np.e), 'C2o-', ms=7, label=r'$|u_n - e|$')
axes[1].set(xlabel='$n$', ylabel='Erreur (log)', title='Convergence super-exponentielle vers $e$')
axes[1].legend()

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

Suites adjacentes#

Définition 72 (Suites adjacentes)

\((u_n)\) et \((v_n)\) sont adjacentes si \((u_n)\) est croissante, \((v_n)\) est décroissante et \(v_n - u_n \to 0\).

Proposition 92 (Théorème des suites adjacentes)

Si \((u_n)\) et \((v_n)\) sont adjacentes, elles convergent vers une même limite \(\ell\) avec

\[\forall n,\quad u_n \leq \ell \leq v_n.\]

Proof. \(v_n - u_n \geq 0\) (passage à la limite dans l’inégalité). \((u_n)\) croissante et majorée par \(v_0\), donc converge vers \(\ell\). \((v_n)\) décroissante et minorée par \(u_0\), donc converge vers \(\ell'\). Or \(\ell' - \ell = \lim(v_n - u_n) = 0\).

Exemple 30

Les suites \(u_n = \sum_{k=0}^n \frac{(-1)^k}{k!}\) et \(v_n = u_n + \frac{1}{(n+1)!}\) sont adjacentes et convergent vers \(e^{-1}\).

Suites extraites et valeurs d’adhérence#

Définition 73 (Suite extraite)

Soit \(\varphi : \mathbb{N} \to \mathbb{N}\) strictement croissante. La suite \((u_{\varphi(n)})\) est une suite extraite (sous-suite) de \((u_n)\).

Proposition 93 (Extraction et convergence)

Si \(u_n \to \ell\), toute sous-suite converge vers \(\ell\).

\((u_n)\) converge vers \(\ell\) \(\iff\) \((u_{2n}) \to \ell\) et \((u_{2n+1}) \to \ell\).

Proof. Si \(u_n \to \ell\), pour \(\varepsilon > 0\), il existe \(N\) tel que \(|u_n - \ell| < \varepsilon\) pour \(n \geq N\). Comme \(\varphi(n) \geq n\) (strictement croissante à valeurs dans \(\mathbb{N}\)), \(\varphi(n) \geq N\) pour \(n \geq N\), donc \(|u_{\varphi(n)} - \ell| < \varepsilon\).

Définition 74 (Valeur d’adhérence)

\(\ell\) est une valeur d’adhérence de \((u_n)\) s’il existe une sous-suite \((u_{\varphi(n)})\) convergeant vers \(\ell\).

Exemple 31

La suite \(u_n = (-1)^n + \frac{1}{n+1}\) a deux valeurs d’adhérence : \(+1\) et \(-1\).

La suite \(u_n = \sin\!\left(\frac{n\pi}{3}\right)\) a pour valeurs d’adhérence \(\{0, \pm\frac{\sqrt{3}}{2}, \pm 1\}\).

Théorème de Bolzano-Weierstrass#

Proposition 94 (Théorème de Bolzano-Weierstrass)

Toute suite bornée admet au moins une sous-suite convergente.

Proof. Soit \((u_n) \subset [a, b]\). On construit par dichotomie une suite d’intervalles emboîtés \([a_k, b_k]\) : à chaque étape, au moins l’une des deux moitiés contient une infinité de termes ; on la choisit. On a \(b_k - a_k = \frac{b-a}{2^k} \to 0\) ; les suites \((a_k)\) et \((b_k)\) sont adjacentes, donc convergent vers un même \(\ell\).

On extrait \(\varphi\) : \(\varphi(0)\) quelconque dans \([a_0, b_0]\), puis \(\varphi(k+1) > \varphi(k)\) avec \(u_{\varphi(k+1)} \in [a_{k+1}, b_{k+1}]\). Par les gendarmes, \(u_{\varphi(k)} \to \ell\).

Remarque 37

Bolzano-Weierstrass est équivalent à la propriété de la borne supérieure et sera essentiel pour la compacité dans \(\mathbb{R}^n\).

Suites de Cauchy et complétude de \(\mathbb{R}\)#

Définition 75 (Suite de Cauchy)

\((u_n)\) est une suite de Cauchy si

\[\forall \varepsilon > 0,\ \exists N \in \mathbb{N},\ \forall p, q \geq N,\quad |u_p - u_q| < \varepsilon.\]

Remarque 38

La condition de Cauchy dit que les termes de la suite se rapprochent les uns des autres, sans référence à une limite a priori. C’est une condition intrinsèque à la suite.

Proposition 95 (Théorème de complétude de \(\mathbb{R}\))

Dans \(\mathbb{R}\), une suite est convergente si et seulement si elle est de Cauchy.

\[u_n \to \ell \iff (u_n) \text{ est de Cauchy.}\]

Proof. (\(\Rightarrow\)) Supposons \(u_n \to \ell\). Soit \(\varepsilon > 0\) ; il existe \(N\) tel que \(|u_n - \ell| < \varepsilon/2\) pour \(n \geq N\). Pour \(p, q \geq N\) :

\[|u_p - u_q| \leq |u_p - \ell| + |u_q - \ell| < \varepsilon.\]

(\(\Leftarrow\)) Supposons \((u_n)\) de Cauchy.

Bornitude. Pour \(\varepsilon = 1\), il existe \(N\) tel que \(|u_p - u_q| < 1\) pour \(p,q \geq N\). En particulier \(|u_n| \leq |u_N| + 1\) pour \(n \geq N\), donc \((u_n)\) est bornée.

Existence d’une valeur d’adhérence. Par Bolzano-Weierstrass, il existe une sous-suite \(u_{\varphi(n)} \to \ell\).

Convergence de la suite entière. Soit \(\varepsilon > 0\). Il existe \(N_1\) (Cauchy) tel que \(|u_p - u_q| < \varepsilon/2\) pour \(p,q \geq N_1\), et \(N_2\) tel que \(|u_{\varphi(n)} - \ell| < \varepsilon/2\) pour \(n \geq N_2\). Soit \(n \geq N_1\) ; on choisit \(k \geq N_2\) avec \(\varphi(k) \geq N_1\) :

\[|u_n - \ell| \leq |u_n - u_{\varphi(k)}| + |u_{\varphi(k)} - \ell| < \frac{\varepsilon}{2} + \frac{\varepsilon}{2} = \varepsilon.\]

Remarque 39

Ce théorème caractérise la complétude de \(\mathbb{R}\). Dans \(\mathbb{Q}\), il est faux : la suite \(u_n = \sum_{k=0}^n \frac{1}{k!}\) est de Cauchy dans \(\mathbb{Q}\) mais converge vers \(e \notin \mathbb{Q}\).

La complétude est la propriété fondamentale qui distingue \(\mathbb{R}\) de \(\mathbb{Q}\) du point de vue de l’analyse.

Hide code cell source

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

# Critère de Cauchy : visualisation de sup|u_p - u_q| pour p,q >= N
N_total = 60
u_cauchy = 2 + np.cumsum((-1)**np.arange(N_total) / (np.arange(1, N_total+1)))  # série alternée
N_vals = np.arange(1, 40)
cauchy_criterion = [np.max(np.abs(np.subtract.outer(u_cauchy[N:], u_cauchy[N:])))
                    for N in N_vals]

axes[0].semilogy(N_vals, cauchy_criterion, 'C0o-', ms=5,
                 label=r'$\sup_{p,q \geq N}|u_p - u_q|$')
axes[0].axhline(0.1, color='red', ls='--', label=r'$\varepsilon = 0.1$')
axes[0].axhline(0.01, color='orange', ls='--', label=r'$\varepsilon = 0.01$')
axes[0].set(xlabel='$N$', ylabel='Écart maximal (log)',
            title=r'Critère de Cauchy : $\sup_{p,q\geq N}|u_p-u_q| \to 0$')
axes[0].legend(fontsize=9)

# Suite de Cauchy dans Q convergeant vers un irrationnel
n = np.arange(1, 30)
u_sqrt2 = np.array([sum((-1)**k * (1 - 2**(-k)) for k in range(1, i+1)) for i in n])
# Plus simple : approximations de sqrt(2) par Héron
u_heron = np.array([1.0])
for _ in range(28):
    u_heron = np.append(u_heron, 0.5*(u_heron[-1] + 2/u_heron[-1]))

axes[1].plot(np.arange(len(u_heron)), u_heron, 'C1o-', ms=6,
             label=r'Suite de Héron ($u_0=1$)')
axes[1].axhline(np.sqrt(2), color='red', ls='--', lw=2, label=r'$\sqrt{2} \notin \mathbb{Q}$')
axes[1].set(xlabel='$n$', title='Suite de Cauchy dans $\\mathbb{Q}$ convergeant vers $\\sqrt{2}$')
axes[1].legend()

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

Suites récurrentes et toile d’araignée#

Définition 76 (Suite récurrente)

Une suite définie par récurrence est donnée par \(u_0 \in I\) et \(u_{n+1} = f(u_n)\), où \(f : I \to I\).

Proposition 96 (Condition de convergence : point fixe)

Si \((u_n)\) converge vers \(\ell\) et \(f\) est continue en \(\ell\), alors \(f(\ell) = \ell\) (point fixe de \(f\)).

Proposition 97 (Théorème du point fixe contractant)

Soit \(f : [a,b] \to [a,b]\) avec \(|f(x) - f(y)| \leq k\,|x - y|\) pour un \(k \in [0, 1[\) (contraction). Alors \(f\) a un unique point fixe \(\ell\) et pour tout \(u_0 \in [a,b]\), \(u_{n+1} = f(u_n)\) converge vers \(\ell\) avec

\[|u_n - \ell| \leq \frac{k^n}{1-k}\,|u_1 - u_0|.\]

Proof. \((u_n)\) est de Cauchy car \(|u_{n+p} - u_n| \leq k^n\,|u_p - u_0|/(1-k) \to 0\), donc converge vers \(\ell \in [a,b]\), qui vérifie \(f(\ell) = \ell\) par passage à la limite. L’unicité vient de \(|\ell - \ell'| = |f(\ell) - f(\ell')| \leq k|\ell - \ell'|\) impliquant \(\ell = \ell'\).

Exemple 32

Méthode de Newton-Héron pour \(\sqrt{a}\).

\(u_{n+1} = \frac{1}{2}\!\left(u_n + \frac{a}{u_n}\right)\) converge vers \(\sqrt{a}\) avec convergence quadratique :

\[u_{n+1} - \sqrt{a} = \frac{(u_n - \sqrt{a})^2}{2u_n},\]

l’erreur est au carré à chaque itération.

Hide code cell source

def cobweb(f, u0, n_iter, ax, x_range, title, color='C0'):
    """Diagramme toile d'araignée pour u_{n+1} = f(u_n)."""
    x = np.linspace(*x_range, 500)
    ax.plot(x, f(x), color, lw=2, label='$y = f(x)$')
    ax.plot(x, x, 'k--', lw=1, label='$y = x$')

    u = u0
    for _ in range(n_iter):
        fu = f(u)
        ax.plot([u, u], [u, fu], 'gray', lw=0.8, alpha=0.7)
        ax.plot([u, fu], [fu, fu], 'gray', lw=0.8, alpha=0.7)
        u = fu

    ax.plot(u0, f(u0), 'ro', ms=7, label=f'$u_0 = {u0}$')
    ax.set(title=title, xlabel='$x$')
    ax.legend(fontsize=9)

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

# 1. Convergence vers point fixe stable
f1 = lambda x: np.cos(x)
cobweb(f1, 0.5, 20, axes[0], (0, 1.5), r'$u_{n+1} = \cos(u_n)$ — attractif', 'C0')
# Point fixe de cos : solution de cos(x)=x ≈ 0.739
axes[0].axvline(0.7390851332, color='red', ls=':', alpha=0.5)

# 2. Divergence (point fixe instable)
f2 = lambda x: x**2 - 0.5
cobweb(f2, 0.4, 12, axes[1], (-0.5, 1.8), r'$u_{n+1} = x^2 - 0{,}5$ — instable', 'C1')

# 3. Newton-Héron pour sqrt(2)
f3 = lambda x: 0.5 * (x + 2/x)
cobweb(f3, 3.0, 8, axes[2], (1, 3.5), r'Newton-Héron : $u_{n+1} = \frac{1}{2}(u_n + 2/u_n)$', 'C2')
axes[2].axvline(np.sqrt(2), color='red', ls=':', alpha=0.5, label=r'$\sqrt{2}$')
axes[2].legend(fontsize=9)

plt.tight_layout()
plt.show()
_images/9ce3ceb5020f0321e7e292482e5a34ea1c7d56bd9593d9e44e7a5328e183a00f.png

Hide code cell source

# Convergence quadratique (Newton) vs linéaire
fig, ax = plt.subplots(figsize=(8, 5))

u = np.array([3.0])
for _ in range(12):
    u = np.append(u, 0.5*(u[-1] + 2/u[-1]))
err_newton = np.abs(u - np.sqrt(2))

# Convergence linéaire (ratio constant ~0.5)
v = np.array([1.5])
for _ in range(40):
    v = np.append(v, v[-1] - 0.5*(v[-1] - np.sqrt(2)))
err_lin = np.abs(v - np.sqrt(2))

ax.semilogy(err_newton[err_newton > 0], 'C0o-', ms=8, label='Newton-Héron (quadratique)')
ax.semilogy(err_lin[err_lin > 0], 'C1s--', ms=5, label='Linéaire ($k = 0{,}5$)', alpha=0.8)
ax.set(xlabel='Itération', ylabel='$|u_n - \\sqrt{2}|$ (log)',
       title='Convergence quadratique vs linéaire')
ax.legend()
plt.tight_layout()
plt.show()

print("Erreurs Newton-Héron :")
for i, e in enumerate(err_newton[:8]):
    print(f"  n={i}: erreur = {e:.2e}")
_images/4aab939c3113954f22a7bde03bf057db0d8f724822c180f880fa1b1a359829cc.png
Erreurs Newton-Héron :
  n=0: erreur = 1.59e+00
  n=1: erreur = 4.19e-01
  n=2: erreur = 4.79e-02
  n=3: erreur = 7.85e-04
  n=4: erreur = 2.18e-07
  n=5: erreur = 1.67e-14
  n=6: erreur = 2.22e-16
  n=7: erreur = 2.22e-16

Suites récurrentes linéaires d’ordre 2#

Définition 77 (Récurrence linéaire d’ordre 2)

Une suite satisfait une récurrence linéaire d’ordre 2 si

\[u_{n+2} = a\,u_{n+1} + b\,u_n, \quad a, b \in \mathbb{R},\ b \neq 0.\]

Proposition 98 (Résolution par équation caractéristique)

L”équation caractéristique est \(r^2 = ar + b\), soit \(r^2 - ar - b = 0\).

  • Deux racines réelles distinctes \(r_1 \neq r_2\) : \(u_n = \alpha\,r_1^n + \beta\,r_2^n\)

  • Racine double \(r_0\) : \(u_n = (\alpha + \beta n)\,r_0^n\)

  • Racines complexes conjuguées \(r = \rho\,e^{\pm i\theta}\) : \(u_n = \rho^n(\alpha\cos(n\theta) + \beta\sin(n\theta))\)

Les constantes \(\alpha, \beta\) sont déterminées par les conditions initiales \(u_0, u_1\).

Exemple 33

Suite de Fibonacci. \(F_0 = 0\), \(F_1 = 1\), \(F_{n+2} = F_{n+1} + F_n\).

Équation caractéristique : \(r^2 - r - 1 = 0\), racines \(\varphi = \frac{1+\sqrt{5}}{2} \approx 1{,}618\) (nombre d’or) et \(\hat{\varphi} = \frac{1-\sqrt{5}}{2}\).

Formule de Binet : \(F_n = \frac{\varphi^n - \hat{\varphi}^n}{\sqrt{5}}\).

Comme \(|\hat{\varphi}| < 1\), \(\hat{\varphi}^n \to 0\) donc \(F_n \sim \frac{\varphi^n}{\sqrt{5}}\) et \(\frac{F_{n+1}}{F_n} \to \varphi\).

Hide code cell source

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

# Suite de Fibonacci
phi = (1 + np.sqrt(5)) / 2
phi_hat = (1 - np.sqrt(5)) / 2
n = np.arange(20)
F = np.round((phi**n - phi_hat**n) / np.sqrt(5)).astype(int)

axes[0].bar(n, F, color='C0', alpha=0.7, label='$F_n$')
axes[0].plot(n, phi**n / np.sqrt(5), 'r--', lw=2, label=r'$\varphi^n/\sqrt{5}$')
axes[0].set(xlabel='$n$', ylabel='$F_n$', title='Suite de Fibonacci et approximation')
axes[0].legend()

# Ratio F_{n+1}/F_n -> phi (on commence à n=2 pour éviter F[0]=0)
ratios = F[2:] / F[1:-1].astype(float)
axes[1].plot(n[2:], ratios, 'C1o-', ms=6, label=r'$F_{n+1}/F_n$')
axes[1].axhline(phi, color='red', ls='--', lw=2, label=r'$\varphi = \frac{1+\sqrt{5}}{2}$')
axes[1].set(xlabel='$n$', title=r'$F_{n+1}/F_n \to \varphi$ (nombre d\'or)')
axes[1].legend()

plt.tight_layout()
plt.show()

print(f"Nombre d'or φ = {phi:.10f}")
print(f"F_20/F_19 = {F[19]/F[18]:.10f}")
_images/786d43617374d70fcf3ccc82b5dc07cfa17b6bd13816c3b7337d53a653378bf8.png
Nombre d'or φ = 1.6180339887
F_20/F_19 = 1.6180340557

Théorème de Cesàro#

Proposition 99 (Théorème de Cesàro)

Si \(u_n \to \ell \in \mathbb{R} \cup \{+\infty, -\infty\}\), alors

\[\frac{u_0 + u_1 + \cdots + u_n}{n+1} \longrightarrow \ell.\]

La réciproque est fausse : la moyenne de Cesàro peut converger sans que \((u_n)\) converge.

Proof. Cas \(\ell \in \mathbb{R}\). Notons \(\sigma_n = \frac{1}{n+1}\sum_{k=0}^n u_k\) et \(v_n = u_n - \ell\). On a \(v_n \to 0\), et il s’agit de montrer \(\frac{1}{n+1}\sum_{k=0}^n v_k \to 0\).

Soit \(\varepsilon > 0\). Il existe \(N\) tel que \(|v_k| < \varepsilon/2\) pour \(k \geq N\). Pour \(n > N\) :

\[\left|\frac{1}{n+1}\sum_{k=0}^n v_k\right| \leq \frac{1}{n+1}\sum_{k=0}^{N-1}|v_k| + \frac{1}{n+1}\sum_{k=N}^n |v_k| \leq \underbrace{\frac{C}{n+1}}_{\to 0} + \frac{\varepsilon}{2}.\]

Pour \(n\) assez grand, le premier terme est \(< \varepsilon/2\), ce qui donne \(|\sigma_n - \ell| < \varepsilon\).

Exemple 34

  • \(u_n = (-1)^n\) diverge, mais \(\sigma_n \to 0\).

  • \(u_n = n\) implique \(\sigma_n = \frac{n}{2} \to +\infty\).

  • Corollaire de Stolz-Cesàro : si \(b_n \nearrow +\infty\) et \(\frac{a_n - a_{n-1}}{b_n - b_{n-1}} \to \ell\), alors \(\frac{a_n}{b_n} \to \ell\).

Hide code cell source

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

n_max = 100
n = np.arange(n_max)

# Exemple 1 : u_n -> ell, moyenne -> ell aussi
u = 3 + 5 * np.exp(-0.15 * n) * np.cos(0.8 * n)  # oscille puis -> 3
sigma = np.cumsum(u) / (n + 1)

axes[0].plot(n, u, 'C0-', alpha=0.6, lw=1.2, label='$u_n$')
axes[0].plot(n, sigma, 'C1-', lw=2.5, label=r'$\sigma_n = \frac{1}{n+1}\sum u_k$')
axes[0].axhline(3, color='red', ls='--', lw=1.5, label='Limite $\\ell = 3$')
axes[0].set(xlabel='$n$', title='Cesàro : $(u_n)$ convergente')
axes[0].legend(fontsize=9)

# Exemple 2 : u_n = (-1)^n diverge, sigma_n -> 0
u2 = (-1)**n
sigma2 = np.cumsum(u2) / (n + 1)
axes[1].plot(n, u2, 'C0-', alpha=0.5, lw=0.8, label='$u_n = (-1)^n$')
axes[1].plot(n, sigma2, 'C1-', lw=2.5, label=r'$\sigma_n \to 0$')
axes[1].axhline(0, color='red', ls='--', lw=1.5)
axes[1].set(xlabel='$n$', title=r'Cesàro : $(-1)^n$ diverge, $\sigma_n \to 0$')
axes[1].legend(fontsize=9)

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

Équivalents et comparaisons asymptotiques#

Définition 78 (Notations de Landau pour suites)

Soient \((u_n)\) et \((v_n)\) des suites avec \(v_n \neq 0\) à partir d’un rang.

  • \(u_n = O(v_n)\) si \(\exists C > 0,\ \exists N,\ \forall n \geq N,\ |u_n| \leq C|v_n|\)

  • \(u_n = o(v_n)\) si \(\frac{u_n}{v_n} \to 0\)

  • \(u_n \sim v_n\) (équivalent) si \(\frac{u_n}{v_n} \to 1\)

Proposition 100 (Propriétés des équivalents)

  • \(u_n \sim v_n \implies \lim u_n = \lim v_n\) (si la limite existe)

  • \(u_n \sim v_n\) et \(v_n \sim w_n \implies u_n \sim w_n\) (transitivité)

  • \(u_n \sim v_n\) et \(u_n' \sim v_n' \implies u_n u_n' \sim v_n v_n'\) (produit)

  • Attention : \(u_n \sim v_n\) n’implique PAS \(e^{u_n} \sim e^{v_n}\) en général.

Exemple 35

Équivalents classiques. Pour \(n \to +\infty\) :

  • \(\ln(n!) \sim n\ln n\) (Stirling : \(n! \sim \sqrt{2\pi n}\,\left(\frac{n}{e}\right)^n\))

  • \(\binom{2n}{n} \sim \frac{4^n}{\sqrt{\pi n}}\)

  • \(\sum_{k=1}^n \frac{1}{k} \sim \ln n\) (série harmonique)

  • \(\sum_{k=1}^n \frac{1}{k} = \ln n + \gamma + O(1/n)\)\(\gamma \approx 0{,}5772\) est la constante d’Euler-Mascheroni

Hide code cell source

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

n = np.arange(1, 200)

# Série harmonique vs ln(n) + gamma
gamma = 0.5772156649
H_n = np.cumsum(1/n)
axes[0].plot(n, H_n, 'C0-', lw=2, label=r'$H_n = \sum_{k=1}^n \frac{1}{k}$')
axes[0].plot(n, np.log(n) + gamma, 'C1--', lw=2, label=r'$\ln n + \gamma$')
axes[0].set(xlabel='$n$', title='Série harmonique et constante d\'Euler')
axes[0].legend()

# n! vs Stirling
n2 = np.arange(1, 30)
log_fact = np.array([math.lgamma(k+1) for k in n2])
log_stirling = 0.5*np.log(2*np.pi*n2) + n2*np.log(n2) - n2
axes[1].plot(n2, log_fact, 'C0o-', ms=6, label=r'$\ln(n!)$')
axes[1].plot(n2, log_stirling, 'C1--', lw=2, label=r'Stirling : $n\ln n - n + \frac{1}{2}\ln(2\pi n)$')
axes[1].set(xlabel='$n$', ylabel='$\\ln(n!)$', title='Formule de Stirling')
axes[1].legend(fontsize=9)

plt.tight_layout()
plt.show()

print(f"Constante d'Euler-Mascheroni γ ≈ {gamma:.6f}")
print(f"H_100 = {H_n[99]:.6f}, ln(100)+γ = {np.log(100)+gamma:.6f}")
_images/0f4773463378223c4eba47f1a550d3d67dcd95b2ebf79b68b4f6dd0a9bb3b687.png
Constante d'Euler-Mascheroni γ ≈ 0.577216
H_100 = 5.187378, ln(100)+γ = 5.182386

Récapitulatif : implications entre propriétés#

Hide code cell source

fig, ax = plt.subplots(figsize=(10, 6))
ax.axis('off')

# Boîtes colorées avec implications
props = [
    (0.5, 0.85, 'Suite de Cauchy', '#2196F3'),
    (0.5, 0.65, 'Convergente ($u_n \\to \\ell$)', '#4CAF50'),
    (0.5, 0.45, 'Bornée', '#FF9800'),
    (0.15, 0.25, 'Monotone bornée', '#9C27B0'),
    (0.85, 0.25, 'Valeur d\'adhérence', '#F44336'),
]

for (x, y, label, color) in props:
    ax.text(x, y, label, ha='center', va='center', fontsize=12,
            bbox=dict(boxstyle='round,pad=0.4', facecolor=color, alpha=0.3, edgecolor=color, lw=2),
            transform=ax.transAxes)

# Flèches
arrows = [
    (0.5, 0.80, 0.5, 0.70, r'$\Leftrightarrow$ (complétude de $\mathbb{R}$)', 'black'),
    (0.5, 0.60, 0.5, 0.50, r'$\Rightarrow$', 'gray'),
    (0.5, 0.40, 0.15, 0.30, r'$\Rightarrow$(monotone)', 'purple'),
    (0.5, 0.40, 0.85, 0.30, r'BW: $\Rightarrow \exists$ sous-suite', 'red'),
]

for (x1, y1, x2, y2, label, color) in arrows:
    ax.annotate('', xy=(x2, y2+0.04), xytext=(x1, y1-0.04),
                arrowprops=dict(arrowstyle='->', color=color, lw=1.5),
                xycoords='axes fraction', textcoords='axes fraction')
    mx, my = (x1+x2)/2, (y1+y2)/2
    ax.text(mx + 0.03, my, label, fontsize=9, color=color, ha='left',
            transform=ax.transAxes)

ax.set_title('Implications entre propriétés des suites réelles', fontsize=14, pad=10)
plt.tight_layout()
plt.show()
_images/f6f377085bb6cc9e5f9abd16d124dd0891dd761cf30d4bc46b3c1151a18290c7.png