Hanya dua bagian pertama dari pertanyaan panjang ini yang penting. Yang lain hanya untuk ilustrasi.
Latar Belakang
Kuadratur maju seperti komposit tingkat tinggi Newton-Cotes, Gauß-Legendre, dan Romberg tampaknya terutama ditujukan untuk kasus-kasus di mana seseorang dapat mengambil sampel fungsi secara halus tetapi tidak berintegrasi secara analitis. Namun, untuk fungsi dengan struktur yang lebih halus daripada interval pengambilan sampel (lihat Lampiran A untuk contoh) atau noise pengukuran, mereka tidak dapat bersaing dengan pendekatan sederhana seperti titik tengah atau aturan trapesium (lihat Lampiran B untuk demonstrasi).
Ini agak intuitif karena, misalnya, aturan Simpson komposit pada dasarnya "membuang" seperempat informasi dengan menetapkan bobot yang lebih rendah. Satu-satunya alasan kuadratur semacam itu lebih baik untuk fungsi-fungsi yang cukup membosankan adalah penanganan efek perbatasan yang lebih baik daripada efek informasi yang dibuang. Dari sudut pandang lain, secara intuitif jelas bagi saya bahwa untuk fungsi dengan struktur atau noise yang halus, sampel yang jauh dari batas domain integrasi harus hampir sama dan memiliki bobot yang hampir sama (untuk jumlah sampel yang tinggi). ). Di sisi lain, kuadratur fungsi-fungsi tersebut dapat mengambil manfaat dari penanganan efek perbatasan yang lebih baik (daripada untuk metode titik tengah).
Pertanyaan
Asumsikan bahwa saya ingin secara numerik mengintegrasikan data satu dimensi yang bising atau terstruktur dengan baik.
Jumlah titik pengambilan sampel ditetapkan (karena evaluasi fungsi menjadi mahal), tetapi saya dapat dengan bebas menempatkannya. Namun, saya (atau metode) tidak dapat menempatkan titik pengambilan sampel secara interaktif, yaitu berdasarkan hasil dari titik pengambilan sampel lainnya. Saya juga tidak tahu daerah masalah potensial sebelumnya. Jadi, sesuatu seperti Gauß – Legendre (titik pengambilan sampel yang tidak sama) tidak apa-apa; quadrature adaptif bukan karena membutuhkan titik pengambilan sampel yang ditempatkan secara interaktif.
Apakah ada metode yang melampaui metode titik tengah yang disarankan untuk kasus seperti itu?
Atau: Apakah ada bukti bahwa metode titik tengah terbaik dalam kondisi seperti itu?
Secara umum: Apakah ada pekerjaan yang ada untuk masalah ini?
Lampiran A: Contoh spesifik dari fungsi terstruktur halus
Saya ingin memperkirakan untuk: dengan dan . Fungsi khas terlihat seperti ini:
Saya memilih fungsi ini untuk properti berikut:
- Ini dapat diintegrasikan secara analitis untuk hasil kontrol.
- Ini memiliki struktur yang bagus pada tingkat yang membuatnya tidak mungkin untuk menangkap semuanya dengan jumlah sampel yang saya gunakan ( ).
- Itu tidak didominasi oleh strukturnya yang halus.
Lampiran B: Tolok Ukur
Untuk kelengkapan, berikut adalah patokan dalam 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))
(Saya di sini menggunakan median untuk mengurangi pengaruh outlier karena fungsi yang hanya memiliki konten frekuensi tinggi. Untuk rata-rata, hasilnya serupa.)
Median kesalahan integrasi relatif adalah:
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
Catatan: Setelah dua bulan dan satu hadiah tanpa hasil, saya memposting ini di MathOverflow .