Interpolación, aproximación y similares (paquete alglib)

 

Necesito interpolar una función con ajustes arbitrarios, así que elegí splines.

This subroutine builds cubic spline interpolant.

INPUT PARAMETERS:
    X           -   spline nodes, array[0..N-1].
    Y           -   function values, array[0..N-1].

OPTIONAL PARAMETERS:
    N           -   points count:
                    * N>=2
                    * if given, only first N points are used to build spline
                    * if not given, automatically detected from X/Y sizes
                      (len(X) must be equal to len(Y))
    BoundLType  -   boundary condition type for the left boundary
    BoundL      -   left boundary condition (first or second derivative,
                    depending on the BoundLType)
    BoundRType  -   boundary condition type for the right boundary
    BoundR      -   right boundary condition (first or second derivative,
                    depending on the BoundRType)

OUTPUT PARAMETERS:
    C           -   spline interpolant

ORDER OF POINTS

Subroutine automatically sorts points, so caller may pass unsorted array.

SETTING BOUNDARY VALUES:

The BoundLType/BoundRType parameters can have the following values:
    * -1, which corresonds to the periodic (cyclic) boundary conditions.
          In this case:
          * both BoundLType and BoundRType must be equal to -1.
          * BoundL/BoundR are ignored
          * Y[last] is ignored (it is assumed to be equal to Y[first]).
    *  0, which  corresponds  to  the  parabolically   terminated  spline
          (BoundL and/or BoundR are ignored).
    *  1, which corresponds to the first derivative boundary condition
    *  2, which corresponds to the second derivative boundary condition
    *  by default, BoundType=0 is used

Entiendo correctamente que obtendré diferentes interpolantes por el número de puntos del nodo, ¿qué más puedo variar?

Y la segunda pregunta, ¿qué es mejor elegir para la interpolación de la lista, si sólo necesito construir muchas interpolaciones diferentes de la serie original (la variación es importante)

 
Maxim Dmitrievsky:

Necesito interpolar una función con ajustes arbitrarios, así que elegí splines.

Entiendo correctamente que obtendré diferentes interpolantes por el número de puntos del nodo, ¿qué más puedo variar?

Y la segunda pregunta, ¿qué es mejor elegir para la interpolación de la lista, si sólo necesito construir muchas interpolaciones diferentes de la serie original (la variación es importante)

Cuál es mejor elegir es una pregunta muy complicada. Un enfoque, denominado minimización empírica del riesgo, se desarrolla en el libro de Wapnick Algorithms and Dependency Recovery Programs. 1972, parece.

 
Vladimir:

Cuál es la mejor opción es una pregunta muy complicada. Un enfoque, denominado minimización empírica del riesgo, se desarrolla en el libro de Wapnick "Algorithms and programs for dependence reconstruction". Parece que estamos en 1972.

La maximización de la probabilidad/minimización del riesgo empírico, según tengo entendido, es sólo un nombre general para los algoritmos correspondientes. No necesito el algoritmo en sí, sólo necesito modificar las curvas, preferiblemente de forma rápida y variable, con posibilidad de encontrar valores interpolantes en nuevos puntos (el paquete spline permite esto último).

 
Para empezar, convendría entender qué es la interpolación.
 
Maxim Dmitrievsky:

La maximización de la probabilidad/minimización del riesgo empírico, según tengo entendido, es sólo un nombre general para los algoritmos correspondientes. No necesito el algoritmo en sí, sólo necesito modificar las curvas, preferiblemente rápido y variable, con posibilidad de encontrar valores interpolantes en nuevos puntos (el paquete spline permite esto último)

Tanto el método de máxima verosimilitud como el de minimización (recuerdo, no empírica, sino media) del riesgo son nombres no de algoritmos, sino de formas de fijación de objetivos en el planteamiento de problemas. Si el objetivo es alcanzable, da lugar a algún algoritmo que es necesariamente consistente con el objetivo, es una implementación de su logro en casos particulares. Si no se necesitan ni objetivos ni algoritmos para alcanzarlos, no se puede dar ningún consejo para la tarea de elegir funciones de interpolación. Te queda elegir como te dice tu corazón...

 
Ya veo, adivinar al azar tampoco está mal. Así que nadie ha resuelto problemas similares. Lo visualizaré y echaré un vistazo.
 
Maxim Dmitrievsky:

Necesito interpolar una función con ajustes arbitrarios, así que elegí splines.

Entiendo correctamente que obtendré diferentes interpolantes por el número de puntos del nodo, ¿qué más puedo variar?

Y la segunda pregunta, ¿qué debo seleccionar para la interpolación de la lista, si sólo necesito construir muchas interpolaciones diferentes de la serie inicial (la variabilidad es importante)?

Lo más valioso para un comerciante no es la interpolación ni la aproximación, sino la extrapolación.

Los splines no son adecuados para la extrapolación.

Tengo gran experiencia y comprensión en la aproximación-extrapolación de polinomios. Menos experiencia tiene Fourier.
La extrapolación por métodos polinómicos y de Fourier son de naturaleza completamente diferente. Laextrapolación de Fourier sólo puede aplicarse al mercado plano debido a su naturaleza periódica (esta línea es una suma de sinusoides de diferente frecuencia, fase y amplitud), y siempre tiende a retroceder,mientras que la extrapolación polinómica, por el contrario, es buena para la tendencia, ya que siempre intenta "volar hacia arriba" o hacia abajo debido a su naturaleza de grado.
Por lo tanto, tiene sentido combinar estos dos métodos para obtener buenos resultados de extrapolación.

La aproximación polinómica es de especial interés para los programadores porque este tipo de aproximación está muy bien optimizada y se puede calcular muy rápidamente. Conseguí salir de los ciclos para el cálculo de los coeficientes.
También es importante recordar que todos los tipos de aproximación crean líneas redibujables con cada nuevo punto. Sólo el trazador de la línea de aproximación no se redibuja.

Una aproximación polinómica sólo tiene una solución, a diferencia de una aproximación de Fourier. Esto permite la creación de diapositivas únicas no redibujables:

 
Maxim Dmitrievsky:
Ya veo, adivinar al azar tampoco está mal. Así que nadie ha resuelto problemas similares. Lo visualizaré, ya veré.

Nadie lo ha resuelto - mal. Todos los métodos de interpolación tienen su justificación teórica y suelen tener un objetivo claro. Por ejemplo, el defecto cúbico de dos splines minimiza la energía potencial de flexión elástica de una regla que pasa por los clavos clavados en la tabla en los nodos del spline. De este modo, se obtenía una curva suave (con un defecto inferior a 3) a partir de una tabla de puntos en un dibujo con el contorno de un barco o un perfil de ala. Las mismas splines representan la deflexión de una viga multisoporte en matemáticas resilientes. Para comparar los resultados de la interpolación con diferentes objetivos se necesita un objetivo generalizado, un criterio que sea calculable para cualquier método de interpolación. Se basa en el número de coeficientes que hay que determinar. A grandes rasgos, si una aproximación polinómica con un aumento del grado del polinomio de 3 a 7 reduce la suma de cuadrados de la desviación en un 20%, entonces el grado 3 es más razonable que el 7. El análogo en radiotecnia, si no me confundo, es la frecuencia de corte del filtro.

 
Nikolai Semko:

Lo más valioso para un operador no es la interpolación o la aproximación, sino la extrapolación.

Los splines no son adecuados para la extrapolación.

Tengo gran experiencia y comprensión en la aproximación-extrapolación de polinomios. Menos experiencia - Fourier.
La extrapolación por métodos polinómicos y de Fourier son de naturaleza completamente diferente. Laextrapolación de Fourier sólo puede aplicarse al mercado plano debido a su naturaleza periódica (esta línea es una suma de sinusoides de diferente frecuencia, fase y amplitud), y siempre tiende a retroceder,mientras que la extrapolación polinómica, por el contrario, es buena para la tendencia, ya que siempre intenta "volar hacia arriba" o hacia abajo debido a su naturaleza de grado.
Por lo tanto, tiene sentido combinar estos dos métodos para obtener buenos resultados de extrapolación.

La aproximación polinómica es de especial interés para los programadores porque este tipo de aproximación está muy bien optimizada y se puede calcular muy rápidamente. Conseguí salir de los ciclos para el cálculo de los coeficientes.
También es importante recordar que todos los tipos de aproximación crean líneas redibujables con cada nuevo punto. Sólo el trazador de la línea de aproximación no se redibuja.

Una aproximación polinómica sólo tiene una solución, a diferencia de una aproximación de Fourier. Esto permite la creación de diapositivas únicas no redibujables:

Eso está bien. No tengo nada que extrapolar, es la interpolación lo que se necesita. Quiero decir que no tiene sentido hacer una previsión en base a esa extrapolación. Es necesario que esta línea sea lo más fuerte posible, de lado a lado, como su línea azul. Y quiero poder obtener una solución en los nuevos puntos, sí (sin volver a calcular en base a la fórmula existente).

Así que sólo pregunté qué es mejor usar - polinomios o splines o alguna subespecie. Y quizás el décimo grado también sería divertido.

 
Vladimir:

Nadie lo ha resuelto: está mal. Todos los métodos de interpolación tienen su justificación teórica y suelen tener un objetivo claro. Por ejemplo, el defecto cúbico de dos splines minimiza la energía potencial de flexión elástica de una regla que pasa por clavos clavados en el tablero en los nodos del spline. De este modo, se obtenía una curva suave (con un defecto inferior a 3) a partir de una tabla de puntos en un dibujo con el contorno de un barco o un perfil de ala. Las mismas splines representan la deflexión de una viga multisoporte en matemáticas resilientes. Para comparar los resultados de la interpolación con diferentes objetivos se necesita un objetivo generalizado, un criterio que sea calculable para cualquier método de interpolación. Se basa en el número de coeficientes que hay que determinar. A grandes rasgos, si una aproximación polinómica con un aumento del grado del polinomio de 3 a 7 reduce la suma de cuadrados de la desviación en un 20%, entonces el grado 3 es más razonable que el 7. El análogo en radiotecnia, si no me confundo, es la frecuencia de corte del filtro.

Es que si me pongo a intentar explicar todo lo que voy a hacer con él, va a volver a tener unas cuantas páginas :) Se necesitan variaciones, diferentes grados de polinomios, número de puntos de la cuadrícula, etc.

 
Maxim Dmitrievsky:

Eso está bien. No tengo nada que extrapolar, es la interpolación lo que se necesita. En el sentido de que una previsión sobre tal extrapolación no tiene sentido hacerla después. Es necesario que esta línea sea lo más fuerte posible, de lado a lado, como la azul. Y quiero poder obtener una solución en los nuevos puntos, sí (sin volver a calcular en base a la fórmula existente).

Así que sólo pregunté qué es mejor usar - polinomios o splines o alguna subespecie. Y quizá el décimo grado también estaría bien.

¿Exactamente la interpolación? ¿Está seguro? ¿No es una aproximación? ¿Y no es redibujable?
No vas a interpolar cada tic.

Si necesita interpolación en los nodos intermedios (nodos ZigZag por ejemplo) sin redibujar, entonces todo el punto es dónde estará el siguiente nodo.

Sólo puedes crear un ZigZag claro no redibujable si tienes una máquina del tiempo. No hay manera de determinar sin una máquina del tiempo que la barra actual es un extremo.

Hay alguien en el foro que periódicamente llamo "cajón de sastre".

El punto es la cola de caballo.

Es un clásico de este género: desplazar la SMA hacia la izquierda medio periodo y terminar de dibujar esos medios periodos como si fuera un accidente con un polinomio de algún grado. Por ejemplo,https://www.mql5.com/ru/forum/224374. Probablemente ya lo haya visto.

Se puede hacer una interpolación muy bonita a lo largo de los extremos del zigzag con splines, pero hay que tener claro que entre los dos o tres últimos nodos habrá redibujo. ¡No hay manera sin ella!

Si no se redibuja, no es interpolación, sino lo que yo llamo un trazado de la línea de aproximación (¡no interpolación!).
Aparte de los polinomios, no veo nada comprensible hasta ahora.
Aquí hay un gif especialmente grabado para demostrar un ejemplo de polinomio de grado superior (10), para que se entienda que es mucho menos "bonito" de lo que me gustaría :))

La línea púrpura y azul no es redibujable. El púrpura es el polinomio "mirando hacia abajo", el azul es el polinomio "mirando hacia arriba".
Y no hay suficiente precisión para calcular polinomios de alto grado. Tendremos que utilizar bibliotecas especiales que utilicen tipos de mayor precisión. El hecho de que el "trazador" comience a "saltar" en pequeños periodos del gif, es la razón por la que el doble carece de precisión.
Pero personalmente no veo la aplicación práctica de los polinomios de grado superior a 5.

Razón de la queja: