**Ceci est une ancienne révision du document !**
Table des matières
Vérification — L'intégration numérique et la méthode RK4
Fiche de traçabilité de l'article L'intégration numérique par la méthode de Runge-Kutta d'ordre 4. Voir la méthode.
Page neuve, contrôlée le jour de sa mise en ligne puis à nouveau après son développement du 2026-08-12. Sa particularité : elle parle de nos propres outils. La source à confronter n'est donc pas une publication, c'est le code qui tourne sur le site — et il a le bon goût de ne pas se souvenir de travers.
Ce qui a été fait
- Les quatre fichiers concernés relus :
BallisticsGuide/src/CompetitionBallistics.js(solveur 3-DOF),reloading/tireur_reloaded/legacy/grt_solver.js(simulateur 0D),energy_model.jsetvelocity_model.js(estimateur servi en production). - Le solveur 3-DOF du site ré-exécuté sous Node à six pas de temps différents, pour mesurer si le pas retenu est assez court — la page l'affirmait sans l'avoir vérifié.
- Tous les chiffres publiés recalculés sur un modèle à solution exacte connue, et le schéma engendré par ce même calcul.
- La page servie ouverte dans un navigateur et mesurée, pas seulement relue au source.
La correction de fond : l'article attribuait RK4 à un outil qui n'intègre rien
La première version affirmait que la balistique intérieure du site était résolue en RK4. C'est faux pour l'outil réellement servi.
La page de l'estimateur ne charge que energy_model.js et velocity_model.js. Ni l'un ni l'autre ne contient de boucle en temps — aucune occurrence de pas de temps, de $k_1$, de Runge ou d'intégration dans les deux fichiers réunis. L'estimateur repose sur un modèle algébrique énergie-efficacité, qui relie directement charge, énergie de bouche et pression sans jamais parcourir le temps.
RK4 existe bien du côté intérieur, mais dans legacy/grt_solver.js — le simulateur thermodynamique 0D, avec son pas de 1 µs — et ce solveur-là n'est pas celui qu'on sert.
L'enjeu n'est pas cosmétique : un lecteur aurait porté au crédit de l'intégrateur une précision qui n'en relève pas, et cherché les limites de l'estimateur du mauvais côté. Elles tiennent à son modèle physique. L'article porte désormais un encadré qui dit lequel des outils intègre quoi.
Ressorti intact : tout ce qui décrit l'algorithme
| Affirmation de la page | Ce que dit le code |
|---|---|
| Pas extérieur $\Delta t = 0{,}0005$ s | dt: 0.0005 |
| Pas intérieur de 1 µs | const dt = 1.0e-6 |
| Vecteur d'état à six composantes | [x, y, z, vx, vy, vz] |
| Pondération $\frac{\Delta t}{6}(k_1 + 2k_2 + 2k_3 + k_4)$ | identique, dans les deux solveurs |
| $k_2$ et $k_3$ au même instant | s2 et s3 construits tous deux avec 0.5 * dt |
| Traînée calculée sur la vitesse relative à l'air | vrx = _vx - wx, etc. |
| Gravité projetée selon l'angle de site | gAlong / gPerp |
| Coriolis intégré à chaque pas, en option | dans derivs(), sous enableCoriolis |
| Dérive gyroscopique ajoutée après l'intégration | boucle post-résolution sur windageM |
Justes également, et démontrables sans rien ouvrir : l'ordre 1 d'Euler, l'ordre 4 de RK4, l'erreur locale en $\Delta t^5$, les douze variables d'état d'un modèle 6-DOF.
Le pas de temps du solveur, cette fois mesuré
L'article soutenait qu'à pas fixe « la marge se prend en amont » : on retient un pas assez court pour la phase la plus raide et on le garde partout. Affirmation invérifiée tant qu'on ne l'a pas éprouvée. Le solveur a donc été relancé sur une .308 175 gr (G7 0,243, 2 600 fps, zéro à 100 yd, vent de 10 mph), l'état étant comparé à instant fixe — 1,2 s de vol, soit environ 720 m — pour ne pas mélanger l'erreur d'intégration à celle de l'échantillonnage.
| Pas de temps | Écart sur la chute | Écart sur la distance | Écart sur la dérive |
|---|---|---|---|
| 0,002 s | 2,5 mm | 2,7 × 10⁻³ mm | 1,4 × 10⁻⁴ mm |
| 0,0005 s (production) | 0,40 mm | 4,2 × 10⁻⁴ mm | 2,3 × 10⁻⁵ mm |
| 0,000125 s | 0,14 mm | 1,4 × 10⁻⁴ mm | 7,7 × 10⁻⁶ mm |
Écarts pris sur une exécution de référence à $\Delta t = 10^{-5}$ s. Le pas de production est amplement suffisant : le quadrupler ne déplacerait le point d'impact que de deux millimètres et demi à 720 m — un centième de MOA, très en deçà de ce qu'un tireur peut constater.
Ce que la mesure a révélé en passant. Ce résidu n'est pas celui de l'intégration de la trajectoire. Distance et dérive s'accordent à $10^{-4}$ mm près pendant que la chute bouge de 0,4 mm : trois ordres de grandeur d'écart entre des grandeurs issues du même pas de temps.
La chute est la seule des trois que fixe l'angle de zéro, calculé par une recherche séparée dont la boucle s'arrête au premier pas franchissant la distance de zérotage. L'angle trouvé est rigoureusement identique pour $\Delta t$ = 0,001, 0,0005 et 0,00025 s, puis bouge aux pas plus fins — signature d'une quantification, pas d'une convergence.
Ce n'est pas un défaut : l'effet est submillimétrique à 720 m, sans portée pour un tireur. Mais c'est là que loge le résidu, et non dans RK4. Conséquence méthodologique : l'ordre 4 ne peut pas se mesurer sur ce solveur — la recherche d'angle plafonne avant qu'on n'atteigne le régime asymptotique.
Les chiffres du banc d'essai : d'où ils viennent
Les valeurs chiffrées de la page ne sortent pas du solveur du site. Elles ont été calculées pour elle sur un cas volontairement simplifié — traînée quadratique pure, coefficient de traînée figé — précisément parce que ce cas-là possède une solution exacte, $v(t) = v_0 / (1 + k v_0 t)$, à laquelle comparer chaque méthode. Sans étalon, comparer Euler à RK4 ne dit rien de leur justesse : c'est l'enseignement de la fiche du tir en pente, où deux approximations se départageaient sans jamais convoquer l'arbitre.
Le coefficient $k = 9{,}08 \times 10^{-4}$ m⁻¹ se dérive de $\rho = 1{,}225$ kg/m³, $A = 4{,}803 \times 10^{-5}$ m² et $m = 11{,}34$ g. Toutes les valeurs des deux tableaux ont été reproduites par un script indépendant, et le schéma est engendré par scripts/gen_rk4_figure.py depuis le même calcul : aucun point n'y est dessiné à la main, y compris les quatre pentes $k_1$ à $k_4$ du second panneau.
Le $C_d$ de 0,35 est une convention de l'exercice, pas une mesure de la .308 175 gr. Il n'est invoqué à aucun moment comme une donnée balistique : la seule chose qui lui est demandée est de produire une décélération de bouche plausible — 581 m/s², près de 59 g — ce qu'il fait. La page le dit, et c'est ce qui autorise le reste.
Corrections d'énoncé
- « Mathématiquement impossible » pour la résolution analytique : faux tel quel. Des solutions existent pour des lois de traînée simples, et l'artillerie a longtemps vécu sur des approximations de ce type. Ce qui n'admet pas de forme close, c'est le problème avec une table de traînée mesurée. Reformulé.
- « Quatre points différents » : RK4 fait quatre évaluations réparties sur trois instants, $k_2$ et $k_3$ tombant au même milieu d'intervalle sur deux estimations différentes de l'état. La page le dit maintenant explicitement, parce que c'est l'erreur de lecture la plus courante sur cette méthode.
- Le vecteur d'état 6-DOF était mal décrit ; il compte douze variables.
- « Coefficients aérodynamiques McCoy » : McDrag et McGyro ne sont pas des coefficients mais des codes de calcul.
- Pas de temps donné à 0,001 s au lieu de 0,0005 s, et point décimal au lieu de la virgule.
Un défaut de rendu, invisible au source
Deux formules de l'encadré du banc d'essai s'affichaient avec une virgule parasite — « $-k, v^2$ », « $1 + k, v_0, t$ ». L'espace fine TeX \, y était écrite ; l'analyseur Markdown mange l'antislash avant que le moteur mathématique ne lise la ligne, et il ne reste que la ponctuation.
C'est la même famille que le % évaporé de la page du tir en pente, à ceci près que celui-ci laisse une trace visible au lieu de tronquer silencieusement. Ni le linter ni la règle de rendu tronqué ne le voient : il n'apparaît qu'en regardant la page servie. Corrigé, et vérifié à l'écran après correction.
Ce qui n'a pas été vérifié
- Les cinq références bibliographiques n'ont pas été ouvertes. Elles sont citées de connaissance, ce qui est exactement la situation qui produit des références plausibles et fausses. Les deux plus exposées sont les articles fondateurs — Runge, Mathematische Annalen 46, 1895, et Kutta, 1901 : ni le volume, ni le millésime, ni le titre exact n'ont été confrontés à un exemplaire. Les trois traités (Butcher 3ᵉ éd. 2016, Hairer-Nørsett-Wanner 2ᵉ éd. 1993, McCoy 2ᵉ éd. 2012) non plus.
- L'attribution de McDrag et McGyro et la composition du vecteur d'état 6-DOF sont conformes à ce que rapporte la littérature, mais aucun exemplaire du traité de balistique extérieure cité n'a pu être ouvert : l'exemplaire local n'a pas été retrouvé pendant ce contrôle. À confronter si le PDF est disponible.
- « Un modèle point-masse correctement renseigné fait pratiquement aussi bien » que le 6-DOF pour la prévision courante : jugement repris de la littérature, non mesuré ici — le site n'a pas de solveur 6-DOF pour l'arbitrer.
- Le pas de 1 µs du simulateur intérieur n'a pas subi le test de convergence appliqué au solveur extérieur.
- L'ordre 4 n'a été mesuré que sur le modèle jouet. Sur le solveur du site, la mesure bute sur la recherche d'angle de zéro (voir plus haut) avant d'atteindre le régime où l'ordre se lit.
Voir aussi
- Fiche du dossier balistique intérieure — l'autre fiche où le solveur du site a été ré-exécuté
