Il a été suggéré que cela pourrait être un meilleur endroit pour cette question que Mathematics Stack Exchange où je l'ai posée auparavant .
Supposons que l'on ait une fonction de boîte noire qui peut être évaluée n'importe où (à moindre coût) sur un intervalle spécifié et qu'il n'y ait pas de bruit (sauf la granularité à virgule flottante, par exemple). Quelle serait la meilleure façon de trouver les discontinuités de cette fonction? Je ne sais pas combien il pourrait y avoir de discontinuités et il n'y en a peut-être pas.
Je peux penser à quelques méthodes simples (échantillonnage uniforme, affiner là où il y a de grandes différences entre les échantillons, ...), mais peut-être y a-t-il une meilleure façon?
La fonction est "raisonnable" dans la mesure où l'on pourrait supposer qu'elle a au plus un nombre fini de discontinuités, de même pour les dérivés supérieurs, cela ne me dérange pas si de petites discontinuités pathologiques sont manquées ... (l'application est un traçage automatisé des fonctions 1d) .
-
Merci à tous ceux qui ont répondu, en particulier Pedro; la méthode décrite dans Pachón, Platte et Trefethen semble être la meilleure approche pour moi, donc je vais maintenant l'implémenter
Réponses:
Si vous utilisez Matlab, vous pourriez être intéressé par le projet Chebfun . Chebfun prend une fonction, l'échantillonne et essaie de la représenter comme un interpolant polynomial. Si votre fonction présente des discontinuités, Chebfun devrait être capable de les détecter avec la
splitting on
commande. Vous pouvez trouver quelques exemples ici .Si vous êtes intéressé par les algorithmes sous-jacents, une bonne référence est l'article de Pachón, Platte et Trefethen " Piecewise Smooth Chebfuns ".
la source
Je soupçonne que l'algorithme chebfun doit sembler plus pratique, mais il est nécessaire de mentionner une autre façon de détecter les discontinuités, à savoir la transformée en ondelettes discrète. Vous pouvez vous faire une idée de son fonctionnement en consultant cette page de documentation Mathematica , voir la section> Applications> Détecter les discontinuités et les arêtes.
En bref, vous pouvez prendre DWT deF
la source
Les méthodes pondérées essentiellement non oscillantes (WENO) utilisent des «indicateurs de lissage» pour détecter les discontinuités dans les méthodes de volume fini et de différence. D'après la description de Chebfun donnée par Pedro, il semble que l'idée générale soit la même: construire un ensemble de polynômes d'interpolation et les utiliser pour calculer une certaine mesure de lissage.
Voir GS Jiang et CW Shu, Efficient Implementation of Weighted ENO Schemes, J.Comput.Phys., Vol. 126, p. 202-228, 1996.
la source
Avec @Pedro, j'examinerais les algorithmes de détection des contours. Une discontinuité est un infini sur le dérivé, alors pensez à regarder un maillage de plus en plus fin et à cibler les régions d'intérêt.
L'approximation des différences finies à la dérivée d'une fonction continue devrait diminuer à mesure que le maillage est affiné. La comparaison du résultat de différence finie pour la dérivée entre les mailles pourrait alors révéler des divergences dans le gradient qui signalent des discontinuités.
la source