6 votes

La distance la plus courte entre un point et cette courbe

Je dois trouver la distance de plusieurs points à une courbe de la forme : f(x) = a^(k^(bx))

Ma première option était d'utiliser sa dérivée, en utilisant une ligne de la forme de l'inverse de la dérivée, en lui donnant les coordonnées de la Point et l'intersecter avec la courbe originale. Enfin, nous calculons la distance entre les points à l'aide d'une géométrie simple.

C'est le processus mathématique que je suis habituellement. Je dois gagner du temps (puisque je fais un programme d'algorithmes génétiques) et j'ai donc besoin d'un moyen efficace de le faire. Des idées ?

4voto

zmbq Points 18714

La distance entre un point (c,d) et votre courbe est le minimum de la fonction

sqrt((c-x)^2 + (d-a^(k^(bx)))^2)

Pour trouver son minimum, on peut oublier le sqrt et regardez la dérivée première. Déterminez où elle est égale à 0 (il doit s'agir de la distance minimale, car il n'y a pas de distance maximale). Cela vous donne la coordonnée x du point le plus proche sur la courbe. Pour obtenir la distance, vous devez calculer la coordonnée y, puis la distance au point (vous pouvez simplement calculer la fonction de distance à cet endroit). x c'est la même chose).

Répétez l'opération pour chacun de vos points.

La dérivée première de la fonction de distance, est, malheureusement, une sorte de garce. En utilisant Le dérivateur de Wolfram le résultat est Avec un peu de chance, (si je n'ai pas fait d'erreur de copie) :

dist(x)/dx = 2(b * lna * lnk * k^(bx) * a^(k^(bx)) * (a^(k^(bx)) - d) - c + x)

0voto

Ph0en1x Points 2955

Pour trouver la distance d'un point à une courbe, ce n'est pas une tâche simple, pour cela vous devez trouver la globale de la fonction enter image description here où f(x) est la fonction qui détermine votre courbe.

Pour cet objectif, vous pourriez utiliser :
Méthode simplex
Méthode Nelder_Mead_method
gradient_descent

Ces méthodes sont mises en œuvre dans de nombreuses bibliothèques comme Fondation Solver , NMath etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X