Kepler et les tonneaux de vin Grand Oral · mathématiques, HGGSP, physique-chimie Un support de connaissances pour construire sa propre question

← Tous les textes du Grand Oral

MathsHGGSPPC

À l'automne 1613, l'astronome Johannes Kepler se remarie à Linz, en Autriche. Pour la noce, il achète du vin. Le marchand mesure le contenu de chaque tonneau d'un seul geste : il plonge une baguette graduée par le trou de remplissage, en biais, jusqu'au bord opposé du fond, et lit le prix sur la baguette. Kepler s'étonne qu'une seule longueur suffise, quelle que soit la forme du tonneau. Il en tire un livre, la Nouvelle stéréométrie des tonneaux de vin, publié en 1615.

Ce livre est une étape de l'histoire du calcul intégral et du calcul différentiel : Kepler y calcule des volumes en découpant les solides en tranches infiniment fines, et il y cherche le tonneau qui contient le plus de vin pour une baguette donnée. Ces deux questions se traitent aujourd'hui avec les mathématiques de terminale : intégrales, dérivées, étude de fonction. Ce texte rassemble des connaissances ; à chacun d'y choisir une direction et d'y construire sa question.

Sommaire
  1. Un mariage à Linz
  2. Jauger un tonneau avec une baguette
  3. Le volume d'un tonneau par une intégrale
  4. Le meilleur tonneau pour une baguette donnée
  5. Kepler et les tranches infiniment fines
  6. Près du maximum, presque rien ne bouge
  7. Le jaugeage aujourd'hui
  8. Des directions pour construire sa question
Un mariage à Linz Gravure : portrait en buste d'un homme barbu aux cheveux courts, avec une large collerette de dentelle. Johannes Kepler (1571-1630), gravure d'après un portrait. Image : Wikimedia Commons, domaine public.

Kepler est né en 1571 à Weil der Stadt, dans le sud-ouest de l'Allemagne actuelle. Après des études de théologie à Tübingen, où il découvre le système de Copernic, il enseigne les mathématiques à Graz, puis rejoint à Prague l'astronome danois Tycho Brahe, qui possède les meilleures observations des planètes de son temps. À la mort de Tycho, en 1601, Kepler devient le mathématicien de l'empereur Rodolphe II. C'est à Prague qu'il publie en 1609 ses deux premières lois : les planètes décrivent des ellipses dont le Soleil occupe un foyer, et leur rayon balaie des aires égales en des temps égaux.

L'année 1611 est terrible : sa femme Barbara et son fils meurent, l'empereur est renversé. Kepler s'installe en 1612 à Linz, comme mathématicien de la province de Haute-Autriche. Il s'y remarie le 30 octobre 1613 avec Susanna Reuttinger. Dans une lettre, il raconte avec un sérieux presque mathématique comment il a examiné une dizaine de candidates avant de choisir. C'est pour ce mariage qu'il achète le vin.

Les années suivantes ne sont pas plus calmes. De 1615 à 1621, sa mère, Katharina, est accusée de sorcellerie dans son village du Wurtemberg ; Kepler assure lui-même sa défense et obtient sa libération après plus d'un an de prison. La guerre de Trente Ans commence en 1618 et Kepler, protestant dans un pays catholique, doit plusieurs fois déménager. Il publie sa troisième loi en 1619, les Tables rudolphines en 1627, et meurt à Ratisbonne en 1630. Les tonneaux occupent une petite place dans cette vie, mais ils montrent un savant qui cherche des mathématiques partout, jusque dans une cave.

Jauger un tonneau avec une baguette Le métier de jaugeur

Le vin se vendait et se taxait au volume. Mesurer le contenu d'un tonneau, sans le vider, était le métier du jaugeur, souvent un officier assermenté de la ville. En France, sa baguette s'appelait la velte, et le mot désignait aussi une unité de capacité, de l'ordre de $7{,}5$ litres selon les régions. La gravure ci-dessous montre un jaugeur néerlandais avec sa baguette.

