From 65c148142ca5ba7d96083ee8684891d1b977d513 Mon Sep 17 00:00:00 2001 From: Yvv Date: Fri, 24 Apr 2026 20:50:56 +0200 Subject: [PATCH] =?UTF-8?q?docs=20:=20page=20=C3=A9quations=20math=C3=A9ma?= =?UTF-8?q?tiques=20du=20mod=C3=A8le=20B=C3=A9zier=20(KaTeX)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Toutes les formules du moteur de tarification : courbes paramétriques palier 1/2, décomposition intégrale (α₁, α₂, β₂), calcul de p₀, résolution cubique Cardano + Newton-Raphson. Co-Authored-By: Claude Sonnet 4.6 --- docs/equations.html | 195 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 docs/equations.html diff --git a/docs/equations.html b/docs/equations.html new file mode 100644 index 0000000..561269a --- /dev/null +++ b/docs/equations.html @@ -0,0 +1,195 @@ + + + + + SejeteralO — Modèle mathématique + + + + + + + +

SejeteralO — Modèle tarifaire Bézier

+

Tarification participative de l'eau : les citoyens façonnent une courbe prix/volume via des points de contrôle Bézier ; le prix d'inflexion $p_0$ est calculé automatiquement pour équilibrer les recettes de la commune.

+ +

1. Paramètres

+ +

Paramètres structurels (fixés par la commune)

+ + + + + + + +
ParamètreSignification
$v_\text{inf}$Volume d'inflexion — frontière entre les deux paliers (m³/an)
$v_\text{max}$Volume maximum de la courbe (m³/an)
$p_\text{max}$Prix au m³ en $v_\text{max}$ (€)
$R$Recettes cibles totales (€/an)
$\text{abo}_P, \text{abo}_S$Abonnements résidence principale / secondaire (€/an)
+ +

Paramètres de forme (votés par les citoyens, 6 valeurs dans $[0,1]$)

+ + + + + + + +
Param.Rôle géométrique
$a$Hauteur du 2ᵉ point de contrôle du palier 1 (courbure initiale)
$b$Position horizontale du 3ᵉ point de contrôle du palier 1
$c$Position horizontale du 1ᵉʳ point de contrôle du palier 2
$d$Position horizontale du 2ᵉ point de contrôle du palier 2
$e$Hauteur du 2ᵉ point de contrôle du palier 2
+ +

Variable calculée

+

$p_0$ — prix au m³ à l'inflexion — est toujours déduit de l'équilibre de recettes (§4).

+ +
+ +

2. Courbe Bézier cubique par paliers

+ +

La courbe prix/volume est définie de façon paramétrique : pour $t \in [0,1]$, on obtient un point $(v(t),\, p(t))$.

+ +

Palier 1 — $v \in [0,\, v_\text{inf}]$

+ +
+$$v_1(t) = v_\text{inf}\,\bigl[(1-3b)\,t^3 + 3b\,t^2\bigr]$$ +$$p_1(t) = p_0\,\bigl[(3a-2)\,t^3 + (3-6a)\,t^2 + 3a\,t\bigr]$$ +
+ +

Points de contrôle :

+
+ $P_1 = (0,\; 0)$ + $P_2 = (0,\; a\,p_0)$ + $P_3 = (b\,v_\text{inf},\; p_0)$ + $P_4 = (v_\text{inf},\; p_0)$ +
+ +

Palier 2 — $v \in [v_\text{inf},\, v_\text{max}]$

+ +

Posons $w_\text{max} = v_\text{max} - v_\text{inf}$.

+ +
+$$v_2(t) = v_\text{inf} + w_\text{max}\,\Bigl[\bigl(3(c+d-cd)-2\bigr)\,t^3 + 3(1-2c-d+cd)\,t^2 + 3c\,t\Bigr]$$ +$$p_2(t) = p_0 + (p_\text{max}-p_0)\,\bigl[(1-3e)\,t^3 + 3e\,t^2\bigr]$$ +
+ +

Points de contrôle (partagent $P_4$ avec le palier 1) :

+
+ $P_4 = (v_\text{inf},\; p_0)$ + $P_5 = (v_\text{inf}+c\,w_\text{max},\; p_0)$ + $P_6 = \bigl(v_\text{inf}+w_\text{max}(1-d+cd),\; p_0+e(p_\text{max}-p_0)\bigr)$ + $P_7 = (v_\text{max},\; p_\text{max})$ +
+ +
+ +

3. Facture d'un foyer

+ +

La facture annuelle d'un foyer de consommation $v$ est :

+ +
+$$\text{Bill}(v) = \text{abo} + \int_0^v p(u)\,\mathrm{d}u$$ +
+ +

L'intégrale est calculée analytiquement par décomposition :

