Interpolation de la dérivée préservant l’intégrale

Calli
Modifié (December 2021) dans Statistiques

Bonjour

Soient $F:\Bbb R\to\Bbb R$ une fonction lisse et $f=F'$. On suppose qu'on connait uniquement $F$ en $n$ points $x_1<\dots<x_n$. Je cherche une fonction $\hat f:[x_1,x_n]\to\Bbb R$ au moins continue, approchant $f$, telle que : $\forall i \in[\![1,n-1]\!], \int_{x_i}^{x_{i+1}}\hat f = \int_{x_i}^{x_{i+1}} f =F(x_{i+1})-F(x_i)$. J'ai pensé à une méthode d'approximation par une fonction polynomiale d'ordre 2 par morceaux, mais je ne pense pas que ce soit optimal tel que je l'ai fait. Existe-t-il des méthodes connues pour cela ?

Merci d'avance.

Réponses

  • YvesM
    Modifié (December 2021)
    Bonjour,
    $f$ linéaire semble marcher, non ? Un ligne brisée, continue...
  • Je veux bien, mais il faut préciser quelles valeurs tu donnes à $\hat f$ en quels points. Car on ne connait aucune valeur de $f$, donc on ne dispose pas naturellement de points $(x,f(x))$ à relier.
  • YvesM
    Modifié (December 2021)
    Bonjour
    On a deux paramètres dans l’équation de la droite : $y=a x +b.$ On intègre entre $x_i$ et $x_{i+1}$ pour trouver ${(a x+n)^2\over 2 a }\Big|_{x_i}^{x_{i+1}}=F(x_{i+1})-F(x_i).$
    On choisit donc $a$ et $b$ pour initier la méthode puis dans le prochain intervalle, un paramètre assure la continuité et l’autre l’équation. 
    Non ? 
    On alors je n’ai pas compris le problème. 
  • marsup
    Modifié (December 2021)
    Bonjour,

    Tu prends $a_i = \frac{x_i+x_{i+1}}{2}$ et $m_i = \frac{F(x_{i+1}) - F(x_{i}) }{x_{i+1} - x_i}$.

    Ensuite tu choisis une pente pour le premier segment sur $[x_1,x_2]$ passant par $(a_1,m_1)$, et tu choisis les autres pentes sur les autres $[x_i,x_{i+1}]$ passant par $(a_i,m_i)$ pour avoir continuité de la fonction affine par morceaux, comme dit Yves.

    Tu peux ensuite chercher à minimiser la somme pondérée des carrés des pentes (la norme $L^2$ de la dérivée seconde $\hat F''$. Ce sera une définition possible.

    Sinon tu prends le polynôme d'interpolation de Lagrange pour $F$ et tu le dérives. (par contre, c'est pas bon comme approximation globale, en général, mais au moins la formule est exacte si $f$ est de degré $n-1$ !)

    En quel sens souhaites-tu "approcher $f$" ? Sans précision, tu demandes n'importe quelle fonction dans un sous-espace affine de codimension $n-1$ (les intégrales partielles que tu veux) de l'espace des fonctions...
  • Foys
    Modifié (December 2021)
    La dérivation n'est pas continue pour la norme infinie ce qui va très vite poser de gros problèmes; par exemple il existe une suite de fonctions $C^{\infty}$: $(g_n)_{n\in \N}$ qui s'annulent toutes sur les $(x_i)_{1\leq i \leq n}$ et telle que $\|g_n\|_{\infty} \underset{n\to +\infty} {\longrightarrow}0$ et $\|g'_n\|_{\infty} \underset{n\to +\infty} {\longrightarrow} +\infty$ (par exemple quand les $x_i$ sont régulièrement espacés on prend $g_n := x \mapsto \frac {\sin \left (c n^n x\right )} n$ avec $c$ à choisir avec soin).
    Si tu veux approximer $F'$ en connaissant uniquement des valeurs de $F$, tu peux te retrouver à approximer $F' +g_p$ avec $p$ grand.
    Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
  • Calli
    Modifié (December 2021)
    Merci pour vos réponses. 
    marsup a dit :
    En quel sens souhaites-tu "approcher $f$" ? Sans précision, tu demandes n'importe quelle fonction dans un sous-espace affine de codimension $n-1$ (les intégrales partielles que tu veux) de l'espace des fonctions...
    J'aimerais par exemple que $\|f-\hat f\|_\infty\underset{h\to0}\longrightarrow 0 $ où $h=\max\limits_{1\leqslant i\leqslant n-1} |x_{i+1}-x_i|$ est le pas de la subdivision. Et j'aimerais aussi que dans les exemples pratiques (lorsque $h$ est inférieur à l'échelle typique de variation de $f$), le graphe de $\hat f$ ressemble visuellement à celui de $f$, autrement dit qu'il soit proche de l'interpolation "à vue" qu'on aurait pu tracer avec son crayon. Et ce serait aussi bien que l'interpolation ne soit pas affectée en mal par l'irrégularité de la subdivision $(x_i)$, car sinon rajouter certains points $x_i$ pourrait détériorer l'interpolation, ce qui serait dommage.

    @Yves, @marsup : J'avais pensé à prendre une fonction affine par morceaux comme ça, mais j'avais peur que les erreurs soient amplifiées de $[x_i,x_{i+1}]$ en $[x_{i+1},x_{i+2}]$, pour donner à la fin une fonction qui oscille comme une folle. En revanche, je n'avais pas pensé à minimiser $\|\hat{f}'\|_2$. Donc j'ai fait un test dont on voit le résultat dans l'image en pièce jointe. En bleu c'est $f$, en orange c'est $\sum\limits_{i=1}^{n-1} \frac{F(x_{i+1})-F(x_i)}{x_{i+1}-x_i} {\bf1}_{[x_i,x_{i+1}]}$ $= \sum\limits_{i=1}^{n-1} \text{moyenne}_{[x_i,x_{i+1}]} (f) {\bf1}_{[x_i,x_{i+1}]}$ et en rouge c'est $\hat f$. Malheureusement, ça n'est pas très convainquant.
    J'essaierai avec les polynômes de Lagrange quand j'aurai le temps, pour voir ce que ça donne.

    @Foys : Oui, toutes les méthodes d'interpolation ont l'inconvénient qu'on ne peut pas garantir leur fiabilité sur une utilisation donnée. Donc je dois faire l'hypothèse que je suis dans un cas pratique où le pas $h$ de la subdivision est inférieur à l'échelle typique de variation de $f$. Dans ce cas, on n'est pas trop embêté par le problème que tu décris. Et puis, ce problème peut arriver à $h$ fixé, mais il n'empêche pas que $\hat f$ converge vers $f$ quand $h\to 0$.


  • Calli
    Modifié (December 2021)
    @marsup : J'ai essayé ton idée avec les polynômes de Lagrange. C'est très bon en fait, je suis étonné (cf. image jointe). En revanche, la courbe de $\hat f$ tracée finit par beaucoup s'éloigner de $f$. J'ai l'impression que c'est dû à des erreurs de calcul de l'ordinateur ; il a l'air d'avoir du mal à évaluer d'un polynôme de grand degré (même si dans mon exemple on a juste un polynôme de degré 18, avec des coefs d'au plus $10^7$ pour les monômes du milieu mais petits pour les autres monômes, qu'on évalue sur $[1,2]$... j'aurais pensé que Python était plus performant... ou bien je me suis planté ailleurs (?)...). Là je suis passé par le calcul des coefficients du polynôme interpolateur, mais peut-être qu'en faisant un calcul plus malin utilisant la formule explicite du polynôme interpolant $F$ (somme des polynômes de Lagrange élémentaires qui sont des produits) et la formule de dérivation d'un produit, on peut éviter ce problème. Je n'ai pas essayé.

  • Calli
    Modifié (December 2021)
    Du coup, ce que j'avais tenté au départ (et que j'évoque dans mon premier message) c'est de définir $\hat f(x_i)$ comme un barycentre de $\text{moyenne}_{[x_{i-1},x_i]} (f)$ et $\text{moyenne}_{[x_i,x_{i+1}]} (f)$ pondéré par les longueurs de $[x_{i-1},x_i]$ et $[x_i,x_{i+1}]$, ainsi : $$\forall i\in[\![2,n-1]\!], \qquad \hat f(x_i) := \frac{x_{i+1}-x_i}{x_{i+1}-x_{i-1}} \frac{F(x_i)-F(x_{i-1})}{x_i-x_{i-1}} + \frac{x_i-x_{i-1}}{x_{i+1}-x_{i-1}} \frac{F(x_{i+1})-F(x_i)}{x_{i+1}-x_i}$$ puis de poser : $\forall i\in[\![2,n-2]\!], \forall x\in [x_i,x_{i+1}],$ $$\hat f(x) := 6 \left( \frac{F(x_{i+1})-F(x_i)}{x_{i+1}-x_i} - \frac{\hat f(x_i)+\hat f(x_{i+1})}2 \right) \frac{(x-x_i)(x_{i+1}-x)}{(x_{i+1}-x_i)^2} + \hat f(x_i) \frac{x-x_{i+1}}{x_i-x_{i+1}} + \hat f(x_{i+1}) \frac{x-x_i}{x_{i+1}-x_i}$$ et on complète $\hat f$ sur $[x_1,x_2]$ et $[x_{n-1},x_n]$ par la méthode de Yves et marsup (par exemple). Les deux derniers termes de la formule ci-dessus assurent la continuité de $\hat f$ en $x_i$ et $x_{i+1}$, et le premier terme donne à $\int_{x_i}^{x_{i+1}} \hat f$ la bonne valeur. Le résultat est pas trop mal, mais on pourrait sûrement mieux choisir les $\hat f(x_i)$ pour éviter certains points anguleux, comme dans premier creux de l'image jointe.
    C'est pour ça que je me suis demandé s'il existait déjà des méthodes connues meilleures que ça.


  • Calli
    Modifié (December 2021)
    D'après l'idée de @marsup sur les polynômes de Lagrange, j'ai essayé de modifier la méthode quadratique présentée dans mon message précédent, en posant plutôt $\hat f(x_i)$ égal à la dérivée en $x_i$ de polynôme de Lagrange (de degré 4) qui interpole $F$ en $x_{i-2},x_{i-1},x_i,x_{i+1},x_{i+2}$ (lorsque $3\leqslant i\leqslant n-2$). Ce que je faisais avant revenait en fait à la même chose avec le polynôme de Lagrange de $F$ en $x_{i-1},x_i,x_{i+1}$, si je ne dis pas de bêtise. J'ai tracé le résultat en rouge ci-dessous, pour les mêmes données $(F,(x_i))$ que le précédent graphique, et en remettant en vert le $\hat f$ du message précédent. La nouvelle courbe de $\hat f$ est plus lisse et plus proche de celle de $f$ ; c'est plus satisfaisant.  :)


Connectez-vous ou Inscrivez-vous pour répondre.