Le principe de Fermat : la lumière prend le chemin le plus rapide Grand Oral · mathématiques, physique-chimie, HLP Un support de connaissances pour construire sa propre question

← Tous les textes du Grand Oral

MathsPCHLP

Un crayon plongé dans un verre d'eau paraît cassé. Une route brûlante semble couverte d'une flaque qui recule quand on avance. Un signal lumineux parcourt des milliers de kilomètres dans un fil de verre plus fin qu'un cheveu. Ces trois phénomènes ont la même cause : la lumière change de direction quand elle passe d'un milieu à un autre. C'est la réfraction.

En 1662, Pierre de Fermat explique la loi de la réfraction par une idée étonnante : pour aller d'un point à un autre, la lumière suit le chemin qui lui prend le moins de temps. Avec les outils de terminale, cette idée devient un problème d'optimisation qu'on résout par la dérivée, exactement comme le problème d'un maître-nageur qui doit rejoindre au plus vite un nageur en difficulté.

Ce texte rassemble ces connaissances, avec les mathématiques de terminale : dérivation d'une fonction composée, sens de variation, théorème des valeurs intermédiaires, trigonométrie, dichotomie en Python. Il ne propose pas de Grand Oral tout fait : à chacun d'y choisir une direction et d'y construire sa question.

Sommaire
  1. Le problème du maître-nageur
  2. Le temps minimal par la dérivée
  3. Héron d'Alexandrie et la réflexion
  4. Fermat et la loi de la réfraction
  5. La querelle avec les cartésiens et l'expérience de Foucault
  6. Mirages et fibres optiques
  7. Elvis, le chien qui connaissait l'analyse ?
  8. Maupertuis et le principe de moindre action
  9. Des directions pour construire sa question
Le problème du maître-nageur La situation

Un maître-nageur se trouve sur la plage au point $A$, à $20$ mètres du bord de l'eau. Un nageur en difficulté se trouve au point $B$, dans la mer, à $30$ mètres du bord. Le long du rivage, les deux points sont décalés de $60$ mètres. Le maître-nageur court sur le sable à $5$ m/s et nage à $1$ m/s. Il va courir en ligne droite jusqu'à un point $I$ du rivage, puis nager en ligne droite jusqu'au nageur. Où doit-il entrer dans l'eau pour arriver le plus vite possible ?

La ligne droite de $A$ à $B$ est le chemin le plus court, mais pas forcément le plus rapide : comme il court cinq fois plus vite qu'il ne nage, il a intérêt à rester plus longtemps sur le sable. Mais s'il court jusqu'en face du nageur, il allonge beaucoup sa course. La bonne réponse est entre les deux.

Un exemple à la main

On note $x$ la distance, le long du rivage, entre le point du rivage le plus proche de $A$ et le point d'entrée $I$. Le théorème de Pythagore donne les deux longueurs :

$$AI = \sqrt{20^2 + x^2},$$ $$IB = \sqrt{30^2 + (60 - x)^2}.$$

Le temps de course est $\dfrac{AI}{5}$, le temps de nage est $\dfrac{IB}{1}$. Essayons quelques points d'entrée :

chemin$x$ (m)$AI$ (m)course (s)$IB$ (m)nage (s)total (s)
ligne droite$24$$31{,}24$$6{,}25$$46{,}86$$46{,}86$$53{,}11$
essai$50$$53{,}85$$10{,}77$$31{,}62$$31{,}62$$42{,}39$
essai$55$$58{,}52$$11{,}70$$30{,}41$$30{,}41$$42{,}12$
en face du nageur$60$$63{,}25$$12{,}65$$30$$30$$42{,}65$

La ligne droite (qui coupe le rivage en $x = 24$) est très mauvaise : plus de $53$ secondes, parce qu'elle fait nager près de $47$ mètres. Courir jusqu'en face du nageur donne $42{,}65$ s. Mais entrer dans l'eau un peu avant, vers $x = 55$, fait encore gagner une demi-seconde. Pour trouver le meilleur point, il faut étudier une fonction.

