Extrapolation de point

Le problème exposé dans ce sujet a été résolu.

Salut,

Je cherches un peu de renseignement pour implémenter une extrapolation de point en C++.
En effet, je dispose d’un nuage de point relevé à partir de capteur et j’aimerai le formaliser sous forme de courbe. Pour cela je les ai groupés par pairs (abscisse, ordonnée) et insérés dans une map pour les trier. Ensuite j’ai relier les points que je possèdais par interpolation linéaire. Dans un premier temps ça convenais mais j’ai maintenant besoin d’aller plus loin, j’ai besoin de point qui sont en dehors de l’intervalle mesurée.
Je pensais donc approcher la forme de la courbe mesurée avec une équation et trouver les coefficients, cependant je ne sais pas comment savoir quelle forme d’équation approche ma courbe.

Voici donc mes questions :
- Y a-t-il des méthodes (mathématiques) pour déduire une forme d’équation à partir de point ?
- Y a-t-il d’autres méthodes pour l’extrapolation ?

Merci d’avance pour les pistes que vous pourriez m’avancer :)

Il faut plus de contexte. Tu parles d’un nuage de point obtenu par un capteur.

  • Si tu observes un phénomène physique connu, la meilleure manière est de faire correspondre ta courbe expérimentale au modèle théorique.
  • Si tu n’as pas de modèle à priori, tu peux regarder du cote des méthodes d’interpolations (comme les polynômes de Lagrange ou encore pes réseaux de neurone,…) et appliquer cette fonction à ton nouveau point.
+0 -0

Comme dit par Davidbrcz si tu as un modèle utilise le pour produire tes points intermédiaires.
Sinon niveau interpolation tu as pas mal de méthodes, tu peux approximer la courbe à l’aide d’un polynôme (polynômes de Lagrange/Hermite/Tchebitchev/…) mais si tu as beaucoup de points il aura un ordre très haut et va beaucoup osciller. Ou bien tu as les splines (cubiques) l’idée est que tu approximes un petit nombre de point à l’aide d’un polynôme et tu imposes des conditions pour coller toutes tes approximations ensemble.

Merci pour les réponses,

Il doit en effet exister un modèle pour mon phénomène, liant pression et débit, mais j’aurais aimé que ma classe soit générique, qu’elle ne résout pas seulement mon problème :/
C’est vrai que ça a l’air d’être la méthode la plus sensé, je vais peut-être donc trouver ce modèle et me servir des spécialisations de classe pour l’implémenter.

Sinon vous parlez d’interpolation polynomiale, ça ne me semble pas convenir à mon problème d’extrapolation, ou bien il faut m’expliquer comment ça marche :euh:
En ce qui concerne les splines, je connaissais pas, je vais me renseigner, j’ai l’impression que ça pourrais convenir si j’arrive à comprendre

+0 -0

le principe de l’interpolation polynomiale c’est de trouver un polynôme dont la courbe passe par tes points (de même pour les splines), tu peux ensuite évaluer ce polynôme en un autre point pour avoir une approximation de la valeur de ta fonction en cet autre point.
En résumé interpolation = "modéliser", ce qui te permet ensuite d’extrapoler = "prédire".

Je ne comprends pas ce qui te manque. Si ton interpolation linéaire est bonne, pourquoi ne pas l’extrapoler hors du domaine testé expérimentalement ? À partir du moment où tu as une équation de droite, c’est techniquement possible.

Rien ne dis que la droite soit le bon modèle en dehors de la zone testé, mais techniquement, il n’y a aucun soucis.


Pour la généralisation, je ne suis pas sûr que ce que tu souhaites soit possible. Tu souhaites partant d’un nuage de point quelconque, trouver une bonne courbe qui interpole tout ça. Tu peux passer par des polynôme, mais si le bon modèle n’est pas un polynôme, c’est raté. Et si le nuage est parfaitement aléatoire, tu risques de trouver une interpolation sur du bruit (pas bon). Les obstacles sont très nombreux (et je ne parle même pas d’extrapolation).

Pour autant que je sache, trouver une bonne courbe à partir d’un nuage de point se fait encore aujourd’hui beaucoup au jugé (au pifomètre, donc) à l’aide de l’expérience accumulée.

+0 -0

Désolé, je me suis mal exprimé apparemment, mon interpolation linéaire se fait entre les points, 2 à 2, pour pouvoir trouver une ordonnée entre 2 points connus, il ne s’agit pas d’une interpolation globale qui me donnerait une droite en modèle.

Pour info, dans mon cas, le modèle est une racine carré.

Très bien, je pensais que je ne connaissais juste pas les outils pour le faire. Merci encore pour vos aides, je pense que je vais partir sur de la spécialisation, dont probablement la spécialisation de lagrange.

Très bien, je pensais que je ne connaissais juste pas les outils pour le faire. Merci encore pour vos aides, je pense que je vais partir sur de la spécialisation, dont probablement la spécialisation de lagrange.

leroivi

Je connais pas la "spécialisation" de Lagrange, mais si tu parles d’interpoler avec des polynômes de Lagrange puis évaluer à l’extérieur, ce sera mauvais (à moins d’un gros coup de bol).

