Es wurde vorgeschlagen, dass dies ein besserer Ort für diese Frage sein könnte als Mathematics Stack Exchange, wo ich es zuvor gefragt habe .
Angenommen, man hat eine Black-Box-Funktion, die in einem bestimmten Intervall überall (kostengünstig) ausgewertet werden kann und kein Rauschen aufweist (mit Ausnahme beispielsweise der Gleitkommagranularität). Was wäre der beste Weg, um die Diskontinuitäten dieser Funktion zu finden? Ich weiß nicht, wie viele Diskontinuitäten es geben könnte und keine.
Ich kann mir einige einfache Methoden vorstellen (einheitliche Probenahme, Verfeinerung bei großen Unterschieden zwischen den Proben, ...), aber vielleicht gibt es einen besseren Weg?
Die Funktion ist "vernünftig", da man davon ausgehen könnte, dass sie höchstens endlich viele Diskontinuitäten aufweist, das gleiche gilt für höhere Ableitungen. Es macht mir nichts aus, wenn kleine pathologische Diskontinuitäten übersehen werden ... (die Anwendung zeichnet automatisch 1d-Funktionen) .
-
Vielen Dank an alle, die geantwortet haben, insbesondere an Pedro; Die in Pachón, Platte und Trefethen beschriebene Methode scheint der beste Ansatz für mich zu sein. Deshalb werde ich sie jetzt implementieren
Antworten:
Wenn Sie Matlab verwenden, sind Sie möglicherweise am Chebfun-Projekt interessiert . Chebfun nimmt eine Funktion, tastet sie ab und versucht, sie als Polynominterpolante darzustellen. Wenn Ihre Funktion Diskontinuitäten aufweist, sollte Chebfun diese mit dem
splitting on
Befehl erkennen können . Hier finden Sie einige Beispiele finden Sie hier .Wenn Sie sich für die zugrunde liegenden Algorithmen interessieren, ist Pachón, Platte und Trefethens Arbeit " Piecewise Smooth Chebfuns " eine gute Referenz .
quelle
Ich vermute, dass der Chebfun-Algorithmus praktischer erscheinen muss, aber es ist notwendig, einen weiteren Weg zur Erkennung von Diskontinuitäten zu erwähnen, nämlich die diskrete Wavelet-Transformation. Auf dieser Mathematica-Dokumentationsseite können Sie sich ein Bild davon machen, wie es funktioniert. Siehe Abschnitt> Anwendungen> Diskontinuitäten und Kanten erkennen.
quelle
Bei den WENO-Methoden (Weighted Essially Non-Oscillatory) werden "Glättungsindikatoren" verwendet, um Diskontinuitäten bei Methoden mit endlichem Volumen und Differenzen zu erkennen. Aus der Beschreibung von Chebfun, die Pedro gegeben hat, scheint die allgemeine Idee dieselbe zu sein: Konstruiere eine Menge interpolierender Polynome und benutze sie, um ein gewisses Maß an Glätte zu berechnen.
Siehe GS Jiang und CW Shu, Efficient Implementation of Weighted ENO Schemes, J. Comput. 126, S. 202-228, 1996.
quelle
Zusammen mit @Pedro würde ich mich mit Kantenerkennungsalgorithmen befassen. Eine Diskontinuität ist eine Unendlichkeit des Derivats. Betrachten Sie daher ein immer feiner werdendes Netz und die Zielregionen von Interesse.
Die endliche Differenzannäherung an die Ableitung einer stetigen Funktion sollte sich verringern, wenn das Netz verfeinert wird. Der Vergleich des Endlichdifferenzergebnisses für die Ableitung zwischen Maschen könnte dann Abweichungen im Gradienten aufdecken, die Diskontinuitäten signalisieren.
quelle