Solo las dos primeras secciones de esta larga pregunta son esenciales. Los otros son solo para ilustración.
Antecedentes
Las cuadraturas avanzadas como Newton-Cotes, Gauß-Legendre y Romberg compuestos de mayor grado parecen estar destinadas principalmente a casos en los que se puede muestrear finamente la función pero no integrarse analíticamente. Sin embargo, para funciones con estructuras más finas que el intervalo de muestreo (ver Apéndice A para un ejemplo) o medición de ruido, no pueden competir con enfoques simples como el punto medio o la regla trapezoidal (ver Apéndice B para una demostración).
Esto es algo intuitivo ya que, por ejemplo, la regla compuesta de Simpson esencialmente "descarta" una cuarta parte de la información al asignarle un peso menor. La única razón por la cual tales cuadraturas son mejores para funciones suficientemente aburridas es que el manejo adecuado de los efectos de borde supera el efecto de la información descartada. Desde otro punto de vista, para mí es intuitivamente claro que para funciones con una estructura fina o ruido, las muestras que están alejadas de los límites del dominio de integración deben ser casi equidistantes y tener casi el mismo peso (para un gran número de muestras ) Por otro lado, la cuadratura de tales funciones puede beneficiarse de un mejor manejo de los efectos de borde (que para el método del punto medio).
Pregunta
Suponga que deseo integrar numéricamente datos unidimensionales ruidosos o bien estructurados.
El número de puntos de muestreo es fijo (debido a que la evaluación de la función es costosa), pero puedo ubicarlos libremente. Sin embargo, yo (o el método) no puedo colocar puntos de muestreo de forma interactiva, es decir, en función de los resultados de otros puntos de muestreo. Tampoco sé de antemano posibles regiones problemáticas. Entonces, algo como Gauß – Legendre (puntos de muestreo no equidistantes) está bien; la cuadratura adaptativa no lo es, ya que requiere puntos de muestreo colocados interactivamente.
¿Se ha sugerido algún método que vaya más allá del método del punto medio para tal caso?
O: ¿Hay alguna prueba de que el método del punto medio es mejor en tales condiciones?
Más en general: ¿Hay algún trabajo existente sobre este problema?
Apéndice A: ejemplo específico de una función bien estructurada
Deseo estimar para: cony. Una función típica se ve así:
Elegí esta función para las siguientes propiedades:
- Se puede integrar analíticamente para un resultado de control.
- Tiene una estructura fina en un nivel que hace que sea imposible capturarlo todo con la cantidad de muestras que estoy usando ( ).
- No está dominado por su fina estructura.
Apéndice B: Benchmark
Para completar, aquí hay un punto de referencia en Python:
import numpy as np
from numpy.random import uniform
from scipy.integrate import simps, trapz, romb, fixed_quad
begin = 0
end = 1
def generate_f(k,low_freq,high_freq):
ω = 2**uniform(np.log2(low_freq),np.log2(high_freq),k)
φ = uniform(0,2*np.pi,k)
g = lambda t,ω,φ: np.sin(ω*t-φ)/ω
G = lambda t,ω,φ: np.cos(ω*t-φ)/ω**2
f = lambda t: sum( g(t,ω[i],φ[i]) for i in range(k) )
control = sum( G(begin,ω[i],φ[i])-G(end,ω[i],φ[i]) for i in range(k) )
return control,f
def midpoint(f,n):
midpoints = np.linspace(begin,end,2*n+1)[1::2]
assert len(midpoints)==n
return np.mean(f(midpoints))*(n-1)
def evaluate(n,control,f):
"""
returns the relative errors when integrating f with n evaluations
for several numerical integration methods.
"""
times = np.linspace(begin,end,n)
values = f(times)
results = [
midpoint(f,n),
trapz(values),
simps(values),
romb (values),
fixed_quad(f,begin,end,n=n)[0]*(n-1),
]
return [
abs((result/(n-1)-control)/control)
for result in results
]
method_names = ["midpoint","trapezoid","Simpson","Romberg","Gauß–Legendre"]
def med(data):
medians = np.median(np.vstack(data),axis=0)
for median,name in zip(medians,method_names):
print(f"{median:.3e} {name}")
print("superimposed sines")
med(evaluate(33,*generate_f(10,1,1000)) for _ in range(100000))
print("superimposed low-frequency sines (control)")
med(evaluate(33,*generate_f(10,0.5,1.5)) for _ in range(100000))
(Aquí uso la mediana para reducir la influencia de los valores atípicos debido a funciones que solo tienen contenido de alta frecuencia. Por lo demás, los resultados son similares).
Las medianas de los errores de integración relativos son:
superimposed sines
6.301e-04 midpoint
8.984e-04 trapezoid
1.158e-03 Simpson
1.537e-03 Romberg
1.862e-03 Gauß–Legendre
superimposed low-frequency sines (control)
2.790e-05 midpoint
5.933e-05 trapezoid
5.107e-09 Simpson
3.573e-16 Romberg
3.659e-16 Gauß–Legendre
Nota: Después de dos meses y una recompensa sin resultado, publiqué esto en MathOverflow .