Pour info, dans mon cas, le modèle est une racine carré.

J’imagine que tu veux dire la théorie plutôt que le modèle (la théorie étant la relation entre les observations et le modèle). Si tu as une théorie, inverse-là pour en déduire un modèle qui colle aux observations (donc extrapoler en dehors de ta courbe). C’est la façon propre de faire ce que tu veux. Pas de théorie, pas d’inversion. Pas d’inversion, pas d’extrapolation.

Je connais pas la "spécialisation" de Lagrange, mais si tu parles d’interpoler avec des polynômes de Lagrange puis évaluer à l’extérieur

adri1

Oui c’était un raccourci pour dire la spécialisation de ma classe qui utilisera l’interpolation de lagrange pour modéliser ma courbe.

ce sera mauvais (à moins d’un gros coup de bol).

adri1

Ah ok.

Pas de théorie, pas d’inversion. Pas d’inversion, pas d’extrapolation.

adri1

Pas de palais, pas de palais. :D
oui il s’agit de la théorie. Que veux-tu dire par inversion ? moi je pensais juste calculer les coefficients dans mon système surdéterminé puis faire une moyenne ou un médian ou un moindre carré ou quelque chose comme ça pour trouver des coefficients approchant l’ensemble des points et garder ces coefficients pour trouver mon point extrapolé.

moi je pensais juste calculer les coefficients dans mon système surdéterminé puis faire une moyenne ou un médian ou un moindre carré ou quelque chose comme ça pour trouver des coefficients approchant l’ensemble des points et garder ces coefficients pour trouver mon point extrapolé.

Inversion est juste la façon courte d’exprimer le fait qu’on trouve des coefficients à partir d’observations et d’une théorie (quelque soit la façon dont on se sert pour inverser, que ce soit par moindre carrée, Monte Carlo ou autre). Il y a toute un pan des mathématiques qui s’y intéresse : les méthodes inverses.

Aaaaaaaaaaarg :

De manière générale l’extrapolation sans modèle théorique c’est impossible, et ça donne des résultats pourris. Mais parmi les différentes (mauvaises) options testables, il y en a des pires que d’autres…

De manière générale l’interpolation est la pire. Ensuite vient l’ajustement polynomiale.

Et enfin la seul bonne solution est l’ajustement du modèle théorique (qui n’est toujours pas la panachée ceci dit, disons que ça dépend vraiment des cas) .

L’interpolation (ou mieux spline cubique si possible) c’est très très bien (quand c’est bien fait) pour évaluer entre les points. Mais ça a une fâcheuse tendance à être incontrôlable hors des points expérimentaux, donc pour interpoler c’est vraiment une très très mauvaise idée.

L’ajustement d’un polynôme de degré bien choisi peut être une solution de secours, notamment si tu sais que tu n’as pas de gros changement de pente dans ta fonction (dérivée seconde assez cool). Dans tous les cas cette extrapolation ne pourra être utilisée que dans le voisinage des points limite de ton domaine.

Et finalement la bonne solution : ajuster le modèle théorique (ici une raciné carré d’après ce que tu dis).

Il y a plein de libraire avec des algo qui font ça, tu donnes ton nuage de point, la fonction que tu veux ajuster et tadammmm.

Niveau vocabulaire, "ajustement" c’est "fit/fitting" en anglais.

En l’occurrence développer un petit programme qui ajuste des racines carrés c’est pas hyper compliqué : ça reviens à ajuster par une droite (avec cette méthode : https://fr.wikipedia.org/wiki/M%C3%A9thode_des_moindres_carr%C3%A9s) tes données élevées au carré.

+0 -0

En l’occurrence développer un petit programme qui ajuste des racines carrés c’est pas hyper compliqué : ça reviens à ajuster par une droite (avec cette méthode : https://fr.wikipedia.org/wiki/M%C3%A9thode_des_moindres_carr%C3%A9s) tes données élevées au carré.

Vael

Petite remarque en passant. Si tu ajustes aux moindres carrés tes données au carré, tu vas minimiser le carré de l’erreur et pas l’erreur… Ce qui peut être gênant en fonction du degré de précision que tu souhaites. Il est préférable d’utiliser une méthode spécifique du type moindres carrés non linéaires.

@Aabu : ah ouai ! J’y avais jamais pensé. Du coup même "problème" quand on ajuste une exponentielle (en utilisant les moindres carrés sur des données au logarithme pour ajuster une droite affine) !

@elegance : j’avais jamais entendu le terme overfitting mais c’est exactement ça.

L’image de wiki est très parlante sur l’utilisation à mauvais escient de l’interpolation :

interpolation

Ici c’est tellement mal utilisé que c’est même pas possible de s’en servir pour évaluer dans le domaine définis par les points. Et en supposant que le modèle noir est le modèle exact aucune interpolation n’aurait de sens.

+0 -0

En fait, de manière générale, l’interpolation ne sert qu’à relier entre eux de manière plus ou moins complexe des points avec une erreur de mesure négligeable. Toutes les méthodes d’interpolation tombent juste sur les données, par définition.

Dès qu’on a des erreurs de mesure ou des variables non maîtrisées, c’est de l’ajustement (fitting).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte