Des méthodes numériques qui utilisent le hasard pour résoudre des problèmes.
Le principe en une phrase. Remplacer un calcul difficile par une moyenne de tirages aléatoires faciles à produire.
rand() à n’importe quelle loi.Simuler une variable aléatoire \(X\) à valeurs dans un ensemble \(E\), c’est disposer d’un programme dont chaque exécution renvoie une valeur de \(E\) distribuée selon la loi de \(X\).
Des appels successifs renvoient des réalisations indépendantes.
Supposons que l’on dispose d’un générateur de points au hasard dans le carré rouge. Ce point a-t-il été tiré uniformément ?
Et ceux-là ? On ne peut juger un générateur qu’à travers beaucoup de points.
Trois générateurs de points dans le carré. Lequel est uniforme ?
Trois générateurs de points dans le carré. Lequel est uniforme ?
Le comportement d’un générateur est déterminé par le comportement statistique de la suite des points qu’il produit.
rng = np.random.default_rng(graine) puis rng.random().Bien que déterministe, la suite doit être indiscernable, statistiquement, d’un vrai tirage au hasard.
\[ x_{n+1} = (a\,x_n + c) \bmod m, \qquad u_n = \frac{x_n}{m} \in [0,1[. \]
Aujourd’hui : Mersenne Twister (module random, période \(2^{19937}-1\)), PCG64 (numpy).
RANDU (IBM, années 1960) : \(x_{n+1} = 65\,539\,x_n \bmod 2^{31}\). Les triplets \((u_n, u_{n+1}, u_{n+2})\) semblent remplir le cube…
RANDU (IBM, années 1960) : \(x_{n+1} = 65\,539\,x_n \bmod 2^{31}\). Les triplets \((u_n, u_{n+1}, u_{n+2})\) semblent remplir le cube…
mais \(u_{n+2} - 6u_{n+1} + 9u_n\) est toujours entier.
L’ordinateur fournit des uniformes sur \([0,1]\).
Tout le reste se construit à partir de là :
Dans toute la suite, rand() renvoie un tirage uniforme sur \([0,1]\), indépendant des tirages précédents.
Soit \(X\) à valeurs dans \(\{0, \dots, n\}\) avec \(\mathbb{P}(X = k) = p_k\).
rand()Idée : découper \([0,1]\) en intervalles de longueurs \(p_0, p_1, \dots, p_n\).
Avec \(s_k = p_0 + \dots + p_k\) (et \(s_{-1} = 0\)) : \[ \mathbb{P}(X = k) = \mathbb{P}\big(s_{k-1} < U \le s_k\big) = p_k. \]
On sait simuler une uniforme sur \([0,1]\).
Les coordonnées d’un point uniforme sur un pavé sont indépendantes : c’est faux pour un disque, une ellipse, un flocon…
Un point uniforme sur le pavé, à partir de deux tirages uniformes sur des segments.
On tire \(V_1\) sur \([a_1,b_1]\), puis \(V_2\) sur \([a_2,b_2]\) indépendamment, et on les réunit : \((V_1,V_2)\) est uniforme sur le pavé.
Des points uniformes sur une ellipse. Que dire de leurs deux coordonnées ?
La loi de l’ordonnée dépend de l’abscisse : on ne peut pas tirer les deux coordonnées séparément.
On veut un point uniforme sur un domaine \(D\).
. . .
Idée : tirer dans un pavé \(B \supset D\) et ne garder que les points tombés dans \(D\).

Le point renvoyé est uniforme sur \(D\) : \(\;\mathbb{P}(V \in A \mid V \in D) = \dfrac{|A \cap D|}{|D|}\).
Le nombre de tirages suit une loi géométrique de paramètre \(|D|/|B|\) : il vaut \(|B|/|D|\) en moyenne.
Plus le pavé \(B\) est ajusté à \(D\), plus la méthode est rapide !
Tirer dans le pavé, garder les points tombés dans le flocon. Même nombre de propositions des deux côtés.
Tirer dans le pavé, garder les points tombés dans le flocon. Même nombre de propositions des deux côtés.
Soit \(X\) une variable réelle de fonction de répartition \(F(t) = \mathbb{P}(X \le t)\).
Si \(F\) est bijective et si \(U\) est uniforme sur \([0,1]\) : \[ \mathbb{P}\big(F^{-1}(U) \le t\big) = \mathbb{P}\big(U \le F(t)\big) = F(t), \qquad \forall t \in \mathbb{R}. \]
Donc \(F^{-1}(U)\) a la même loi que \(X\).
Pour simuler \(X\) de fonction de répartition \(F\) : tirer \(U\) uniforme et renvoyer \(F^{-1}(U)\).
On tire \(U\) sur l’axe vertical, on rejoint la courbe de \(F\), on lit \(X = F^{-1}(U)\) sur l’axe horizontal.
Loi exponentielle de paramètre \(\lambda > 0\) : densité \(f(x) = \lambda e^{-\lambda x}\,\mathbf{1}_{x \ge 0}\).
\[ F(x) = \begin{cases} 1 - e^{-\lambda x} & \text{si } x \ge 0,\\ 0 & \text{sinon,} \end{cases} \]
\[ F^{-1}(u) = -\frac{1}{\lambda}\ln(1-u), \quad u \in [0,1[. \]
rand()\(1-U\) a la même loi que \(U\) : renvoyer \(-\ln(U)/\lambda\) convient aussi.
Problème : \(F\) n’est pas toujours bijective (lois discrètes, paliers…).
On définit l’inverse généralisée : \[ G(u) = \inf\{t \in \mathbb{R} : F(t) \ge u\}, \qquad u \in \,]0,1[. \]
Comme \(F\) est croissante et continue à droite : \(\quad G(u) \le t \iff u \le F(t)\).
Donc \(\mathbb{P}\big(G(U) \le t\big) = \mathbb{P}\big(U \le F(t)\big) = F(t)\) : \(G(U)\) a toujours la loi de \(X\).
Pour une loi discrète, \(F\) est en escalier : on retrouve exactement l’algorithme des lois à valeurs finies.
La méthode demande de savoir calculer \(G\).
Autre idée : revenir à la méthode du rejet, en regardant sous le graphe de la densité.
Soit \(f\) une densité et \(\mathcal{A}_f = \{(x,y) : 0 \le y \le f(x)\}\) (d’aire \(1\)).
Preuve de 1 : \(\;\mathbb{P}(Y_1 \le t) = \big|\mathcal{A}_f \cap \{x \le t\}\big| = \displaystyle\int_{-\infty}^{t} f(x)\,dx.\)
Des points uniformes sous le graphe de \(f\)… et leurs abscisses, qui ont pour densité \(f\).
On veut simuler \(X\) de densité \(f\).
Exemple : \(f(x) = \tfrac{2}{\sqrt{\pi}}\sqrt{x}\,e^{-x}\) sur \([0, +\infty[\) (loi Gamma de paramètre \(3/2\)), \(\;g(x) = \tfrac23 e^{-2x/3}\) (exponentielle, simulable par inversion), \(\;c = \sqrt{27/(2\pi e)} \approx 1{,}26\).

rand()\(Y\) renvoyé a pour densité \(f\). Le nombre d’essais est géométrique de moyenne \(c\) : on veut \(c\) le plus petit possible, donc \(g\) proche de \(f\).
Une chaîne de Markov sur un espace d’états \(E\) (fini ou dénombrable) est une suite \((X_n)_{n \ge 0}\) telle que \[ \mathbb{P}\big(X_{n+1} = j \mid X_n = i, X_{n-1}, \dots, X_0\big) = q_{i,j}, \qquad \forall i,j \in E,\ \forall n \ge 0. \]
Sa loi est caractérisée par
La loi de \(X_n\) est \(\mu\,q^n\)… mais la simulation n’utilise jamais \(q^n\) (souvent incalculable) : on avance pas à pas.
Chaque pas ne demande qu’un tirage selon une loi discrète connue.
Chaîne sur \(E = \{1, 2, 3, 4\}\) de matrice de transition
\[ q = \begin{pmatrix} 0{,}19 & 0{,}3 & 0{,}5 & 0{,}01 \\ 0 & 0{,}5 & 0{,}49 & 0{,}01 \\ 0{,}3 & 0{,}3 & 0{,}39 & 0{,}01 \\ 0 & 0 & 0 & 1 \end{pmatrix} \]
\(1\,500\) chaînes indépendantes, toutes parties de l’état \(1\).
La répartition des chaînes approche la loi \(\mu\,q^n\) de \(X_n\) : la masse se vide dans l’état absorbant.
Une loi \(\nu\) sur \(E\) est invariante (ou stationnaire) pour \(q\) si \(\nu\,q = \nu\), c’est-à-dire \(\displaystyle\sum_{i \in E} \nu_i\, q_{i,j} = \nu_j\) pour tout \(j\). Si \(X_0\) suit la loi \(\nu\), alors \(X_n\) suit la loi \(\nu\) pour tout \(n\).
Si \(E\) est fini et si \(q\) est irréductible et apériodique, il existe une unique loi invariante \(\nu\), et pour toute loi initiale \(\mu\) : \[ \mu\,q^n \xrightarrow[n\to\infty]{} \nu . \]
Dans l’exemple précédent, la chaîne n’est pas irréductible : la seule loi invariante est la masse en \(4\), l’état absorbant.
Chaque jour est ensoleillé (\(1\)), nuageux (\(2\)) ou pluvieux (\(3\)), avec \[ q = \begin{pmatrix} 0{,}6 & 0{,}3 & 0{,}1 \\ 0{,}3 & 0{,}4 & 0{,}3 \\ 0{,}2 & 0{,}4 & 0{,}4 \end{pmatrix}. \]
Tous les \(q_{i,j}\) sont \(> 0\) : la chaîne est irréductible et apériodique. On résout \(\nu\,q = \nu\) : \[ \nu = \left(\tfrac{24}{61},\ \tfrac{22}{61},\ \tfrac{15}{61}\right) \approx (0{,}39\ ;\ 0{,}36\ ;\ 0{,}25). \]
À long terme, il pleut environ un jour sur quatre, quel que soit le temps d’aujourd’hui.
\(1\,500\) chaînes indépendantes, toutes parties de l’état « pluie ».
En quelques pas, la loi de \(X_n\) se stabilise sur \(\nu\)… alors que chaque chaîne continue de bouger.
Chaîne sur \(E = \mathbb{Z}\) de transition \[ q_{i,j} = \begin{cases} \tfrac12 & \text{si } j = i+1 \text{ ou } j = i-1,\\ 0 & \text{sinon.} \end{cases} \]
Autrement dit \(X_n = X_0 + \xi_1 + \dots + \xi_n\), où les \(\xi_k = \pm 1\) sont i.i.d.
Une trajectoire, puis \(300\) : l’éventail s’ouvre comme \(\sqrt{n}\).
Un modèle de génétique des populations pour la dérive génétique.
Le nombre \(X_n\) d’individus portant A est une chaîne de Markov sur \(\{0, \dots, N\}\) : \[ q_{i,j} = \binom{N}{j}\left(\frac{i}{N}\right)^{j}\left(1 - \frac{i}{N}\right)^{N-j}, \quad \text{i.e.} \quad X_{n+1} \mid X_n = i \;\sim\; \mathrm{Bin}\!\left(N, \tfrac{i}{N}\right). \]
Les états \(0\) et \(N\) sont absorbants : tôt ou tard, un allèle disparaît.
\(N = 100\), \(X_0 = 30\) : on peut montrer que \(\mathbb{P}(\text{A est fixé}) = X_0/N = 0{,}3\).
Toutes nos chaînes s’écrivent sous la forme \[ X_{n+1} = \Phi\big(X_n, \xi_{n+1}\big), \qquad (\xi_n)_{n \ge 1} \text{ i.i.d., indépendantes de } X_0 . \]
Cette écriture garde un sens si \(E = \mathbb{R}\) ou \(\mathbb{R}^d\) : c’est la définition générale d’une chaîne de Markov, et c’est exactement l’algorithme de simulation.
Le cours \(S_k\) d’une action au jour \(k\) (modèle de Black-Scholes en temps discret, pas \(h = 1/250\) an, un jour de cotation) : \[ S_{k+1} = S_k + \mu\, S_k\, h + \sigma\, S_k \sqrt{h}\; Z_{k+1}, \qquad Z_k \text{ i.i.d. } \mathcal{N}(0,1), \] avec \(\mu\) la tendance et \(\sigma\) la volatilité. C’est une chaîne de Markov : \(S_{k+1} = \Phi(S_k, Z_{k+1})\).
Quantité d’intérêt : par exemple le prix d’une option d’achat, qui s’écrit comme une espérance, du type \(\mathbb{E}\big[(S_T - K)^+\big]\) : on l’estimera par Monte-Carlo.
Chaque jour, un tirage \(Z_{k+1}\) fait avancer la chaîne d’un pas.
Une trajectoire de la chaîne, puis \(300\) trajectoires indépendantes : \(S_T\) est aléatoire.
Plaque carrée, grille \(24 \times 24\) : bord du haut à \(100\) °C, les trois autres à \(0\) °C. Température d’équilibre \(u\) (version discrète de \(\Delta u = 0\)) : \[ u(x) = \frac14 \sum_{y \text{ voisin de } x} u(y) \quad \text{à l'intérieur}, \qquad u = T \text{ sur le bord}. \]
Soit \((X_n)\) la marche aléatoire simple sur la grille, partie de \(x\), et \(\tau\) le premier instant où elle touche le bord. Alors \[ u(x) = \mathbb{E}\big[T(X_\tau)\big]. \]
Quantité d’intérêt : \(u(x)\) en un point, sans résoudre le système linéaire.
La température au centre de la plaque : une affaire de marche aléatoire.
Chaque marche s’arrête au bord et y lit une température : \(u(x)\) est la moyenne de ces températures.
Un premier exemple : calcul de \(\pi\)
Personne ne « connaît » \(\pi\) : les ordinateurs en stockent une approximation, calculée par des méthodes numériques.
Mais comment ?
Tirons un point uniformément dans le carré rouge \([-1{,}5 \,;\, 1{,}5]^2\).
Il tombe dans le disque avec probabilité \[ p = \frac{\text{aire du disque}}{\text{aire du carré}} = \frac{\pi}{9}. \]
Avec \(N\) points : \(\;N_{\text{cercle}} \simeq \dfrac{N\pi}{9}\), \(\;\) c’est-à-dire \[ \pi \simeq 9\,\frac{N_{\text{cercle}}}{N} =: \pi_N. \]
\[|\pi_N - \pi| \;\sim\; \frac{1}{N} \;?\]
\[|\pi_N - \pi| \;\sim\; \frac{1}{N^2} \;?\]
\[|\pi_N - \pi| \;\sim\; \frac{1}{\ln N} \;?\]
Pour répondre : deux théorèmes fondamentaux.
Soit \((X_i)_{i \ge 1}\) une suite de variables aléatoires réelles i.i.d. telles que \(\mathbb{E}\big[|X_1|\big] < \infty\). Alors la moyenne des \(n\) premiers tirages \[ S_n = \frac{1}{n}\sum_{i=1}^{n} X_i \] converge presque sûrement vers \(\mathbb{E}[X_1]\) : \[ S_n \xrightarrow[n\to\infty]{\text{p.s.}} \mathbb{E}[X_1]. \]
Pour \(\pi\) : \(X_i = 9\,\mathbf{1}_{\{\text{le } i\text{-ème point est dans le disque}\}}\), \(\;\mathbb{E}[X_1] = 9\,p = \pi\) : oui, \(\pi_N \to \pi\).
Moyennes de lancers d’un dé équilibré : chaque suite finit par se coller à \(\mathbb{E}[X] = 3{,}5\).
On s’intéresse maintenant à l’erreur \(S_n - \mathbb{E}[X_1]\), lorsque \(\sigma^2 = \mathrm{Var}(X_1) < \infty\).
\[ S_n - \mathbb{E}[X_1] \xrightarrow[n\to\infty]{} 0 \]
\[ {\color{#d71920}{\sqrt{n}}}\,\big(S_n - \mathbb{E}[X_1]\big) \xrightarrow[n\to\infty]{\textbf{en loi}} \mathcal{N}\big(0, \sigma^2\big) \]
\[ E_n := {\color{#d71920}{\sqrt{n}}}\,\frac{S_n - \mathbb{E}[X_1]}{{\color{#d71920}{\sigma}}} \xrightarrow[n\to\infty]{\textbf{en loi}} \mathcal{N}(0,1) \]
(TCL) Si les \(X_i\) sont i.i.d. de variance \(\sigma^2 \in \,]0,\infty[\), alors pour tous \(a < b\), \[ \mathbb{P}\big(a \le E_n \le b\big) \xrightarrow[n\to\infty]{} \int_a^b \frac{e^{-z^2/2}}{\sqrt{2\pi}}\,dz. \]
Pour \(n\) grand, \(\quad S_n - \mathbb{E}[X_1] \;\approx\; \dfrac{\sigma}{\sqrt{n}}\,Z, \quad Z \sim \mathcal{N}(0,1)\), donc \[ \mathbb{P}\left(\big|S_n - \mathbb{E}[X_1]\big| \le 1{,}96\,\frac{\sigma}{\sqrt{n}}\right) \xrightarrow[n\to\infty]{} 0{,}95. \]
L’erreur de Monte-Carlo décroît en \(\dfrac{\sigma}{\sqrt{n}}\) : ni \(1/n\), ni \(1/n^2\), ni \(1/\ln n\).
Ici \(\sigma^2 = 81\,p(1-p)\) avec \(p = \pi/9\), soit \(\sigma \approx 4{,}29\).
En pratique \(\sigma\) est inconnu : on l’estime avec les mêmes tirages, \[ \hat\sigma_n^2 = \frac{1}{n-1}\sum_{i=1}^{n}\big(X_i - S_n\big)^2 . \]
Le TCL reste vrai en remplaçant \(\sigma\) par \(\hat\sigma_n\), d’où l’intervalle de confiance à 95 % : \[ \left[\, S_n - 1{,}96\,\frac{\hat\sigma_n}{\sqrt{n}} \;,\; S_n + 1{,}96\,\frac{\hat\sigma_n}{\sqrt{n}} \,\right]. \]
Monte-Carlo fournit une estimation et une mesure de sa précision : on peut certifier le résultat, au niveau de confiance choisi.
Soit \((U_i)_{i\ge1}\) i.i.d. uniformes sur \(D\), de densité \(\dfrac{1}{|D|}\mathbf{1}_D\).
Alors \[ \int_D H(x)\,dx = |D| \times \mathbb{E}\big[H(U_1)\big] \qquad\text{et, par la LGN,}\qquad \mathbb{E}\big[H(U_1)\big] \simeq \frac{1}{n}\sum_{i=1}^{n} H(U_i). \]
Si l’on sait tirer des points \(U_i\) uniformes et indépendants sur \(D\), \[ \frac{|D|}{n}\sum_{i=1}^{n} H(U_i) \xrightarrow[n\to\infty]{} \int_D H(x)\,dx, \] avec une erreur de l’ordre de \(|D|\,\sigma_H/\sqrt{n}\), où \(\sigma_H^2 = \mathrm{Var}\big(H(U_1)\big)\).
\(\int_{-1}^{1} \frac{dx}{1 + 100\,x^2} = \frac{\arctan 10}{5} \approx 0{,}2942\) : chaque tirage \(U_i\) apporte une contribution \(H(U_i)\).
\(\int_{-1}^{1} \frac{dx}{1 + 100\,x^2} = \frac{\arctan 10}{5} \approx 0{,}2942\) : chaque tirage \(U_i\) apporte une contribution \(H(U_i)\).
En dimension \(1\) ou \(2\) : les méthodes déterministes gagnent. Dès que \(d > 4\) : Monte-Carlo l’emporte, et l’écart se creuse avec \(d\).
\(\int_{[0,1]^d} e^{-(x_1 + \dots + x_d)}\,dx = (1 - e^{-1})^d\) : erreur relative en fonction du nombre d’évaluations.
Si l’on sait simuler \(X\), le simulateur fournit \(X_1, X_2, \dots\) i.i.d. de même loi que \(X\), et \[ \frac{1}{n}\sum_{i=1}^{n} X_i \simeq \mathbb{E}[X]. \]
En particulier, une probabilité est une espérance : \(\;\mathbb{P}(A) = \mathbb{E}\big[\mathbf{1}_A\big]\).
Tout ce que l’on sait simuler, on sait en estimer les moyennes et les probabilités, même sans aucune formule : files d’attente, modèles d’assurance, réactions en chaîne, jeux de hasard…
Avec \(n\) marches indépendantes partant de \(x\) : \[ \hat u_n(x) = \frac1n \sum_{i=1}^{n} T\big(X^{(i)}_{\tau_i}\big) = 100 \times \frac{\text{nombre de marches sorties par le haut}}{n}. \]
Chaque point s’estime séparément : utile si l’on ne veut \(u\) qu’en quelques points, ou si le domaine est compliqué, ou en grande dimension.
On se concentre sur un seul point \(x\), hors du centre, où \(u(x) \approx 38{,}1\) °C.
Chaque marche part de \(x\) et s’arrête au bord : \(\hat u_n(x)\) vaut \(100\) °C fois la proportion de marches sorties par le haut.
S’approche-t-on vraiment de \(\displaystyle\int_D H(x)\,dx\) ? Peut-on le certifier ? Oui : LGN et intervalles de confiance.
Que dire de l’erreur ? Avec quelle vitesse ? En \(\sigma/\sqrt{n}\) : TCL.
. . .
Idée : tirer plus souvent là où \(H\) est grande, par exemple selon \[ f_2(x) = 3\,e^{-6|x|}. \]

Soit \((X_i)\) i.i.d. de densité \(f_2\). La LGN donne \[ \frac{1}{n}\sum_{i=1}^{n} H(X_i) \xrightarrow[n\to\infty]{} \mathbb{E}\big[H(X_1)\big] = \int_{\mathbb{R}} H(x)\,f_2(x)\,dx \;\neq\; \int_{-1}^{1} H(x)\,dx \;!!! \]
Solution : réécrire l’intégrale comme une espérance sous \(f_2\) : \[ \int_D H(x)\,dx = \int_{\mathbb{R}} \frac{H(x)}{f_2(x)}\,\mathbf{1}_D(x)\,f_2(x)\,dx = \mathbb{E}\!\left[\frac{H(X_1)}{f_2(X_1)}\,\mathbf{1}_D(X_1)\right]. \]
Échantillonnage préférentiel : \(\displaystyle\frac{1}{n}\sum_{i=1}^{n}\frac{H(X_i)}{f_2(X_i)}\,\mathbf{1}_D(X_i) \longrightarrow \int_D H(x)\,dx\). Attention aux endroits où \(f_2\) est petite : les poids \(H/f_2\) y explosent.
Écart-type de l’estimateur, \(\sigma/\sqrt{n}\) (valeurs exactes) :
| Densité d’échantillonnage | \(f_1\) (uniforme) | \(f_2\) (préférentielle) |
|---|---|---|
| \(n = 10\) | \(0{,}151\) | \(0{,}025\) |
| \(n = 100\) | \(0{,}048\) | \(0{,}008\) |
| \(n = 1\,000\) | \(0{,}015\) | \(0{,}003\) |
\(\sigma_1 \approx 0{,}477\) et \(\sigma_2 \approx 0{,}080\) : la variance est divisée par \(36\). Avec \(f_2\), il faut \(36\) fois moins de tirages pour la même précision.
La variance de l’estimateur vaut \[ \mathrm{Var}\!\left(\frac{H(X)}{f(X)}\mathbf{1}_D(X)\right) = \int_D \frac{H(x)^2}{f(x)}\,dx - I^2, \qquad I = \int_D H(x)\,dx . \]
Même idée pour \(\pi\) : avec le carré ajusté \([-1,1]^2\) (\(\pi \simeq 4\,N_{\text{cercle}}/N\)), la variance est \(6{,}8\) fois plus petite qu’avec \([-1{,}5\,;1{,}5]^2\).
Un modèle microscopique très simple peut-il expliquer cette transition de phase ?
Deux particules, chacune portant un spin \(\sigma_i \in \{-1, +1\}\). L’espace d’états a \(|E| = 4\) éléments.
L’énergie du système : \(\;\mathcal{H}(\sigma) = -\,\sigma_1\,\sigma_2\). Des spins alignés ont une énergie plus basse.
Des particules sur une grille \(N \times N\) : \[ \sigma : \{1, \dots, N\}^2 \to \{-1, +1\}, \qquad |E| = 2^{N^2}. \]
Énergie : \[ \mathcal{H}(\sigma) = -\sum_{i \sim j} \sigma_i\,\sigma_j , \] où \(i \sim j\) signifie que \(i\) et \(j\) sont voisins sur la grille (distance \(1\)).

un site et ses \(4\) voisins
La physique statistique dit que le système est dans l’état \(\sigma\) avec probabilité \[ P_T(\sigma) = \frac{1}{Z_T}\exp\!\left(-\frac{\mathcal{H}(\sigma)}{T}\right), \qquad Z_T = \sum_{\sigma \in E}\exp\!\left(-\frac{\mathcal{H}(\sigma)}{T}\right), \] où \(T\) est la température.
L’aimantation \(\;M = \dfrac{1}{N^2}\displaystyle\sum_{i} \sigma_i \in [-1,1]\) mesure l’alignement.
Existe-t-il une température critique \(T_c\) telle que, pour \(N\) grand, \[ \mathbb{E}\,|M| > 0 \ \text{ si } T < T_c, \qquad \mathbb{E}\,|M| \to 0 \ \text{ si } T > T_c \;? \]
L’objectif : obtenir des tirages de \(P_T\), ici sur un réseau \(200 \times 200\) : deux tirages à chacune des trois températures.
\(2^4 = 16\) états et \(4\) paires de voisins : l’énergie vaut \(-4\), \(0\) ou \(+4\).
. . .
\[ Z_T = 2\,e^{4/T} + 12 + 2\,e^{-4/T} \approx 27{,}05 \quad (T = 2). \]
| \(\mathcal{H}(\sigma)\) | \(-4\) | \(0\) | \(+4\) |
|---|---|---|---|
| nombre d’états | \(2\) | \(12\) | \(2\) |
| \(P_T(\sigma)\) | \(0{,}273\) | \(0{,}037\) | \(0{,}005\) |
. . .
Encore faisable à la main… mais chaque particule ajoutée double le nombre d’états.

| grille | particules | nombre d’états | \(P_T\) de l’état le plus probable |
|---|---|---|---|
| \(1 \times 2\) | \(2\) | \(4\) | \(0{,}37\) |
| \(2 \times 2\) | \(4\) | \(16\) | \(0{,}27\) |
| \(4 \times 4\) | \(16\) | \(65\,536\) | \(0{,}08\) |
| \(6 \times 6\) | \(36\) | \(\approx 6{,}9 \cdot 10^{10}\) | \(0{,}02\) |
| \(10 \times 10\) | \(100\) | \(\approx 1{,}3 \cdot 10^{30}\) | \(1{,}1 \cdot 10^{-3}\) |
| \(20 \times 20\) | \(400\) | \(\approx 2{,}6 \cdot 10^{120}\) | \(2{,}5 \cdot 10^{-8}\) |
| \(1\) g de fer | \(\approx 10^{22}\) | \(2^{10^{22}}\) | \(< 10^{-10^{20}}\) |
À \(T = 2\). L’état le plus probable : tous les spins alignés.
Trop d’états pour les énumérer, et chacun a une probabilité quasi nulle, même le plus probable. On ne peut ni énumérer \(E\), ni même calculer \(Z_T\) : il faut une autre idée.
La simulation directe de \(P\) est hors de portée. L’algorithme de Metropolis-Hastings utilise une chaîne de Markov.
On veut simuler une variable aléatoire \(X\) de loi \(P(x) = \mathbb{P}(X = x)\) sur un ensemble fini \(E\).
rand()Seul le rapport \(P(y)/P(x)\) intervient : la constante de normalisation (\(Z_T\) pour Ising) disparaît !
Introduction aux méthodes de Monte-Carlo
Comment simuler ce système ?
Avec l’algorithme des lois à valeurs finies, il faut calculer \(P_T(\sigma)\) pour chaque état \(\sigma\). Essayons avec \(2\) particules, à \(T = 2\).
\[ Z_T = 2\,e^{1/T} + 2\,e^{-1/T} = 2\,e^{1/2} + 2\,e^{-1/2} \approx 4{,}51 . \]
On découpe \([0,1]\) en \(4\) intervalles de longueurs \(0{,}366\) ; \(0{,}134\) ; \(0{,}134\) ; \(0{,}366\), et on tire \(U\) : facile.