Apenas as duas primeiras seções desta longa questão são essenciais. Os outros são apenas para ilustração.
fundo
Quadraturas avançadas, como Newton-Cotes, Gauß-Legendre e Romberg, parecem ser principalmente destinadas a casos em que é possível provar a função com precisão, mas não integrar analiticamente. No entanto, para funções com estruturas mais finas que o intervalo de amostragem (consulte o Apêndice A, por exemplo) ou ruído de medição, elas não podem competir com abordagens simples, como a regra do ponto médio ou trapézio (consulte o Apêndice B para uma demonstração).
Isso é um pouco intuitivo, pois, por exemplo, a regra composta de Simpson essencialmente "descarta" um quarto da informação, atribuindo-lhe um peso menor. A única razão pela qual essas quadraturas são melhores para funções suficientemente chatas é que o manuseio adequado dos efeitos de borda supera o efeito das informações descartadas. De outro ponto de vista, é intuitivamente claro para mim que, para funções com uma estrutura ou ruído fino, as amostras que estão distantes das fronteiras do domínio de integração devem ser quase equidistantes e ter quase o mesmo peso (para um grande número de amostras). ) Por outro lado, a quadratura de tais funções pode se beneficiar de uma melhor manipulação dos efeitos de borda (do que no método do ponto médio).
Questão
Suponha que eu desejo integrar numericamente dados unidimensionais ruidosos ou bem estruturados.
O número de pontos de amostragem é fixo (devido à avaliação da função ser cara), mas posso colocá-los livremente. No entanto, eu (ou o método) não posso colocar pontos de amostragem interativamente, ou seja, com base nos resultados de outros pontos de amostragem. Também não conheço regiões com problemas em potencial de antemão. Então, algo como Gauß – Legendre (pontos de amostragem não equidistantes) está bem; A quadratura adaptativa não é uma vez que requer pontos de amostragem colocados interativamente.
Algum método além do método do ponto médio foi sugerido para esse caso?
Ou: Existe alguma prova de que o método do ponto médio é melhor nessas condições?
De maneira mais geral: existe algum trabalho existente sobre esse problema?
Apêndice A: Exemplo específico de uma função bem estruturada
Desejo estimar para: come. Uma função típica é assim:
Eu escolhi essa função para as seguintes propriedades:
- Pode ser integrado analiticamente para obter um resultado de controle.
- Ele possui uma estrutura fina em um nível que torna impossível capturar tudo isso com o número de amostras que estou usando ( ).
- Não é dominado por sua estrutura fina.
Apêndice B: Referência
Para completar, eis uma referência no 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))
(Utilizo aqui a mediana para reduzir a influência de valores discrepantes devido a funções que possuem apenas conteúdo de alta frequência. Para a média, os resultados são semelhantes.)
As medianas dos erros relativos de integração são:
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: Após dois meses e uma recompensa sem resultado, publiquei isso no MathOverflow .