Se sugirió que este podría ser un mejor lugar para esta pregunta que Mathematics Stack Exchange, donde lo pregunté antes .
Supongamos que uno tiene una función de recuadro negro que puede evaluarse en cualquier lugar (a bajo costo) en un intervalo especificado y no tiene ruido (excepto la granularidad de punto flotante, por ejemplo). ¿Cuál sería la mejor manera de encontrar las discontinuidades de esta función? No sé cuántas discontinuidades puede haber y puede que no haya ninguna.
Puedo pensar en algunos métodos sencillos (muestreo uniforme, refinar donde hay grandes diferencias entre las muestras, ...), pero ¿tal vez hay una mejor manera?
La función es "razonable", ya que se podría suponer que tiene como máximo muchas discontinuidades, lo mismo para derivados más altos, no me importa si se pierden pequeñas discontinuidades patológicas ... (la aplicación es el trazado automático de funciones 1d) .
-
Gracias a todos los que respondieron, particularmente a Pedro; El método descrito en Pachón, Platte y Trefethen parece ser el mejor enfoque para mí, así que ahora voy a implementarlo
Respuestas:
Si está usando Matlab, puede estar interesado en el proyecto Chebfun . Chebfun toma una función, la muestra y trata de representarla como un interpolante polinómico. Si su función tiene discontinuidades, Chebfun debería poder detectarlas con el
splitting on
comando. Puedes encontrar algunos ejemplos aquí .Si está interesado en los algoritmos subyacentes, una buena referencia es el artículo de Pachón, Platte y Trefethen " Piecewise Smooth Chebfuns ".
fuente
Sospecho que el algoritmo chebfun debe parecer más práctico, pero es necesario mencionar una forma más de detectar discontinuidades, a saber, la transformada de wavelet discreta. Puede hacerse una idea de cómo funciona mirando esta página de documentación de Mathematica , consulte la sección> Aplicaciones> Detectar discontinuidades y bordes.
fuente
Los métodos ponderados esencialmente no oscilatorios (WENO) utilizan "indicadores de suavidad" para detectar discontinuidades en el volumen finito y los métodos de diferencia. Según la descripción de Chebfun que dio Pedro, parece que la idea general es la misma: construir un conjunto de polinomios interpoladores y usarlos para calcular alguna medida de suavidad.
Ver GS Jiang, y CW Shu, Implementación eficiente de esquemas ponderados de ENO, J.Comput.Phys., Vol. 126, págs. 202-228, 1996.
fuente
Junto con @Pedro, vería los algoritmos de detección de bordes. Una discontinuidad es un infinito en la derivada, así que considere mirar una malla cada vez más fina y apuntar a las regiones de interés.
La aproximación de diferencia finita a la derivada de una función continua debería reducirse a medida que se refina la malla. La comparación del resultado de diferencia finita para la derivada entre mallas podría revelar divergencias en el gradiente que indican discontinuidades.
fuente