Recherche de valeur d'intersection entre 2 courbes - Nouveau

Bonjour

voir sur le lien ci joint je cherche a trouver en automatique la valeur de l'intersection entre 2 courbes qui sont dessinés par des valeurs (2 listes de valeurs)

ici 7 m environ pour une machine

merci de votre aide

Bonjour & bienvenue sur le forum,

On peut utiliser une approximation linéaire via formules, en extrapolant les valeurs sur un plus grand échantillon (via Fonctions PREVISION et FORECAST.LINEAR - Support Microsoft). Ci-joint une proposition et ci-après la formule en question :

=LET(_x1;Table1[X1];_x2;Table1[X2];
_y1;Table1[Y1];_y2;Table1[Y2];
_xmin; MAX(MIN(_x1);MIN(_x2));
_xmax; MIN(MAX(_x1);MAX(_x2));
_p; 500;
_newI; SEQUENCE(_p);
_newX; MAP(_newI;LAMBDA(_i; (_xmax - _xmin)*_i/_p));
_newY1; PREVISION.LINEAIRE(_newX;FILTRE(_y1;(_x1>=_xmin)*(_x1<=_xmax));FILTRE(_x1;(_x1>=_xmin)*(_x1<=_xmax)));
_newY2; PREVISION.LINEAIRE(_newX;FILTRE(_y2;(_x2>=_xmin)*(_x2<=_xmax));FILTRE(_x2;(_x2>=_xmin)*(_x2<=_xmax)));
_iInter; EQUIVX(0; _newY1 - _newY2; -1; 1);
MOYENNE(INDEX(_newX; ASSEMB.H(_iInter; _iInter + 1))))

Pour info : la valeur _p à 500 indique la finesse de la recherche, plus il est élevé et plus on se rapproche d'une bonne approximation. Après vu qu'on part de 3 points tout reste très relatif...

Dispo si vous voulez des explications sur le calcul.

Merci beaucoup pour la réponse
je viens de faire quelques tests et ca marche plutot bien
en revanche quelques fois je ne suis pas tres juste
me conseillez vous de rajouter des valeurs dans ma courbe pour la rendre plus previsible ?

Exemple avec les valeurs suivantes :

le resultat est plutot de 6 alors que le resultat de la formule donne 5,076

- 8,0 - 4,0
6,0 6,9 6 7,0
14,0 4,6 12,0 12,2
19,5 1,3

La formule part d'une approximation LINÉAIRE entre chaque point. Or la courbe n'est pas trop linéaire en réalité. Si vous avez la possibilité d'ajouter plus de points cela permettrait d'augmenter grandement la précision oui.

NOTA : on pourrait aussi faire d'autres approximations mais c'est plus complexe, et surtout il faudrait savoir quel type d'approximation appliquer (si vous avez la formule théorique peut peut-être entre abscisses et ordonnées) ? Linéaire, quadratique/polynomiale, exponentielle, logarithmique... ?

bonjour Yvan Seccia, salut Saboh12617 ,

@Saboh12617, je pense qu'il y a une erreur dans votre formule, mais je ne connais pas assez des nouvelles formules "LET" pour cela. J'ai commencé avec -newY1, mais, c'est un bordelle. Bon, colonne S:T sont _NewX et NewY2 et la courbe rouge du graphique montre qu'elle ne correspond pas à l'original Y2 ! On a la même chose avec Y1 et _newY1. Donc l'intersection sera aussi fausse.

Colonne W:X sont les interpolations comme moi je les calcule et Y3 est l'intersection. Bon, maintenant, il faut les intégrer dans ta formule "LET" ... . J'ai ajouté ces 2 colonnes au graphique et c'est un match à 100%

Salut @Bart, merci pour ton retour !

Effectivement j'avais un gros problème dans ma formule initiale, je faisais l'approx sur toute la courbe. En suivant ton découpage entre chaque points, on a de bien meilleurs résultats. Ci-après une révision en formule unique qui reprend ton idée du OFFSET (mais pour éviter OFFSET couteux, j'ai utilisé INDEX+SEQUENCE de 2).

=LET(
    _x1; Table1[X1];
    _y1; Table1[Y1];
    _x2; Table1[X2];
    _y2; Table1[Y2];
    _x1c; TRIERPAR(FILTRE(_x1; _y1<>""); FILTRE(_x1; _y1<>""); 1);
    _y1c; TRIERPAR(FILTRE(_y1; _y1<>""); FILTRE(_x1; _y1<>""); 1);
    _x2c; TRIERPAR(FILTRE(_x2; _y2<>""); FILTRE(_x2; _y2<>""); 1);
    _y2c; TRIERPAR(FILTRE(_y2; _y2<>""); FILTRE(_x2; _y2<>""); 1);
    _xmin; MAX(MIN(_x1c); MIN(_x2c));
    _xmax; MIN(MAX(_x1c); MAX(_x2c));
    _p; 500;
    _newX; _xmin + SEQUENCE(_p+1; 1; 0;(_xmax-_xmin)/_p);
    _n1; LIGNES(_x1c);
    _newY1;
      MAP(_newX; LAMBDA(x;
        LET(k; MIN(EQUIVX(x; _x1c;-1); _n1-1);
          PREVISION.LINEAIRE(x; INDEX(_y1c; k+SEQUENCE(2;;0)); INDEX(_x1c; k+SEQUENCE(2;;0)))
        ))
      );
    _n2; LIGNES(_x2c);
    _newY2;
      MAP(_newX; LAMBDA(x;
        LET(k; MIN(EQUIVX(x; _x2c; -1); _n2-1);
          PREVISION.LINEAIRE(x; INDEX(_y2c; k+SEQUENCE(2;;0)); INDEX(_x2c; k+SEQUENCE(2;;0)))
        ))
      );
    _delta; ABS(_newY1-_newY2);
    INDEX(_newX; EQUIVX(MIN(_delta); _delta; 0))
)

re,

amaai, quelle formule, ce soir, j'essayerai de trouver une formule pour des versions <=2019 oubien une fonction personnalisée (VBA) ...

Si ça peut te rassurer j'ai vraiment calqué ton processus, simplement en utilisant MAP (qui donne _newY1 et _newY2) pour ne pas avoir à "tirer vers le bas" les formules.

Le reste n'a pas trop bougé (filtre des valeurs valides déplacé en amont et révision du calcul des _newX pour gérer cas début <>0).

J'étais en train de réfléchir à un algo pour utiliser d'autres approximations que PREVISION.LINEAIRE, mais c'est un peu casse-tête avec si peu de points... Si t'arrives à mettre une approximation quadratique dans le VBA je pense qu'on pourrait augmenter encore un peu la précision.

Rechercher des sujets similaires à "recherche valeur intersection entre courbes nouveau"