Gravure sur bois : un homme barbu tient horizontalement une longue baguette graduée au-dessus d'un tonneau couché cerclé de bois ; en haut à droite, l'inscription « den Wynroeyer ». « Den wynroeyer », le jaugeur de vin, gravure néerlandaise du XVIIe siècle. Image : Wikimedia Commons, domaine public.

Le geste observé par Kepler est le suivant. Le tonneau est couché. On plonge la baguette par la bonde, le trou situé au milieu du tonneau, sur le dessus, et on la pousse en biais jusqu'au point le plus bas d'un des deux fonds. On lit une seule longueur, $d$, et le prix se lit directement sur la graduation.

Pourquoi une seule longueur peut suffire

Modélisons d'abord le tonneau par un cylindre de longueur $h$ et de diamètre $D$. La bonde est au milieu, sur le dessus. La baguette va de la bonde au bas d'un fond : elle parcourt $\dfrac{h}{2}$ horizontalement et $D$ verticalement. Par le théorème de Pythagore,

$$d^2 = \frac{h^2}{4} + D^2.$$

À la main. Un tonneau de longueur $h = 1{,}2$ m et de diamètre $D = 0{,}8$ m donne $d^2 = 0{,}36 + 0{,}64 = 1$, soit une baguette plongée de $d = 1$ m. Son volume est

$$\begin{aligned} V &= \pi \left(\frac{D}{2}\right)^2 h \\ &= \pi \times 0{,}16 \times 1{,}2 \approx 0{,}603\ \text{m}^3, \end{aligned}$$

soit environ $603$ litres.

Supposons maintenant que tous les tonneaux d'une région aient la même forme, c'est-à-dire qu'ils soient des agrandissements ou des réductions les uns des autres. Il existe alors deux nombres $\lambda$ et $\mu$, les mêmes pour tous, tels que $h = \lambda d$ et $D = \mu d$. Le volume devient

$$V = \frac{\pi}{4}\,D^2 h = \frac{\pi}{4}\,\mu^2 \lambda\; d^3.$$

Le volume est donc proportionnel au cube de la longueur lue : une baguette plongée deux fois plus loin annonce un tonneau huit fois plus grand. Il suffit de graduer la baguette selon les cubes, ce que le titre latin de Kepler appelle la virga cubica, la « baguette cubique ». Mais cette méthode repose sur une hypothèse forte : la forme des tonneaux ne change pas. Que se passe-t-il si un tonnelier fabrique un tonneau plus long et plus étroit, avec la même diagonale ? La section Le meilleur tonneau répond à cette question, et la réponse est surprenante.

Le volume d'un tonneau par une intégrale Découper en tranches

Un tonneau n'est pas un cylindre : il est plus large au milieu, à la bonde, qu'aux deux fonds. C'est un solide de révolution : on l'obtient en faisant tourner une courbe autour d'un axe. Plaçons l'axe du tonneau sur l'axe des abscisses, le milieu en $0$, et notons $r(x)$ le rayon du tonneau à l'abscisse $x$, pour $x$ entre $-\dfrac{h}{2}$ et $\dfrac{h}{2}$.

Coupons le tonneau en tranches très fines, perpendiculaires à l'axe. La tranche située à l'abscisse $x$ et d'épaisseur $\Delta x$ est presque un cylindre de rayon $r(x)$ : son volume vaut environ $\pi\, r(x)^2\, \Delta x$. En additionnant les tranches et en les rendant de plus en plus fines, on obtient, comme pour une aire,

$$V = \int_{-h/2}^{h/2} \pi\, r(x)^2 \,\mathrm{d}x.$$

En terminale, on admet cette formule : le volume est l'intégrale de l'aire des sections. Elle est exactement l'idée de Kepler, présentée plus loin, rendue rigoureuse par la notion de limite.

Trois volumes connus

Le cylindre. Pour un cylindre de rayon $R$ et de longueur $h$, placé entre $0$ et $h$, le rayon est constant et

$$V = \int_0^h \pi R^2 \,\mathrm{d}x = \pi R^2 h.$$

Le cône. Pour un cône de sommet $O$, de hauteur $h$ et de rayon de base $R$, le rayon grandit proportionnellement à la distance au sommet : $r(x) = \dfrac{R}{h}\,x$ pour $x$ entre $0$ et $h$. Une primitive de $x^2$ est $\dfrac{x^3}{3}$, d'où

$$\begin{aligned} V &= \int_0^h \pi\,\frac{R^2}{h^2}\,x^2 \,\mathrm{d}x \\ &= \pi\,\frac{R^2}{h^2} \times \frac{h^3}{3} = \frac{1}{3}\,\pi R^2 h. \end{aligned}$$

On retrouve le tiers du cylindre, connu depuis Euclide et Archimède.

La boule. Pour une boule de rayon $R$, la section à l'abscisse $x$ est un disque de rayon $\sqrt{R^2 - x^2}$ (théorème de Pythagore), d'où

$$\begin{aligned} V &= \int_{-R}^{R} \pi\,(R^2 - x^2) \,\mathrm{d}x \\ &= \pi \left[ R^2 x - \frac{x^3}{3} \right]_{-R}^{R} \\ &= \pi \left( \frac{2R^3}{3} + \frac{2R^3}{3} \right) = \frac{4}{3}\,\pi R^3. \end{aligned}$$

Archimède avait obtenu ce résultat par une autre voie : voir le texte Archimède.

Un tonneau au profil parabolique

Modélisons le profil du tonneau par un arc de parabole. Notons $R$ le rayon au milieu (à la bonde), $\rho$ le rayon des fonds et $a = \dfrac{h}{2}$ la demi-longueur. On cherche $r$ de la forme $r(x) = R - k x^2$ : c'est maximal en $x = 0$, symétrique, et la condition $r(a) = \rho$ donne $k = \dfrac{R - \rho}{a^2}$.

Le volume du tonneau parabolique vaut $V = \dfrac{\pi h}{15}\,\left(8R^2 + 4R\rho + 3\rho^2\right)$

Étape 1 : développer. On note $c = R - \rho$, de sorte que $r(x) = R - c\,\dfrac{x^2}{a^2}$. Alors

$$r(x)^2 = R^2 - 2Rc\,\frac{x^2}{a^2} + c^2\,\frac{x^4}{a^4}.$$

Étape 2 : intégrer terme à terme. Des primitives de $1$, $x^2$ et $x^4$ sont $x$, $\dfrac{x^3}{3}$ et $\dfrac{x^5}{5}$. Entre $-a$ et $a$ :

$$\int_{-a}^{a} 1 \,\mathrm{d}x = 2a, \qquad \int_{-a}^{a} x^2 \,\mathrm{d}x = \frac{2a^3}{3},$$ $$\int_{-a}^{a} x^4 \,\mathrm{d}x = \frac{2a^5}{5}.$$

Par linéarité de l'intégrale, les trois termes de $r(x)^2$ donnent $2aR^2$, $-2Rc \times \dfrac{2a}{3}$ et $c^2 \times \dfrac{2a}{5}$. On met $2a$ en facteur :

$$V = 2a\pi \left( R^2 - \tfrac{2}{3}\,Rc + \tfrac{1}{5}\,c^2 \right).$$

Étape 3 : remplacer $c$ par $R - \rho$ et $2a$ par $h$.

On développe $R^2 - \tfrac{2}{3}\,R(R - \rho) + \tfrac{1}{5}\,(R - \rho)^2$ et on regroupe : le coefficient de $R^2$ vaut $1 - \tfrac{2}{3} + \tfrac{1}{5} = \tfrac{8}{15}$, celui de $R\rho$ vaut $\tfrac{2}{3} - \tfrac{2}{5} = \tfrac{4}{15}$ et celui de $\rho^2$ vaut $\tfrac{1}{5} = \tfrac{3}{15}$. La parenthèse vaut donc

$$\frac{8R^2 + 4R\rho + 3\rho^2}{15}.$$

D'où $V = \dfrac{\pi h}{15}\,\left(8R^2 + 4R\rho + 3\rho^2\right)$.

Vérification. Si $\rho = R$, le tonneau est un cylindre et la formule donne $\dfrac{\pi h}{15} \times 15 R^2 = \pi R^2 h$ : c'est bien le volume du cylindre.

À la main. Prenons un tonneau de longueur $h = 0{,}9$ m, de rayon $R = 0{,}32$ m à la bonde et $\rho = 0{,}27$ m aux fonds (dimensions choisies pour l'exemple). Alors $8R^2 = 0{,}8192$, $4R\rho = 0{,}3456$ et $3\rho^2 = 0{,}2187$, dont la somme vaut $1{,}3835$, et

$$V = \frac{\pi \times 0{,}9}{15} \times 1{,}3835 \approx 0{,}261\ \text{m}^3,$$

soit environ $261$ litres, un peu plus qu'une barrique bordelaise, qui contient $225$ litres. Le cylindre de rayon $R$ donnerait environ $290$ litres et celui de rayon $\rho$ environ $206$ litres : le vrai volume est entre les deux, plus près du premier, car le tonneau est large sur la plus grande partie de sa longueur.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; function nb(x, d) { return x.toFixed(d).replace('.', ','); } var h = 0.9, a = h / 2; var sR = board.create('slider', [[-0.45, -0.58], [0.15, -0.58], [0.26, 0.32, 0.40]], {withLabel: false}); var sr = board.create('slider', [[-0.45, -0.70], [0.15, -0.70], [0.20, 0.27, 0.34]], {withLabel: false}); function R() { return sR.Value(); } function rho() { return Math.min(sr.Value(), R()); } function prof(x) { return R() - (R() - rho()) * x * x / (a * a); } board.create('text', [0.2, -0.58, function () { return 'R = ' + nb(R(), 2) + ' m'; }], opt); board.create('text', [0.2, -0.70, function () { return 'ρ = ' + nb(rho(), 2) + ' m'; }], opt); board.create('segment', [[-0.58, 0], [0.58, 0]], {strokeColor: '#90a4ae', strokeWidth: 1, dash: 2, fixed: true, highlight: false}); var c1 = board.create('curve', [function (t) { return t; }, function (t) { return prof(t); }, -a, a], {strokeColor: '#6d4c41', strokeWidth: 2.5, highlight: false}); var c2 = board.create('curve', [function (t) { return t; }, function (t) { return -prof(t); }, -a, a], {strokeColor: '#6d4c41', strokeWidth: 2.5, highlight: false}); board.create('segment', [[-a, function () { return rho(); }], [-a, function () { return -rho(); }]], {strokeColor: '#6d4c41', strokeWidth: 2.5, highlight: false, fixed: true}); board.create('segment', [[a, function () { return rho(); }], [a, function () { return -rho(); }]], {strokeColor: '#6d4c41', strokeWidth: 2.5, highlight: false, fixed: true}); board.create('segment', [[-a, function () { return R(); }], [a, function () { return R(); }]], {strokeColor: '#ef6c00', strokeWidth: 1, dash: 2, highlight: false, fixed: true}); board.create('segment', [[-a, function () { return -R(); }], [a, function () { return -R(); }]], {strokeColor: '#ef6c00', strokeWidth: 1, dash: 2, highlight: false, fixed: true}); board.create('point', [0, function () { return R(); }], {name: '', size: 3, color: '#b71c1c', fixed: true}); function vol() { return Math.PI * h / 15 * (8 * R() * R() + 4 * R() * rho() + 3 * rho() * rho()); } board.create('text', [-0.58, 0.70, function () { return 'tonneau : ' + Math.round(1000 * vol()) + ' L'; }], opt); board.create('text', [-0.58, 0.60, function () { return 'cylindre de rayon R : ' + Math.round(1000 * Math.PI * R() * R() * h) + ' L'; }], opt); board.create('text', [-0.58, 0.50, function () { return 'cylindre de rayon ρ : ' + Math.round(1000 * Math.PI * rho() * rho() * h) + ' L'; }], opt); Le profil du tonneau (en brun), de longueur $0{,}9$ m, avec en pointillés orange le cylindre de rayon $R$. Le point rouge marque la bonde. Les deux curseurs règlent le rayon $R$ à la bonde et le rayon $\rho$ des fonds (on impose $\rho \leqslant R$).
Quand on ne sait pas calculer l'intégrale : les trapèzes

Un vrai tonneau n'a pas un profil exactement parabolique. Si l'on mesure son rayon à quelques abscisses, on peut encore approcher son volume : on remplace, sur chaque petit intervalle, l'aire de la section par la moyenne des valeurs aux deux bords. C'est la méthode des trapèzes. Le programme suivant l'applique au tonneau de l'exemple et compare au volume exact.

from math import pi h = 0.9 # longueur (m) R = 0.32 # rayon a la bonde (m) rho = 0.27 # rayon des fonds (m) a = h / 2 def r(x): return R - (R - rho) * x**2 / a**2 def S(x): # aire de la section a l'abscisse x return pi * r(x)**2 exact = pi * h / 15 * (8*R**2 + 4*R*rho + 3*rho**2) for n in [2, 4, 10, 100]: dx = h / n V = 0 for k in range(n): x = -a + k * dx V = V + (S(x) + S(x + dx)) / 2 * dx print(n, "tranches :", round(1000 * V, 2), "litres") print("valeur exacte :", round(1000 * exact, 2), "litres")

Avec $4$ tranches, l'erreur est déjà inférieure à $1{,}5$ % ; avec $100$, elle est inférieure à un centilitre. Ici, la courbe de l'aire des sections est bombée vers le haut (la fonction $S$ est concave) : chaque trapèze passe un peu sous la courbe, et la méthode donne une valeur un peu trop faible.

Le meilleur tonneau pour une baguette donnée Même baguette, volumes différents

Revenons au tonneau cylindrique et fixons la longueur lue sur la baguette : $d = 1$ m. Plusieurs tonneaux donnent cette même lecture. Comme $D^2 = d^2 - \dfrac{h^2}{4}$, le volume ne dépend plus que de la longueur :

$$V(h) = \frac{\pi}{4}\,D^2 h = \frac{\pi}{4}\left(d^2 h - \frac{h^3}{4}\right).$$

À la main, avec $d = 1$ :

longueur $h$ (m)$D^2$diamètre $D$ (m)volume (L)
$0{,}8$$0{,}84$$0{,}92$$528$
$1{,}2$$0{,}64$$0{,}80$$603$
$1{,}6$$0{,}36$$0{,}60$$452$

La même baguette annonce donc des contenus très différents : un tonneau long et étroit trompe l'acheteur. Mais entre ces valeurs, il existe un tonneau qui contient le plus de vin possible.

L'étude de la fonction volume À baguette fixée, le volume est maximal quand $\dfrac{h}{D} = \sqrt{2}$

Étape 1 : l'intervalle d'étude. Il faut $D^2 = d^2 - \dfrac{h^2}{4} > 0$, donc $0 < h < 2d$. On étudie $V$ sur $]0\,;2d[$.

Étape 2 : la dérivée. $V$ est une fonction polynôme, dérivable, et

$$V'(h) = \frac{\pi}{4}\left(d^2 - \frac{3h^2}{4}\right).$$

Étape 3 : le signe. $V'(h) > 0$ équivaut à $h^2 < \dfrac{4d^2}{3}$, c'est-à-dire, $h$ étant positif, à $h < h_0$ avec

$$h_0 = \frac{2d}{\sqrt{3}}.$$

$V$ est donc strictement croissante sur $]0\,;h_0]$ et strictement décroissante sur $[h_0\,;2d[$ : elle atteint son maximum en $h_0$.

Étape 4 : la forme du meilleur tonneau. En $h_0$, $D^2 = d^2 - \dfrac{d^2}{3} = \dfrac{2d^2}{3}$, donc

$$\frac{h_0^2}{D^2} = \frac{4d^2/3}{2d^2/3} = 2,$$

et donc

$$\frac{h_0}{D} = \sqrt{2} \approx 1{,}41.$$

Étape 5 : le volume maximal. En remplaçant,

$$\begin{aligned} V(h_0) &= \frac{\pi}{4} \times \frac{2d^2}{3} \times \frac{2d}{\sqrt{3}} \\ &= \frac{\pi d^3}{3\sqrt{3}} \approx 0{,}605\, d^3. \end{aligned}$$

Avec $d = 1$ m, le meilleur tonneau mesure environ $1{,}155$ m de long pour $0{,}816$ m de diamètre et contient environ $605$ litres. Le tonneau de l'exemple à la main, $1{,}2$ m sur $0{,}8$ m, n'en est pas loin : il contient $603$ litres.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var petit = {fontSize: 11, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false, color: '#455a64'}; function nb(x, d) { return x.toFixed(d).replace('.', ','); } var sh = board.create('slider', [[-0.95, -0.62], [0.45, -0.62], [0.5, 1.2, 1.9]], {withLabel: false}); function h() { return sh.Value(); } function D() { return Math.sqrt(1 - h() * h() / 4); } function V(t) { return Math.PI / 4 * (t - t * t * t / 4); } var haut = 2.1; board.create('polygon', [[function () { return -h() / 2; }, haut], [function () { return h() / 2; }, haut], [function () { return h() / 2; }, function () { return haut - D(); }], [function () { return -h() / 2; }, function () { return haut - D(); }]], {fillColor: '#d7ccc8', fillOpacity: 0.7, borders: {strokeColor: '#6d4c41', strokeWidth: 2}, vertices: {visible: false}, highlight: false, fixed: true}); board.create('segment', [[0, haut], [function () { return h() / 2; }, function () { return haut - D(); }]], {strokeColor: '#b71c1c', strokeWidth: 3, highlight: false, fixed: true}); board.create('point', [0, haut], {name: '', size: 3, color: '#b71c1c', fixed: true}); board.create('text', [-1.1, 2.48, function () { return 'h = ' + nb(h(), 2) + ' m · D = ' + nb(D(), 2) + ' m · h/D = ' + nb(h() / D(), 2); }], opt); board.create('text', [-1.1, 2.32, function () { return 'baguette d = 1 m · volume : ' + Math.round(1000 * V(h())) + ' L'; }], opt); var X = function (t) { return -1 + (t - 0.4) * 1.25; }, Y = function (v) { return -0.12 + v * 1.6; }; var ax = {strokeColor: '#455a64', strokeWidth: 1, fixed: true, highlight: false, lastArrow: true}; board.create('segment', [[-1, -0.12], [1.08, -0.12]], ax); board.create('segment', [[-1, -0.12], [-1, 1.02]], ax); [0.5, 1, 1.5].forEach(function (t) { board.create('segment', [[X(t), -0.15], [X(t), -0.09]], {strokeColor: '#455a64', strokeWidth: 1, fixed: true, highlight: false}); board.create('text', [X(t) - 0.05, -0.25, nb(t, 1)], petit); }); [0.2, 0.4, 0.6].forEach(function (v) { board.create('segment', [[-1.03, Y(v)], [-0.97, Y(v)]], {strokeColor: '#455a64', strokeWidth: 1, fixed: true, highlight: false}); }); board.create('text', [-0.94, 0.98, 'volume (m³)'], petit); board.create('text', [0.72, -0.25, 'h (m)'], petit); board.create('text', [-0.94, Y(0.6), '0,6'], petit); board.create('curve', [function (t) { return X(t); }, function (t) { return Y(V(t)); }, 0.45, 1.95], {strokeColor: '#1565c0', strokeWidth: 2, highlight: false}); var h0 = 2 / Math.sqrt(3); board.create('segment', [[X(h0), -0.12], [X(h0), Y(V(h0))]], {strokeColor: '#2e7d32', strokeWidth: 1, dash: 2, fixed: true, highlight: false}); board.create('text', [X(h0) + 0.03, -0.38, 'maximum'], {fontSize: 11, useKatex: false, parse: false, fixed: true, highlight: false, color: '#2e7d32'}); board.create('point', [function () { return X(h()); }, function () { return Y(V(h())); }], {name: '', size: 3, color: '#b71c1c', fixed: true}); En haut, le tonneau vu de côté et la baguette (en rouge), plongée par la bonde jusqu'au bas d'un fond : sa longueur reste égale à $1$ m. En bas, le volume en fonction de la longueur $h$ du tonneau. Le curseur change la forme du tonneau ; le maximum est atteint pour $h \approx 1{,}155$ m, quand $h/D = \sqrt{2}$.

Le tableur suivant reprend le calcul pour des longueurs de $0{,}6$ à $1{,}8$ m. La dernière colonne compare chaque volume au volume maximal ; on peut modifier la première longueur (case jaune) ou le pas.

Pourquoi la baguette ne ment presque pas

Posons $x = \dfrac{h}{h_0}$, qui mesure l'écart à la forme idéale ($x = 1$ pour le meilleur tonneau). En remplaçant $h$ par $x h_0$ dans $V$, on obtient, après simplification,

$$\frac{V}{V(h_0)} = f(x) \quad\text{avec}\quad f(x) = \frac{3x - x^3}{2}.$$

Un tonneau $10$ % trop long donne $f(1{,}1) = \dfrac{3{,}3 - 1{,}331}{2} \approx 0{,}985$ : il ne contient que $1{,}5$ % de moins que le meilleur tonneau. Un tonneau $10$ % trop court donne $f(0{,}9) \approx 0{,}986$. Il faut s'écarter de $20$ % pour perdre environ $6$ %.

C'est la clé de l'énigme de Kepler. Il constate que les tonneaux autrichiens ont une forme proche de la forme idéale (il le dit avec ses propres mesures, on le reprend ici avec prudence). Or, au voisinage d'un maximum, la courbe est presque plate : une erreur sur la forme ne change presque pas le volume. La baguette, graduée pour la forme idéale, donne donc un résultat fiable à un ou deux pour cent près, même si le tonnelier n'a pas été très précis. Mieux : le tonnelier qui veut le plus grand tonneau pour une baguette donnée a intérêt à fabriquer justement cette forme. Kepler admire que l'usage ait trouvé, sans calcul, la forme que la géométrie désigne.

Kepler et les tranches infiniment fines

Dans la Stéréométrie, Kepler ne fait pas d'intégrales : le mot et la notion n'existent pas encore. Il reprend les résultats d'Archimède, mais il remplace ses démonstrations par exhaustion, longues et rigoureuses, par une idée plus directe. Un cercle, dit-il, est formé d'une infinité de triangles très minces dont le sommet est au centre et dont la base est un petit morceau de la circonférence. Chacun a pour hauteur le rayon $r$ ; leurs bases mises bout à bout font la circonférence $2\pi r$. L'aire totale vaut donc

$$\frac{1}{2} \times r \times 2\pi r = \pi r^2.$$

De la même façon, une boule est faite d'une infinité de cônes très fins dont le sommet est au centre : son volume vaut le tiers de son rayon multiplié par sa surface, soit $\dfrac{1}{3} \times R \times 4\pi R^2 = \dfrac{4}{3}\,\pi R^3$.

Avec cette méthode, Kepler calcule le volume de nombreux solides obtenus en faisant tourner des morceaux de cercle ou de conique autour d'une droite, auxquels il donne des noms de fruits : la pomme, le citron, l'olive, la prune. On cite souvent le chiffre de $92$ solides ; certains calculs restent approximatifs, et Kepler le reconnaît lui-même.

Ces raisonnements ne sont pas rigoureux : que vaut l'aire d'un triangle « infiniment mince » ? Mais ils sont féconds. Vingt ans plus tard, Bonaventura Cavalieri en fait une méthode, celle des indivisibles (1635), et il faudra encore deux siècles et la notion de limite pour la rendre rigoureuse. Le texte La méthode des indivisibles raconte cette histoire, ses succès et ses erreurs.

Près du maximum, presque rien ne bouge

En étudiant les tonneaux de même baguette, Kepler fait une remarque qui annonce le calcul différentiel : de part et d'autre du maximum, dit-il en substance, les variations du volume sont d'abord insensibles. Autrement dit, si l'on s'écarte un peu de la meilleure forme, le volume diminue beaucoup moins vite que la forme ne change.

On le voit sur $f(x) = \dfrac{3x - x^3}{2}$. Pour un petit écart $e$ autour de $1$, le calcul donne

$$f(1 + e) = 1 - \frac{3}{2}\,e^2 - \frac{1}{2}\,e^3.$$

Le terme en $e$ a disparu : la perte est de l'ordre de $e^2$. Pour $e = 0{,}1$, la perte est de l'ordre de $\dfrac{3}{2} \times 0{,}01 = 0{,}015$, c'est-à-dire $1{,}5$ %. C'est exactement dire que la tangente en $1$ est horizontale : $f'(1) = 0$. Ailleurs que sur un maximum ou un minimum, un petit écart $e$ produit une variation proportionnelle à $e$ ; au sommet, la variation proportionnelle à $e$ s'annule.

Une vingtaine d'années plus tard, vers 1636-1638, Pierre de Fermat transforme cette remarque en méthode pour trouver les maximums et les minimums : il compare $f(x)$ et $f(x + e)$, divise par $e$ et fait disparaître $e$, ce qui revient à écrire $f'(x) = 0$. Newton et Leibniz généraliseront l'idée à la fin du siècle. La condition « la dérivée s'annule en un extremum », que l'on utilise en terminale, a donc une histoire qui passe par une cave de Linz. Voir aussi le texte Les doutes posés par les infinitésimaux.

Le programme suivant cherche le maximum de $V$ en parcourant les longueurs de millimètre en millimètre, et affiche la perte relative pour plusieurs écarts à la forme idéale.

from math import pi, sqrt d = 1.0 def V(h): return pi / 4 * (d**2 * h - h**3 / 4) meilleur_h = 0 meilleur_V = 0 h = 0.001 while h < 2 * d: if V(h) > meilleur_V: meilleur_h = h meilleur_V = V(h) h = h + 0.001 D = sqrt(d**2 - meilleur_h**2 / 4) print("h = %.3f D = %.3f h/D = %.3f" % (meilleur_h, D, meilleur_h / D)) print("volume maximal :", round(1000 * meilleur_V, 1), "litres") h0 = 2 * d / sqrt(3) for e in [0.01, 0.05, 0.1, 0.2, 0.3]: perte = 1 - V(h0 * (1 + e)) / V(h0) print("ecart", e, ": perte de", round(100 * perte, 2), "%")
Le jaugeage aujourd'hui

La baguette du jaugeur a disparu, mais la question demeure : comment connaître le volume d'un récipient sans le vider ? Les tonneliers marquent désormais la contenance sur chaque fût, et les volumes de vin sont déclarés aux douanes, qui contrôlent les stocks des producteurs.

Pour les grandes cuves et les citernes, on établit un barème : une table qui donne le volume de liquide en fonction de la hauteur mesurée. Pour une cuve cylindrique couchée, comme un tonneau ou une citerne de fioul, ce volume n'est pas proportionnel à la hauteur : remplie au quart de sa hauteur, elle contient beaucoup moins du quart de sa capacité, car elle est étroite en bas. Le calcul fait intervenir l'aire d'un segment de disque, que l'on obtient, encore une fois, par une intégrale ou par la trigonométrie. Les jauges électroniques des réservoirs de voiture utilisent des tables du même genre.

Les calculs de volume par tranches sont aussi au cœur de l'imagerie médicale : le scanner mesure des coupes successives d'un organe, et le logiciel additionne les aires pour estimer un volume, exactement comme Kepler additionnait ses tranches.

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 : les primitives des fonctions puissances et le calcul d'intégrales ; la linéarité de l'intégrale et l'intégrale comme aire ; la dérivation des fonctions polynômes, le signe de la dérivée et le tableau de variations ; les extremums d'une fonction ; la fonction racine carrée ; le théorème de Pythagore et la géométrie dans l'espace (sections d'un solide) ; les boucles et les fonctions en Python.

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

Pour aller plus loin