La figure ci-dessous permet de déplacer le point d'entrée et de changer la vitesse de course ; le chemin le plus rapide est tracé en pointillés.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; function nombre(x, d) { return x.toFixed(d).replace('.', ','); } board.create('polygon', [[-8, 0], [70, 0], [70, 31], [-8, 31]], {fillColor: '#f5e6b3', fillOpacity: 0.7, borders: {strokeWidth: 0}, vertices: {visible: false}, fixed: true, highlight: false}); board.create('polygon', [[-8, 0], [70, 0], [70, -34], [-8, -34]], {fillColor: '#b3d9f2', fillOpacity: 0.7, borders: {strokeWidth: 0}, vertices: {visible: false}, fixed: true, highlight: false}); board.create('segment', [[-8, 0], [70, 0]], {strokeColor: '#5d4037', strokeWidth: 2, fixed: true, highlight: false}); var A = board.create('point', [0, 20], {name: '', size: 3, color: '#e65100', fixed: true, highlight: false}); var B = board.create('point', [60, -30], {name: '', size: 3, color: '#c62828', fixed: true, highlight: false}); board.create('text', [-6.5, 23.5, 'A'], opt); board.create('text', [62, -27, 'B'], opt); var sx = board.create('slider', [[3, -39], [40, -39], [0, 30, 60]], {withLabel: false, snapWidth: 0.5}); var sv = board.create('slider', [[3, -45], [40, -45], [1, 5, 8]], {withLabel: false, snapWidth: 0.5}); board.create('text', [43, -39, function () { return 'x = ' + nombre(sx.Value(), 1) + ' m'; }], opt); board.create('text', [43, -45, function () { return 'course : ' + nombre(sv.Value(), 1) + ' m/s'; }], opt); function T(x, v) { return Math.sqrt(400 + x * x) / v + Math.sqrt(900 + (60 - x) * (60 - x)); } function Tp(x, v) { return x / (v * Math.sqrt(400 + x * x)) - (60 - x) / Math.sqrt(900 + (60 - x) * (60 - x)); } function xopt() { var v = sv.Value(), lo = 0, hi = 60, k, m; for (k = 0; k < 50; k++) { m = (lo + hi) / 2; if (Tp(m, v) < 0) { lo = m; } else { hi = m; } } return lo; } var I = board.create('point', [function () { return sx.Value(); }, 0], {name: '', size: 3, color: '#2e7d32', fixed: true, highlight: false}); var J = board.create('point', [function () { return xopt(); }, 0], {name: '', size: 2, color: '#1b5e20', fixed: true, highlight: false}); board.create('segment', [A, J], {strokeColor: '#1b5e20', strokeWidth: 2, dash: 2, fixed: true, highlight: false}); board.create('segment', [J, B], {strokeColor: '#1b5e20', strokeWidth: 2, dash: 2, fixed: true, highlight: false}); board.create('segment', [A, I], {strokeColor: '#e65100', strokeWidth: 3, fixed: true, highlight: false}); board.create('segment', [I, B], {strokeColor: '#1565c0', strokeWidth: 3, fixed: true, highlight: false}); board.create('text', [16, 28, function () { return 'temps : ' + nombre(T(sx.Value(), sv.Value()), 2) + ' s'; }], {fontSize: 13, useKatex: false, parse: false, fixed: true, highlight: false, color: '#b71c1c'}); board.create('text', [16, 24, function () { return 'minimum : ' + nombre(T(xopt(), sv.Value()), 2) + ' s, en x = ' + nombre(xopt(), 1); }], {fontSize: 12, useKatex: false, parse: false, fixed: true, highlight: false, color: '#1b5e20'}); board.create('text', [-6.5, -28, 'mer : 1 m/s'], opt); board.create('text', [57, 7, 'sable'], opt); Le sable est en jaune, la mer en bleu. Le premier curseur déplace le point d'entrée $I$ (son abscisse $x$ le long du rivage), le second règle la vitesse de course. En pointillés verts, le chemin le plus rapide. Avec une vitesse de course de $1$ m/s, égale à la vitesse de nage, le chemin le plus rapide redevient la ligne droite.
Le temps minimal par la dérivée La fonction temps

Plaçons-nous dans le cas général. Le maître-nageur est à la distance $a$ du rivage, le nageur à la distance $b$, le décalage le long du rivage est $d$, la vitesse sur le sable est $v_1$ et la vitesse dans l'eau est $v_2$. Pour un point d'entrée d'abscisse $x \in [0 ; d]$, le temps total est

$$T(x) = \frac{\sqrt{a^2 + x^2}}{v_1} + \frac{\sqrt{b^2 + (d - x)^2}}{v_2}.$$

Avec les valeurs de l'exemple, $a = 20$, $b = 30$, $d = 60$, $v_1 = 5$ et $v_2 = 1$.

Dériver une racine carrée

Le cours de terminale donne la dérivée d'une composée : si $u$ est dérivable et strictement positive, alors $\sqrt{u}$ est dérivable et

$$\left(\sqrt{u}\right)' = \frac{u'}{2\sqrt{u}}.$$

Pour $u(x) = a^2 + x^2$, on a $u'(x) = 2x$, donc

$$\begin{aligned} \left(\sqrt{a^2 + x^2}\right)' &= \frac{2x}{2\sqrt{a^2 + x^2}} \\ &= \frac{x}{\sqrt{a^2 + x^2}}. \end{aligned}$$

On note $p(x) = \dfrac{x}{\sqrt{a^2 + x^2}}$ cette dérivée.

Pour $w(x) = b^2 + (d - x)^2$, on a $w'(x) = 2(d - x) \times (-1) = -2(d - x)$, donc

$$\left(\sqrt{b^2 + (d - x)^2}\right)' = -q(x),$$

en notant

$$q(x) = \frac{d - x}{\sqrt{b^2 + (d - x)^2}}.$$

Finalement,

$$T'(x) = \frac{p(x)}{v_1} - \frac{q(x)}{v_2}.$$
Lire les sinus dans la dérivée

Ces deux quotients ont un sens géométrique. Traçons au point $I$ la droite perpendiculaire au rivage, qu'on appelle la normale. On note $i$ l'angle entre la course $[AI]$ et la normale, et $r$ l'angle entre la nage $[IB]$ et la normale. Dans le triangle rectangle formé par $A$, $I$ et le point du rivage le plus proche de $A$, le côté opposé à l'angle $i$ mesure $x$ et l'hypoténuse mesure $AI$, donc

$$\sin i = \frac{x}{\sqrt{a^2 + x^2}} = p(x).$$

De même, dans l'eau,

$$\sin r = q(x).$$

La dérivée s'écrit donc très simplement :

$$T'(x) = \frac{\sin i}{v_1} - \frac{\sin r}{v_2}.$$
Existence et unicité du minimum La fonction $T$ admet un unique minimum sur $[0 ; d]$, atteint au point où $\dfrac{\sin i}{v_1} = \dfrac{\sin r}{v_2}$

Étape 1 : $T'$ est strictement croissante. Posons $f = p$, c'est-à-dire $f(x) = \dfrac{x}{\sqrt{a^2 + x^2}}$. En dérivant le quotient,

$$f'(x) = \frac{\sqrt{a^2 + x^2} - x \times \dfrac{x}{\sqrt{a^2 + x^2}}}{a^2 + x^2}.$$

On multiplie le numérateur et le dénominateur par $\sqrt{a^2 + x^2}$ :

$$\begin{aligned} f'(x) &= \frac{a^2 + x^2 - x^2}{\left(a^2 + x^2\right)\sqrt{a^2 + x^2}} \\ &= \frac{a^2}{\left(a^2 + x^2\right)\sqrt{a^2 + x^2}}. \end{aligned}$$

C'est un nombre strictement positif, donc $f$ est strictement croissante : quand le point d'entrée avance, l'angle $i$ s'ouvre. Le même calcul montre que $q$ est strictement décroissante : l'angle $r$ se referme. Comme $T'(x) = \dfrac{p(x)}{v_1} - \dfrac{q(x)}{v_2}$, on soustrait une fonction décroissante à une fonction croissante : $T'$ est strictement croissante sur $[0 ; d]$.

Étape 2 : $T'$ change de signe. En $x = 0$, le premier terme est nul, donc

$$T'(0) = -\frac{d}{v_2\sqrt{b^2 + d^2}} < 0.$$

En $x = d$, le second terme est nul, donc

$$T'(d) = \frac{d}{v_1\sqrt{a^2 + d^2}} > 0.$$

Étape 3 : le théorème des valeurs intermédiaires. La fonction $T'$ est continue et strictement croissante sur $[0 ; d]$, et $0$ est compris entre $T'(0)$ et $T'(d)$. D'après le théorème des valeurs intermédiaires (cas d'une fonction strictement monotone), il existe un unique réel $x_0$ de $]0 ; d[$ tel que $T'(x_0) = 0$.

Étape 4 : le tableau de variations. Comme $T'$ est croissante, $T'(x) < 0$ pour $x < x_0$ et $T'(x) > 0$ pour $x > x_0$ : la fonction $T$ décroît puis croît, donc elle atteint son minimum en $x_0$, et seulement là.

Conclusion. Au point d'entrée optimal, $T'(x_0) = 0$, c'est-à-dire

$$\frac{\sin i}{v_1} = \frac{\sin r}{v_2}.$$

On remarque aussi qu'en dehors de $[0 ; d]$, le chemin serait encore plus long sur le sable et dans l'eau : le minimum sur $[0 ; d]$ est bien le meilleur choix possible. Avec les valeurs de l'exemple, on trouve $x_0 \approx 54{,}27$ m et un temps minimal d'environ $42{,}11$ s. Les angles valent alors $i \approx 69{,}8°$ et $r \approx 10{,}8°$ : le maître-nageur court en biais, puis nage presque droit vers la côte d'en face.

La figure suivante trace la fonction $T$ de l'exemple. Le point mobile montre la tangente : elle descend tant que le point d'entrée est avant $x_0$ (on gagne du temps en avançant encore), et elle monte après.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var petit = {fontSize: 11, useKatex: false, parse: false, fixed: true, highlight: false}; var ax = {strokeColor: '#455a64', strokeWidth: 1, fixed: true, highlight: false, lastArrow: true}; function nombre(x, d) { return x.toFixed(d).replace('.', ','); } board.create('segment', [[0, 40], [65, 40]], ax); board.create('segment', [[0, 40], [0, 75]], ax); for (var t = 10; t <= 60; t += 10) { board.create('segment', [[t, 40], [t, 39.3]], {strokeColor: '#455a64', fixed: true, highlight: false}); board.create('text', [t - 2, 37.8, String(t)], petit); } for (var u = 45; u <= 70; u += 5) { board.create('segment', [[0, u], [-0.8, u]], {strokeColor: '#455a64', fixed: true, highlight: false}); board.create('text', [-7.5, u, String(u)], petit); } board.create('text', [60, 35.5, 'x (m)'], petit); function T(x) { return Math.sqrt(400 + x * x) / 5 + Math.sqrt(900 + (60 - x) * (60 - x)); } function Tp(x) { return x / (5 * Math.sqrt(400 + x * x)) - (60 - x) / Math.sqrt(900 + (60 - x) * (60 - x)); } board.create('functiongraph', [T, 0, 60], {strokeColor: '#c62828', strokeWidth: 2, highlight: false}); board.create('point', [54.268, T(54.268)], {name: '', size: 2, color: '#1b5e20', fixed: true, highlight: false}); var sx = board.create('slider', [[3, 31], [38, 31], [2, 20, 60]], {withLabel: false, snapWidth: 0.5}); board.create('text', [41, 31, function () { return 'x = ' + nombre(sx.Value(), 1); }], opt); var M = board.create('point', [function () { return sx.Value(); }, function () { return T(sx.Value()); }], {name: '', size: 3, color: '#1565c0', fixed: true, highlight: false}); function g1() { return Math.max(0.5, sx.Value() - 6); } function g2() { return Math.min(64, sx.Value() + 6); } board.create('segment', [[g1, function () { return T(sx.Value()) + (g1() - sx.Value()) * Tp(sx.Value()); }], [g2, function () { return T(sx.Value()) + (g2() - sx.Value()) * Tp(sx.Value()); }]], {strokeColor: '#1565c0', strokeWidth: 2, highlight: false, fixed: true}); board.create('text', [16, 75, function () { return 'T(x) = ' + nombre(T(sx.Value()), 2) + ' s'; }], {fontSize: 12, useKatex: false, parse: false, fixed: true, highlight: false, color: '#c62828'}); board.create('text', [16, 71, function () { var p = Tp(sx.Value()); return "T'(x) = " + nombre(p, 3) + (p < -0.0005 ? ' : avancer encore' : (p > 0.0005 ? ' : trop loin' : ' : minimum')); }], {fontSize: 12, useKatex: false, parse: false, fixed: true, highlight: false, color: '#1565c0'}); La courbe de la fonction $T$ pour $a = 20$, $b = 30$, $d = 60$, $v_1 = 5$ et $v_2 = 1$ (l'axe vertical commence à $40$ secondes). Le point vert marque le minimum, en $x_0 \approx 54{,}27$. Le curseur déplace le point bleu et sa tangente, dont le coefficient directeur est $T'(x)$.
Trouver $x_0$ par dichotomie

L'équation $T'(x) = 0$ ne se résout pas à la main dans le cas général. Mais on sait que $T'$ est strictement croissante, négative en $0$ et positive en $d$ : c'est exactement la situation où la dichotomie fonctionne. On coupe l'intervalle en deux, on regarde le signe de $T'$ au milieu, et l'on garde la moitié où $T'$ change de signe. Après $n$ étapes, l'intervalle a pour longueur $\dfrac{d}{2^n}$.

from math import sqrt a, b, d = 20, 30, 60 # distances en mètres v1, v2 = 5, 1 # vitesses en m/s def T(x): return sqrt(a**2 + x**2) / v1 + sqrt(b**2 + (d - x)**2) / v2 def Tprime(x): return x / (v1 * sqrt(a**2 + x**2)) - (d - x) / (v2 * sqrt(b**2 + (d - x)**2)) gauche, droite = 0, d while droite - gauche > 0.001: milieu = (gauche + droite) / 2 if Tprime(milieu) < 0: # T décroît encore : le minimum est à droite gauche = milieu else: droite = milieu x0 = (gauche + droite) / 2 sin_i = x0 / sqrt(a**2 + x0**2) sin_r = (d - x0) / sqrt(b**2 + (d - x0)**2) print("point d'entrée :", round(x0, 3), "m") print("temps minimal :", round(T(x0), 3), "s") print("sin i / v1 =", round(sin_i / v1, 5), " sin r / v2 =", round(sin_r / v2, 5))

Le programme vérifie au passage la relation $\dfrac{\sin i}{v_1} = \dfrac{\sin r}{v_2}$ : les deux quotients affichés sont égaux.

Héron d'Alexandrie et la réflexion

L'idée d'un chemin « le meilleur » est ancienne. Au Ier siècle de notre ère, Héron d'Alexandrie étudie la réflexion de la lumière sur un miroir plan. On savait depuis longtemps que l'angle d'incidence est égal à l'angle de réflexion. Héron en donne une raison : parmi tous les chemins qui vont d'un point $A$ à un point $B$ en touchant le miroir, la lumière suit le plus court. Dans un même milieu, la vitesse ne change pas : le plus court est aussi le plus rapide.

Le chemin le plus court de $A$ à $B$ en touchant le miroir fait des angles égaux avec le miroir

Étape 1. Soit $B'$ le symétrique de $B$ par rapport à la droite du miroir. Pour tout point $I$ du miroir, la symétrie conserve les longueurs, donc $IB = IB'$, et

$$AI + IB = AI + IB'.$$

Étape 2. Par l'inégalité triangulaire, $AI + IB' \geqslant AB'$, avec égalité seulement si $I$ est sur le segment $[AB']$. Le chemin le plus court passe donc par le point $I_0$ où $[AB']$ coupe le miroir.

Étape 3. En $I_0$, l'angle entre $[I_0B]$ et le miroir est égal (par symétrie) à l'angle entre $[I_0B']$ et le miroir, lui-même égal (angles opposés par le sommet) à l'angle entre $[AI_0]$ et le miroir. Les deux angles sont égaux.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; board.create('polygon', [[-1.5, 0], [8.5, 0], [8.5, -0.25], [-1.5, -0.25]], {fillColor: '#90a4ae', fillOpacity: 0.8, borders: {strokeWidth: 0}, vertices: {visible: false}, fixed: true, highlight: false}); var A = board.create('point', [0, 3], {name: '', size: 3, color: '#e65100', fixed: true, highlight: false}); var B = board.create('point', [6, 2], {name: '', size: 3, color: '#c62828', fixed: true, highlight: false}); var Bp = board.create('point', [6, -2], {name: '', size: 3, color: '#9e9e9e', fixed: true, highlight: false}); var I0 = board.create('point', [3.6, 0], {name: '', size: 3, color: '#1b5e20', fixed: true, highlight: false}); var I1 = board.create('point', [1.5, 0], {name: '', size: 2, color: '#757575', fixed: true, highlight: false}); board.create('segment', [A, I1], {strokeColor: '#9e9e9e', strokeWidth: 1, dash: 2, fixed: true, highlight: false}); board.create('segment', [I1, B], {strokeColor: '#9e9e9e', strokeWidth: 1, dash: 2, fixed: true, highlight: false}); board.create('segment', [A, I0], {strokeColor: '#e65100', strokeWidth: 3, fixed: true, highlight: false}); board.create('segment', [I0, B], {strokeColor: '#e65100', strokeWidth: 3, fixed: true, highlight: false}); board.create('segment', [I0, Bp], {strokeColor: '#9e9e9e', strokeWidth: 2, dash: 3, fixed: true, highlight: false}); board.create('segment', [B, Bp], {strokeColor: '#bdbdbd', strokeWidth: 1, dash: 1, fixed: true, highlight: false}); board.create('text', [-0.9, 3.3, 'A'], opt); board.create('text', [6.3, 2.2, 'B'], opt); board.create('text', [6.3, -2.2, "B'"], opt); board.create('text', [3.4, -0.75, 'I0'], opt); board.create('text', [-1.2, -1.2, 'miroir'], opt); Le chemin le plus court de $A$ à $B$ en touchant le miroir (en orange) passe par le point $I_0$ aligné avec $A$ et le symétrique $B'$ de $B$. Un autre chemin (en gris pointillé) est plus long.

Cet argument ne dit rien de la réfraction : quand la lumière passe de l'air à l'eau, le chemin réel n'est pas le plus court, puisqu'il est brisé. Il faudra attendre seize siècles pour comprendre que c'est le temps, et non la longueur, qui est le plus petit.

Fermat et la loi de la réfraction La loi des sinus

Vers 1621, le Hollandais Willebrord Snell trouve par l'expérience la loi de la réfraction, sans la publier. En 1637, René Descartes la publie dans La Dioptrique, un des appendices du Discours de la méthode : quand un rayon passe d'un milieu 1 à un milieu 2, l'angle d'incidence $i$ et l'angle de réfraction $r$, mesurés par rapport à la normale, vérifient

$$n_1 \sin i = n_2 \sin r,$$

où $n_1$ et $n_2$ sont des nombres qui ne dépendent que des milieux. Aujourd'hui, on les appelle les indices de réfraction, et l'on sait que $n = \dfrac{c}{v}$, où $c$ est la vitesse de la lumière dans le vide et $v$ sa vitesse dans le milieu : environ $1$ pour l'air, $1{,}33$ pour l'eau, $1{,}5$ pour le verre.

Le calcul de Fermat

Pierre de Fermat (né au début du XVIIe siècle, probablement en 1607, mort en 1665), conseiller au parlement de Toulouse, fait des mathématiques pendant son temps libre. Il a inventé vers 1636 une méthode pour trouver les maximums et les minimums, qui annonce la dérivée. En 1662, dans une lettre au médecin Marin Cureau de La Chambre, il l'applique à la lumière, en supposant qu'elle va moins vite dans les milieux plus denses, et qu'elle suit le chemin le plus rapide.

C'est exactement le problème du maître-nageur : le sable est l'air, la mer est l'eau, et le point d'entrée est le point où le rayon traverse la surface. La démonstration de la section précédente donne, pour le chemin le plus rapide,

$$\frac{\sin i}{v_1} = \frac{\sin r}{v_2}.$$

En multipliant par $c$ et en écrivant $\dfrac{c}{v_1} = n_1$ et $\dfrac{c}{v_2} = n_2$, on obtient exactement

$$n_1 \sin i = n_2 \sin r.$$

Fermat est lui-même surpris : il s'attendait à trouver une loi différente de celle de Descartes, et son calcul redonne la même. Le principe de Fermat s'énonce ainsi : la lumière se propage d'un point à un autre en suivant un chemin dont la durée de parcours est minimale.

Une précision des physiciens modernes : dans certaines situations, par exemple avec un miroir concave, le chemin réellement suivi n'est pas le plus rapide mais un chemin où la durée est stationnaire, c'est-à-dire où la dérivée s'annule. Dans les situations simples de ce texte, il s'agit bien d'un minimum.

Voir la réfraction

La figure ci-dessous applique la loi $n_1 \sin i = n_2 \sin r$. Quand la lumière passe d'un milieu à un milieu moins réfringent (de l'eau vers l'air, par exemple), il peut arriver que $\dfrac{n_1}{n_2}\sin i > 1$ : aucun angle $r$ ne convient, car un sinus ne dépasse jamais $1$. La lumière ne sort plus : elle est entièrement réfléchie. C'est la réflexion totale, qui commence à l'angle limite $\sin i_\ell = \dfrac{n_2}{n_1}$.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; function nombre(x, d) { return x.toFixed(d).replace('.', ','); } board.create('polygon', [[-5, 0], [5, 0], [5, -4.3], [-5, -4.3]], {fillColor: '#b3d9f2', fillOpacity: 0.6, borders: {strokeWidth: 0}, vertices: {visible: false}, fixed: true, highlight: false}); board.create('segment', [[-5, 0], [5, 0]], {strokeColor: '#455a64', strokeWidth: 2, fixed: true, highlight: false}); board.create('segment', [[0, 4.3], [0, -4.3]], {strokeColor: '#9e9e9e', strokeWidth: 1, dash: 2, fixed: true, highlight: false}); var si = board.create('slider', [[-4.3, -5], [1.5, -5], [0, 40, 89]], {withLabel: false, snapWidth: 1}); var s1 = board.create('slider', [[-4.3, -5.8], [1.5, -5.8], [1, 1, 2]], {withLabel: false, snapWidth: 0.01}); var s2 = board.create('slider', [[-4.3, -6.6], [1.5, -6.6], [1, 1.33, 2]], {withLabel: false, snapWidth: 0.01}); board.create('text', [2, -5, function () { return 'i = ' + Math.round(si.Value()) + '°'; }], opt); board.create('text', [2, -5.8, function () { return 'n1 = ' + nombre(s1.Value(), 2); }], opt); board.create('text', [2, -6.6, function () { return 'n2 = ' + nombre(s2.Value(), 2); }], opt); function rad() { return si.Value() * Math.PI / 180; } function q() { return s1.Value() * Math.sin(rad()) / s2.Value(); } board.create('arrow', [[function () { return -4 * Math.sin(rad()); }, function () { return 4 * Math.cos(rad()); }], [0, 0]], {strokeColor: '#e65100', strokeWidth: 3, fixed: true, highlight: false}); board.create('arrow', [[0, 0], [function () { return 4 * Math.sin(rad()); }, function () { return 4 * Math.cos(rad()); }]], {strokeColor: '#e65100', strokeWidth: function () { return q() > 1 ? 3 : 1; }, strokeOpacity: function () { return q() > 1 ? 1 : 0.35; }, fixed: true, highlight: false}); board.create('arrow', [[0, 0], [function () { return 4 * Math.min(q(), 1); }, function () { return -4 * Math.sqrt(1 - Math.min(q(), 1) * Math.min(q(), 1)); }]], {strokeColor: '#1565c0', strokeWidth: 3, fixed: true, highlight: false, visible: function () { return q() <= 1; }}); board.create('text', [-4.8, 4.7, function () { return 'milieu 1 (n1 = ' + nombre(s1.Value(), 2) + ')'; }], opt); board.create('text', [-4.8, -0.5, function () { return 'milieu 2 (n2 = ' + nombre(s2.Value(), 2) + ')'; }], opt); board.create('text', [-4.8, -1.5, function () { return q() <= 1 ? 'r = ' + nombre(Math.asin(q()) * 180 / Math.PI, 1) + '°' : 'réflexion totale'; }], {fontSize: 13, useKatex: false, parse: false, fixed: true, highlight: false, color: '#1565c0'}); board.create('text', [-4.8, -2.4, function () { return s1.Value() > s2.Value() ? 'angle limite : ' + nombre(Math.asin(s2.Value() / s1.Value()) * 180 / Math.PI, 1) + '°' : 'pas d\'angle limite'; }], opt); Le rayon incident (orange épais) arrive au point de la surface, la normale est en pointillés. Le rayon réfracté est en bleu, le rayon réfléchi en orange pâle. Avec $n_1 = 1$ et $n_2 = 1{,}33$ (de l'air vers l'eau), le rayon se rapproche de la normale. En échangeant les valeurs (de l'eau vers l'air, $n_1 = 1{,}33$ et $n_2 = 1$), une réflexion totale apparaît au-delà d'environ $48{,}8°$. Portrait gravé de Pierre de Fermat, en col blanc et longs cheveux bouclés. Pierre de Fermat (vers 1607-1665). Auteur inconnu, domaine public, Wikimedia Commons.
La querelle avec les cartésiens et l'expérience de Foucault Deux explications pour une même loi

Descartes et Fermat obtiennent la même loi des sinus, mais avec des hypothèses opposées. Pour justifier sa loi, Descartes compare la lumière à une balle qui traverse une surface ; son raisonnement suppose que la lumière passe plus facilement, donc plus vite, dans un milieu dense comme l'eau ou le verre. Fermat suppose au contraire qu'elle y va moins vite. Le calcul de la section précédente montre pourquoi les deux peuvent tomber sur la même formule : dans $\dfrac{\sin i}{v_1} = \dfrac{\sin r}{v_2}$, seul le rapport des vitesses compte, et la loi ne dit pas, à elle seule, dans quel milieu la lumière est la plus rapide.

Les partisans de Descartes (Descartes est mort en 1650), notamment Claude Clerselier, répondent à Fermat. Leur objection est philosophique autant que physique : un principe qui dit que la nature « choisit » le chemin le plus rapide suppose qu'elle poursuit un but, comme si la lumière savait d'avance où elle allait. Pour un cartésien, la physique doit expliquer les phénomènes par des causes mécaniques (des chocs, des contacts), pas par des buts. On appelle finalisme l'explication par un but, et la question revient souvent en philosophie des sciences.

Foucault tranche, en 1850

Pendant près de deux siècles, personne ne peut mesurer la vitesse de la lumière dans l'eau : elle est bien trop grande. En 1850, le physicien Léon Foucault (celui du pendule du Panthéon) y parvient avec un miroir tournant très vite : la lumière fait un aller-retour, et pendant ce temps le miroir a légèrement tourné, ce qui décale le rayon de retour. En plaçant un tube d'eau sur le trajet, il observe un décalage plus grand : la lumière est plus lente dans l'eau que dans l'air. Hippolyte Fizeau et Louis Breguet arrivent à la même conclusion la même année.

Fermat avait donc raison sur ce point, et l'explication mécanique de Descartes était fausse. L'expérience confirme aussi la théorie ondulatoire de la lumière défendue par Huygens puis Fresnel, qui prévoyait cette vitesse plus faible.

Mirages et fibres optiques Le mirage sur une route chaude

Par une journée chaude, le goudron chauffe l'air juste au-dessus de lui. L'air chaud est moins dense, son indice est un peu plus faible, et la lumière y va un peu plus vite. Un rayon venu du ciel qui descend vers la route a donc intérêt, pour gagner du temps, à faire un détour par la couche d'air chaud près du sol, où il va plus vite : comme le maître-nageur qui reste sur le sable, il suit une courbe qui plonge vers la route puis remonte vers l'œil. L'œil, qui croit que la lumière va en ligne droite, voit un morceau de ciel « posé » sur la route : c'est la flaque du mirage.

Une route droite dans le désert ; au loin, le bitume semble couvert d'une nappe d'eau qui reflète le ciel et les voitures. Un mirage sur une route chaude : la « flaque » est une image du ciel. Photo : Brocken Inaglory, CC BY-SA 3.0, Wikimedia Commons.
Les fibres optiques

Une fibre optique est un fil de verre très pur : un cœur entouré d'une gaine d'indice un peu plus faible. Un rayon lancé dans le cœur arrive sur la gaine avec un angle d'incidence très grand. D'après la section sur la réfraction, si cet angle dépasse l'angle limite $i_\ell$ défini par $\sin i_\ell = \dfrac{n_2}{n_1}$, le rayon est entièrement réfléchi, et il rebondit ainsi tout le long de la fibre, même si elle est courbée.

Par exemple, pour un cœur d'indice $1{,}48$ et une gaine d'indice $1{,}46$ (des ordres de grandeur courants), $\sin i_\ell = \dfrac{1{,}46}{1{,}48} \approx 0{,}986$, donc $i_\ell \approx 80{,}6°$ : les rayons presque parallèles à l'axe de la fibre restent piégés. Entre le verre $(n \approx 1{,}5)$ et l'air, l'angle limite est d'environ $41{,}8°$. C'est par des fibres optiques que passent la plupart des communications internet entre continents, dans des câbles posés au fond des océans.

Un faisceau de fibres optiques fines dont les extrémités brillent de points lumineux. Un faisceau de fibres optiques : la lumière ressort au bout de chaque fibre. Photo : BigRiz, CC BY-SA 3.0, Wikimedia Commons.
Elvis, le chien qui connaissait l'analyse ?

En 2003, Timothy Pennings, professeur de mathématiques au Hope College (Michigan), publie dans la revue The College Mathematics Journal un article intitulé « Do Dogs Know Calculus? » (« Les chiens connaissent-ils l'analyse ? »). Son chien Elvis, un corgi, va chercher une balle lancée dans le lac Michigan. Pennings remarque qu'Elvis ne se jette pas tout de suite à l'eau : il court d'abord le long de la plage, puis plonge et nage vers la balle. C'est le problème du maître-nageur.

Le modèle

Le chien part d'un point du rivage. La balle est dans l'eau, à la distance $x$ du rivage, et le point du rivage le plus proche de la balle est à la distance $z$ du chien. Le chien court à la vitesse $r$ jusqu'à un point du rivage situé à la distance $y$ du pied de la balle, puis nage à la vitesse $s$. Le temps total est

$$T(y) = \frac{z - y}{r} + \frac{\sqrt{x^2 + y^2}}{s}.$$

Avec la dérivée de la racine carrée,

$$T'(y) = -\frac{1}{r} + \frac{y}{s\sqrt{x^2 + y^2}}.$$

On résout $T'(y) = 0$ :

$$\frac{y}{\sqrt{x^2 + y^2}} = \frac{s}{r}.$$

On élève au carré (les deux membres sont positifs), on multiplie par $x^2 + y^2$ et l'on isole $y^2$ :

$$y^2\left(r^2 - s^2\right) = s^2 x^2.$$

Donc, puisque $r > s$,

$$y = \frac{s\,x}{\sqrt{r^2 - s^2}} = \frac{x}{\sqrt{\left(\frac{r}{s}\right)^2 - 1}}.$$

Résultat remarquable : le point où il faut plonger ne dépend pas de la distance $z$ (pourvu qu'elle soit assez grande), et il est proportionnel à la distance $x$ de la balle au rivage.

Les mesures

Selon l'article, Pennings a mesuré les vitesses de son chien : environ $6{,}4$ m/s à la course et $0{,}9$ m/s à la nage. Le rapport $\dfrac{r}{s}$ vaut environ $7$, et la formule donne $y \approx 0{,}144\,x$ : pour une balle à $10$ mètres du rivage, il faudrait plonger environ $1{,}4$ m avant le pied de la balle. Sur plusieurs dizaines de lancers, les points de plongée d'Elvis se sont révélés très proches de cette droite.

Elvis ne connaît évidemment pas la dérivée. En 2006, deux psychologues, Pierre Perruchet et Jorge Gallego, ont proposé dans la même revue une explication plus simple : le chien suivrait une règle locale, du type « je cours tant que je me rapproche plus vite de la balle en courant qu'en nageant », qui mène au même point. C'est une belle question pour un Grand Oral : une stratégie optimale peut être le résultat d'une règle simple, sélectionnée par l'expérience, sans aucun calcul.

Maupertuis et le principe de moindre action

Au XVIIIe siècle, l'idée de Fermat est généralisée. En 1744, Pierre-Louis Moreau de Maupertuis présente à l'Académie des sciences un mémoire où il affirme que dans tout changement, la nature dépense le moins possible d'une grandeur qu'il appelle l'action. Il y voit une preuve de la sagesse du Créateur. La même année, Leonhard Euler formule un principe voisin, avec plus de rigueur, pour le mouvement des corps.

Le principe déclenche une querelle célèbre : en 1751, le mathématicien Samuel König affirme que Leibniz l'avait énoncé avant Maupertuis, en citant une lettre dont l'original n'a jamais été retrouvé. Maupertuis, alors président de l'Académie de Berlin, fait condamner König. Voltaire prend le parti de König et ridiculise Maupertuis dans un pamphlet, la Diatribe du docteur Akakia (1752).

Au-delà de la querelle, le principe de moindre action est devenu l'un des fondements de la physique : Lagrange puis Hamilton reformulent toute la mécanique de Newton sous cette forme, et il est encore au cœur de la physique moderne, de la relativité à la mécanique quantique. La question philosophique de Clerselier reste ouverte d'une autre façon : les physiciens d'aujourd'hui y voient une propriété mathématique des équations, pas l'intention d'une nature qui « choisirait ».

Les limites du modèle Des directions pour construire sa question

Ce texte n'est pas un Grand Oral. Il rassemble des connaissances dans lesquelles chacun peut choisir une direction, la creuser et formuler sa propre question. Quelques directions possibles :

Pour l'échange avec le jury : les notions du cours à maîtriser

Le jury peut interroger sur les chapitres de spécialité mobilisés. Avec ce thème, il est utile de connaître parfaitement : la dérivée de $\sqrt{u}$ et des fonctions composées ; la dérivée d'un quotient ; le lien entre signe de la dérivée et sens de variation ; les extremums et le tableau de variations ; la continuité et le théorème des valeurs intermédiaires (cas strictement monotone) ; le sinus dans un triangle rectangle ; l'algorithme de dichotomie en Python.

Pour réviser ces chapitres, l'application Maths FlashBac reprend tout le cours de spécialité en cartes.

Pour aller plus loin