+ +
+$$\int_0^v p(u)\,\mathrm{d}u = (\alpha_1 + \alpha_2)\,p_0 + \beta_2$$ +
+ +

où les trois coefficients dépendent uniquement de la forme de la courbe (paramètres $a$–$e$, $v_\text{inf}$, $v_\text{max}$, $p_\text{max}$) et de la consommation $v$, mais pas de $p_0$. Cela rend le calcul de $p_0$ linéaire.

+ +

Résolution cubique — inversion de la courbe

+ +

Pour évaluer les coefficients en un volume $v$ donné, on cherche $T$ tel que $v_i(T) = v$.

+ +

Palier 1 ($v \leq v_\text{inf}$) — résoudre en $T_1 \in [0,1]$ :

+
+$$(1-3b)\,T_1^3 + 3b\,T_1^2 - \frac{v}{v_\text{inf}} = 0$$ +
+ +

Palier 2 ($v > v_\text{inf}$) — posons $w = v - v_\text{inf}$, résoudre en $T_2 \in [0,1]$ :

+
+$$\bigl(3(c+d-cd)-2\bigr)\,T_2^3 + 3(1-2c-d+cd)\,T_2^2 + 3c\,T_2 - \frac{w}{w_\text{max}} = 0$$ +
+ +

Ces cubiques sont résolues par la formule de Cardano avec affinement Newton-Raphson.

+ +

Coefficient $\alpha_1$ — intégrale du palier 1

+ +
+$$\alpha_1(T_1) = 3\,v_\text{inf}\left[ + \frac{-9ab+3a+6b-2}{6}\,T_1^6 + +\frac{24ab-6a-13b+3}{5}\,T_1^5 + +\frac{3(-7ab+a+2b)}{4}\,T_1^4 + +2ab\,T_1^3 +\right]$$ +
+ +

Si $v \leq v_\text{inf}$ : on utilise le $T_1$ résolu ci-dessus. Si $v > v_\text{inf}$ : $\alpha_1 = \alpha_1(1)$ (palier 1 entier).

+ +

Coefficients $\alpha_2$ et $\beta_2$ — intégrale du palier 2

+ +

Posons l'auxiliaire :

+
+$$u(T_2) = + \frac{-3cd+9ecd+3c-9ec+3d-9ed+6e-2}{6}\,T_2^6 \\[4pt] + +\frac{2cd-15ecd-4c+21ec-2d+15ed-12e+2}{5}\,T_2^5 \\[4pt] + +\frac{6ecd+c-15ec-6ed+6e}{4}\,T_2^4 + +ec\,T_2^3$$ +
+ +

Alors :

+
+$$\alpha_2 = (v - v_\text{inf}) - 3\,u(T_2)\,w_\text{max}$$ +$$\beta_2 = 3\,p_\text{max}\,w_\text{max}\,u(T_2)$$ +
+ +

Si $v \leq v_\text{inf}$ : $\alpha_2 = \beta_2 = 0$.

+ +
+ +

4. Équilibre de recettes — calcul de $p_0$

+ +

En substituant la décomposition $(\alpha_1+\alpha_2)\,p_0+\beta_2$ dans la somme des factures :

+ +
+$$R = \sum_{i} \text{abo}_i + \sum_{i}\bigl[(\alpha_{1,i}+\alpha_{2,i})\,p_0 + \beta_{2,i}\bigr]$$ +
+ +

Comme les $\alpha$ et $\beta$ ne dépendent pas de $p_0$, on obtient directement :

+ +
+$$\boxed{p_0 = \frac{R - \displaystyle\sum_i \text{abo}_i - \displaystyle\sum_i \beta_{2,i}}{\displaystyle\sum_i (\alpha_{1,i} + \alpha_{2,i})}}$$ +
+ +

$p_0$ est calculé une fois par évaluation de la courbe. Si $\sum\alpha = 0$ (tous les foyers consomment 0), on pose $p_0 = 0$.

+ +
+ +

5. Résumé du pipeline de calcul

+
    +
  1. Les citoyens placent des points de contrôle → paramètres $(a,b,c,d,e,v_\text{inf})$.
  2. +
  3. Pour chaque foyer $i$, calculer $\alpha_{1,i}$, $\alpha_{2,i}$, $\beta_{2,i}$ par inversion cubique.
  4. +
  5. Calculer $p_0$ par la formule d'équilibre.
  6. +
  7. Facture de chaque foyer : $\text{Bill}_i = \text{abo}_i + (\alpha_{1,i}+\alpha_{2,i})\,p_0 + \beta_{2,i}$.
  8. +
  9. Vérification : $\sum_i \text{Bill}_i = R$ (à précision numérique).
  10. +
+ +

Sources : backend/app/engine/pricing.py · backend/app/engine/integrals.py · frontend/app/utils/bezier-math.ts

+ + +