คำถามสองข้อแรกเท่านั้นที่มีความสำคัญ อื่น ๆ เป็นเพียงภาพประกอบ
พื้นหลัง
สี่เหลี่ยมจัตุรัสขั้นสูงเช่นคอมโพสิตระดับสูงกว่านิวตัน –Cotes, Gauß – Legendre และ Romberg ส่วนใหญ่จะมีไว้สำหรับกรณีที่หนึ่งสามารถตัวอย่างฟังก์ชั่นอย่างละเอียด แต่ไม่รวมการวิเคราะห์ อย่างไรก็ตามสำหรับฟังก์ชั่นที่มีโครงสร้างที่ดีกว่าช่วงเวลาการสุ่มตัวอย่าง (ดูภาคผนวก A สำหรับตัวอย่าง) หรือเสียงการวัดพวกเขาไม่สามารถแข่งขันด้วยวิธีง่าย ๆ เช่นกฎกึ่งกลางหรือกฎสี่เหลี่ยมคางหมู (ดูภาคผนวก B สำหรับการสาธิต)
สิ่งนี้ค่อนข้างใช้งานง่ายเช่นกฎคอมโพสิตของซิมป์สันนั้น“ ทิ้ง” หนึ่งในสี่ของข้อมูลโดยการกำหนดน้ำหนักให้ต่ำลง เหตุผลเดียวที่ทำให้รูปสี่เหลี่ยมจัตุรัสดังกล่าวดีกว่าสำหรับฟังก์ชั่นที่น่าเบื่ออย่างเพียงพอนั่นคือการจัดการผลกระทบของเส้นขอบอย่างเหมาะสมนั้นมีมากกว่าผลกระทบของข้อมูลที่ถูกทิ้ง จากมุมมองอื่นมันชัดเจนสำหรับฉันว่าสำหรับฟังก์ชั่นที่มีโครงสร้างหรือเสียงที่ดีตัวอย่างที่อยู่ห่างจากชายแดนของโดเมนการรวมจะต้องมีระยะเวลาเท่ากันและมีน้ำหนักเกือบเท่ากัน (สำหรับตัวอย่างจำนวนมาก ) ในทางกลับกันการสร้างพื้นที่สี่เหลี่ยมจัตุรัสของฟังก์ชั่นดังกล่าวอาจได้รับประโยชน์จากการจัดการผลกระทบชายแดนที่ดีกว่า
คำถาม
สมมติว่าฉันต้องการรวมข้อมูลที่มีโครงสร้างแบบมิติเดียวที่มีเสียงดังหรือแบบละเอียด
จำนวนของจุดสุ่มตัวอย่างได้รับการแก้ไข (เนื่องจากการประเมินฟังก์ชั่นมีราคาแพง) แต่ฉันสามารถวางมันได้อย่างอิสระ อย่างไรก็ตามฉัน (หรือวิธีการ) ไม่สามารถวางจุดสุ่มตัวอย่างแบบโต้ตอบเช่นขึ้นอยู่กับผลลัพธ์จากจุดสุ่มตัวอย่างอื่น ๆ ฉันยังไม่ทราบภูมิภาคที่มีปัญหาที่อาจเกิดขึ้นก่อน ดังนั้นบางอย่างเช่นGauß – Legendre (จุดสุ่มตัวอย่างที่ไม่เท่ากัน) ก็โอเค การสร้างพื้นที่สี่เหลี่ยมจัตุรัสปรับตัวไม่ได้เนื่องจากต้องการจุดสุ่มตัวอย่างแบบโต้ตอบ
มีวิธีการใดที่นอกเหนือไปจากวิธีการจุดกึ่งกลางที่เสนอสำหรับกรณีเช่นนี้หรือไม่?
หรือ: มีข้อพิสูจน์ว่าวิธีการจุดกึ่งกลางดีที่สุดภายใต้เงื่อนไขดังกล่าวหรือไม่?
โดยทั่วไป: มีงานใดที่มีปัญหานี้หรือไม่
ภาคผนวก A: ตัวอย่างที่เฉพาะเจาะจงของฟังก์ชั่นปรับโครงสร้าง
ฉันต้องการประมาณ for: กับและ[1,1000] ฟังก์ชั่นทั่วไปมีลักษณะเช่นนี้:
ฉันเลือกฟังก์ชั่นนี้สำหรับคุณสมบัติต่อไปนี้:
- สามารถบูรณาการเชิงวิเคราะห์เพื่อให้ได้ผลลัพธ์การควบคุม
- มันมีโครงสร้างที่ดีในระดับที่ทำให้ไม่สามารถจับภาพทั้งหมดด้วยจำนวนตัวอย่างที่ฉันใช้ ( )
- มันไม่ได้ถูกครอบงำด้วยโครงสร้างที่ดี
ภาคผนวก B: เกณฑ์มาตรฐาน
เพื่อความสมบูรณ์นี่คือมาตรฐานใน 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))
(ฉันที่นี่ใช้ค่ามัธยฐานเพื่อลดอิทธิพลของค่าผิดปกติเนื่องจากฟังก์ชั่นที่มีเนื้อหาความถี่สูงเท่านั้นสำหรับค่าเฉลี่ยผลลัพธ์จะคล้ายกัน)
ค่ามัธยฐานของข้อผิดพลาดการรวมสัมพัทธ์คือ:
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
หมายเหตุ: หลังจากสองเดือนและอีกหนึ่งรางวัลโดยไม่ต้องส่งผลให้ผมโพสต์เกี่ยวกับเรื่องนี้ MathOverflow