ข้ามไปยังเนื้อหาหลัก

อธิบายควอดราเจอร์: วิธีเชิงตัวเลขสำหรับการประมาณค่าอินทิกรัล

ทำความเข้าใจว่าควอดราเจอร์คืออะไร วิธีอินทิเกรตเชิงตัวเลขประมาณค่าอินทิกรัลจำกัดอย่างไร และวิธีการอย่างกฎคางหมู กฎของซิมป์สัน และควอดราเจอร์แบบเกาส์ทำงานอย่างไร
อัปเดตแล้ว 16 ต.ค. 2569  · 10 นาที อ่าน

สำรวจด้วย AI

ChatGPTClaudePerplexity

มีอินทิกรัลจำกัดบางประเภทที่คำนวณด้วยแคลคูลัสบนกระดาษอย่างไรก็ไม่ยอมออกผล ไม่ใช่เพราะทำผิดอะไร เพียงแต่ฟังก์ชันบางตัว เช่น e^(−x²) หรือ sin(x)/x ไม่มีปริพันธ์ปริยายในรูปปิดเลย เมื่อเป็นเช่นนั้น ต้องเปลี่ยนวิธีคิด: ประเมินค่าฟังก์ชันที่จุดไม่กี่จุดที่เลือกอย่างระมัดระวัง แล้วรวมค่าเหล่านั้นเพื่อประมาณพื้นที่ใต้กราฟ นั่นคือควอดราเจอร์

บทความนี้อธิบายว่าควอดราเจอร์คืออะไร กรอบวิธีทั่วไปทำงานอย่างไร และวิธีหลักๆ ตั้งแต่กฎจุดกึ่งกลางที่เข้าใจง่ายไปจนถึงวิธีเกาส์ที่แม่นยำอย่างน่าประหลาดใจ นอกจากนี้ยังครอบคลุมวิธีเชิงประกอบ แหล่งที่มาของความคลาดเคลื่อน กลยุทธ์แบบปรับตัว และแนวทางเลือกวิธีให้เหมาะกับปัญหาที่อยู่ตรงหน้า

ควอดราเจอร์คืออะไร?

คำว่า "ควอดราเจอร์" มีที่มาช้านาน มาจากปัญหาเรขาคณิตคลาสสิกของการสร้างสี่เหลี่ยมจัตุรัสที่มีพื้นที่เท่ากับรูปทรงที่กำหนด ซึ่งก็เท่ากับการ "หาพื้นที่" ในปัจจุบัน คำนี้หมายถึงการประมาณค่าอินทิกรัลจำกัดด้วยวิธีเชิงตัวเลข

แก่นไอเดียคือการแทนที่: แทนที่จะหาปริพันธ์ปริยายแบบ exact ให้ทำการสุ่มตัวอย่างฟังก์ชัน f(x) ที่ชุดจุดซึ่งเรียกว่าโหนด แล้วคูณแต่ละค่าด้วยน้ำหนักที่กำหนด จากนั้นรวมผลลัพธ์เข้าด้วยกัน:

สูตรสำหรับการประมาณด้วยควอดราเจอร์

คำว่า ควอดราเจอร์ กับ การอินทิเกรตเชิงตัวเลข มีความหมายแทบไม่ต่างกัน คำว่าควอดราเจอร์มักใช้ในบริบททางคณิตศาสตร์มากกว่า ส่วนการอินทิเกรตเชิงตัวเลขเป็นคำที่ใช้ทั่วไปในงานคอมพิวติ้งเชิงวิทยาศาสตร์

ควอดราเจอร์เชิงตัวเลขทำงานอย่างไร

ทุกกฎควอดราเจอร์ทำงานบนช่วง [a, b] ภายในช่วงนี้จะเลือกชุดโหนด xᵢ และกำหนดน้ำหนัก wᵢ ให้แต่ละโหนด การประมาณคือผลรวมถ่วงน้ำหนักดังกล่าว ความแตกต่างของแต่ละวิธีอยู่ที่ตำแหน่งโหนดและการกำหนดน้ำหนัก แค่นั้นเอง กฎคางหมู กฎของซิมป์สัน และควอดราเจอร์แบบเกาส์ ล้วนเป็นรูปแบบตามแม่แบบเดียวกันนี้

ความคลาดเคลื่อนจากการประมาณคือช่องว่างระหว่างผลรวมถ่วงน้ำหนักกับค่าอินทิกรัลจริง ทุกวิธีต่างก่อให้เกิดความคลาดเคลื่อน และอัตราที่ความคลาดเคลื่อนยุบตัวเมื่อเพิ่มจำนวนโหนด (หรือทำให้ช่วงย่อยแคบลง) คือสิ่งที่แยกวิธีที่ดีออกจากวิธีที่ยอดเยี่ยม ควรมองกรอบนี้ไว้: การเลือกวิธีควอดราเจอร์แท้จริงแล้วคือการเลือกว่าจะใช้สิทธิ์ประเมินค่าฟังก์ชันอย่างไรให้คุ้มที่สุด

วิธีควอดราเจอร์ที่พบบ่อย

ลำดับวิธีด้านล่างเรียงจากที่เข้าใจได้ง่ายที่สุดไปจนถึงซับซ้อนที่สุด

ไดอะแกรมเปรียบเทียบความคลาดเคลื่อนและพื้นที่ประมาณสำหรับกฎจุดกึ่งกลาง คางหมู และซิมป์สันในการอินทิเกรตเชิงตัวเลขภาพเปรียบเทียบกฎจุดกึ่งกลาง คางหมู และซิมป์สัน ภาพโดยผู้เขียน

กฎจุดกึ่งกลาง (Midpoint rule)

นำจุดกึ่งกลางของ [a, b] มาประเมินค่า f แล้วคูณด้วยความกว้าง (b − a) สมมติฐานคือค่าฟังก์ชันที่จุดกึ่งกลางแทนค่าเฉลี่ยทั่วทั้งช่วงได้

ฟังดูง่ายเกินไป และสำหรับช่วงเดียวก็จริง แต่เรื่องน่าประหลาดใจอย่างแรกคือ กฎจุดกึ่งกลางให้ผลเที่ยงตรงสำหรับฟังก์ชันค่าคงที่และเชิงเส้น และความคลาดเคลื่อนต่อช่วงมีสเกลเป็น O(h³) โดย h = b − a ซึ่งจริงๆ แล้วดีกว่ากฎคางหมูสำหรับฟังก์ชันที่เรียบ ซึ่งมักทำให้หลายคนแปลกใจ

กฎคางหมู (Trapezoidal rule)

ใช้จุดปลายทั้งสองแทนการใช้แต่จุดกึ่งกลาง เชื่อมสองจุดด้วยเส้นตรงและคำนวณพื้นที่ของรูปคางหมูที่ได้: (b − a) · [f(a) + f(b)] / 2 ให้ผลเที่ยงตรงสำหรับฟังก์ชันเชิงเส้น โดยมีความคลาดเคลื่อนต่อช่วงเป็น O(h³) เช่นเดียวกับกฎจุดกึ่งกลาง แต่ค่าคงที่หน้าพจน์ใหญ่กว่า

กฎคางหมูน่าจะเป็นวิธีควอดราเจอร์ที่ถูกสอนอย่างแพร่หลายที่สุด จนมีชื่อเสียงเกินจริง สำหรับฟังก์ชันที่นิ่งดีถือว่าใช้ได้ แต่กฎของซิมป์สันแบบเชิงประกอบมักทำได้ดีกว่าสำหรับจำนวนการประเมินค่าเท่าเดิม

กฎของซิมป์สัน (Simpson's rule)

ปรับพหุนามดีกรีสองผ่านสามจุด: สองจุดปลายและจุดกึ่งกลาง แล้วอินทิเกรตพหุนามนั้นอย่างเที่ยงตรง:

สูตรเต็มของกฎซิมป์สัน

การประเมินค่าเพิ่มที่จุดกึ่งกลางทำให้มีค่าใช้จ่ายเพิ่มหนึ่งครั้ง แต่ผลที่ได้คุ้มค่า: กฎของซิมป์สันให้ผลเที่ยงตรงสำหรับพหุนามถึงดีกรีสาม และความคลาดเคลื่อนต่อช่วงมีสเกลเป็น O(h⁵) ซึ่งดีกว่ากฎคางหมูสองลำดับ สำหรับฟังก์ชันที่เรียบ นี่มักเป็นวิธีแรกที่ควรหยิบใช้

ควอดราเจอร์แบบเกาส์ (Gaussian quadrature)

ตรงนี้เริ่มน่าสนใจจริงจังแล้ว กฎจุดกึ่งกลาง คางหมู และซิมป์สันใช้โหนดที่เว้นระยะเท่าๆ กัน ควอดราเจอร์แบบเกาส์ตั้งคำถามต่างออกไป: ถ้าเลือกทั้งตำแหน่งโหนดและน้ำหนักให้แม่นยำที่สุดจะเป็นอย่างไร?

ด้วยโหนด n จุด ควอดราเจอร์แบบเกาส์ (โดยเฉพาะแบบเกาส์-เลอฌ็องดร์) สามารถอินทิเกรตพหุนามดีกรีไม่เกิน 2n − 1 ได้อย่างเที่ยงตรง โหนด 2 จุดให้ความเที่ยงตรงสำหรับพหุนามดีกรีสาม; โหนด 5 จุดจัดการพหุนามดีกรี 9 ได้ โหนดคือรากของพหุนามเลอฌ็องดร์ และจะกระจุกตัวใกล้ปลายช่วงมากกว่าวางห่างเท่าๆ กัน ความแม่นยำที่มากขึ้นมาจากการปล่อยให้โหนดขยับ ไม่ใช่เพราะบังเอิญไปอยู่ตำแหน่งดีๆ การกระจุกตัวใกล้ปลายช่วงเป็นผลพวงทางคณิตศาสตร์ และจะเห็นเหตุผลด้านล่าง

ต่อไปนี้คือการเปรียบเทียบทั้งสี่วิธี:

Method

Approach

Error per interval

Computational cost

Best for

Midpoint rule

Evaluate at center

O(h³)

1 eval/interval

Simple, smooth functions

Trapezoidal rule

Linear fit

O(h³)

2 evals/interval

Periodic functions

Simpson's rule

Quadratic fit

O(h⁵)

3 evals/interval

Smooth functions

Gaussian quadrature

Optimal nodes + weights

O(h^(2n+1))

n evals/interval

High accuracy, smooth functions

วิธีควอดราเจอร์แบบเชิงประกอบ

การใช้กฎกับช่วงเต็ม [a, b] เพียงครั้งเดียวมักไม่เพียงพอ วิธีมาตรฐานคือ แบ่งช่วงออกเป็นช่วงย่อย n ช่วงที่เท่ากัน โดยมีความกว้าง h = (b − a)/n และใช้กฎพื้นฐานกับแต่ละช่วงย่อย

กฎจุดกึ่งกลางและคางหมูแบบเชิงประกอบ

สำหรับกฎคางหมูแบบเชิงประกอบ ให้ประเมินค่า f ที่จุด n+1 จุดที่เว้นระยะเท่าๆ กัน แล้วรวมพื้นที่คางหมู n รูป ความคลาดเคลื่อนรวมลดลงเป็น O(h²) ลด h ลงครึ่งหนึ่ง ความคลาดเคลื่อนจะลดลงสี่เท่า กฎจุดกึ่งกลางแบบเชิงประกอบใช้ตรรกะเดียวกันและมีลำดับความคลาดเคลื่อนรวมเท่ากัน

กฎของซิมป์สันแบบเชิงประกอบ

เวอร์ชันเชิงประกอบต้องใช้จำนวนช่วงย่อยเป็นจำนวนคู่ ประเมินค่า f ที่จุด n+1 จุด และได้ความคลาดเคลื่อนรวมเป็น O(h⁴) ลด h ลงครึ่งหนึ่ง ความคลาดเคลื่อนจะลดลงสิบหกเท่า นี่คือเหตุผลที่กฎของซิมป์สันแบบเชิงประกอบมักเป็นค่าตั้งต้นเมื่อต้องการความแม่นยำปานกลางบนฟังก์ชันที่เรียบ

โค้ด Python ด้านล่างแสดงให้เห็นว่าการประมาณแน่นขึ้นอย่างไรเมื่อเพิ่มจำนวนช่วงย่อยสำหรับ ∫[0 ถึง π] sin(x) dx (ค่าจริง: 2.0):

import numpy as np

def composite_simpson(func, lower, upper, num_intervals):
    """Approximate integral using composite Simpson's rule."""
    if num_intervals % 2 != 0:
        raise ValueError("num_intervals must be even")
    nodes = np.linspace(lower, upper, num_intervals + 1)
    values = func(nodes)
    h = (upper - lower) / num_intervals
    weights = np.ones(num_intervals + 1)
    weights[1:-1:2] = 4   # odd-indexed interior points
    weights[2:-2:2] = 2   # even-indexed interior points
    return (h / 3) * np.dot(weights, values)

exact = 2.0
for n in [4, 8, 16, 32]:
    approx = composite_simpson(np.sin, 0, np.pi, n)
    print(f"n={n:3d}: approx={approx:.10f}, error={abs(approx - exact):.2e}")

เพียง 32 ช่วง ความคลาดเคลื่อนก็ต่ำกว่า 10⁻⁶ แล้ว นี่คือการลู่เข้าแบบ O(h⁴)

ควอดราเจอร์แบบเกาส์

แนวคิดเบื้องหลังควอดราเจอร์แบบเกาส์สมควรได้มากกว่าช่องในตาราง

เหตุใดโหนดที่เว้นระยะเท่าๆ กันจึงไม่เหมาะที่สุดเสมอไป

เมื่อโหนดอยู่ที่จุดซึ่งเว้นระยะเท่าๆ กัน แปลว่ากำลังใช้ทรัพยากรการประเมินค่าในลักษณะที่อาจไม่สอดคล้องกับความยากของอินทิแกรนด์ บางบริเวณต้องการความละเอียดมากกว่า ส่วนบางบริเวณเสียทรัพยากรไปกับช่วงที่แบน ควอดราเจอร์แบบเกาส์เลี่ยงปัญหานี้ด้วยการเลือกโหนดที่พิสูจน์ได้ว่าเหมาะที่สุดสำหรับดีกรีของพหุนามที่สามารถอินทิเกรตได้อย่างเที่ยงตรง

สำหรับโหนด n จุด กฎเกาส์-เลอฌ็องดร์จะเลือก n รากของพหุนามเลอฌ็องดร์ลำดับที่ n คือ Pₙ(x) เป็นโหนด แล้วคำนวณน้ำหนักเพื่อให้พหุนามดีกรี ≤ 2n − 1 ถูกอินทิเกรตได้โดยไร้ความคลาดเคลื่อน ในทางปฏิบัติ numpy.polynomial.legendre.leggauss(n) ให้ทั้งโหนดและน้ำหนัก โหนดจะกระจุกตัวใกล้ปลายช่วง [−1, 1] ซึ่งเป็นช่วงอ้างอิงมาตรฐาน ตรงบริเวณที่ความคลาดเคลื่อนของการอินเตอร์โพเลตด้วยพหุนามมักสูง และความหนาแน่นการสุ่มตัวอย่างที่มากขึ้นให้ผลคุ้มค่าที่สุด

ควรใช้เมื่อใด

ควอดราเจอร์แบบเกาส์เหมาะที่สุดเมื่อฟังก์ชันเรียบและเป็นอนาลิติก และต้องการความแม่นยำสูงด้วยจำนวนการประเมินค่าน้อย โหนดเกาส์-เลอฌ็องดร์เพียงห้าจุดสามารถทำได้ดีกว่ากฎของซิมป์สันแบบเชิงประกอบที่ใช้หลายสิบช่วงบนอินทิแกรนด์ที่ประพฤติดี แต่ไม่เหมาะกับฟังก์ชันที่มีคม หยุดชะงัก หรือมีข้อมูลเฉพาะที่จุดซึ่งเว้นระยะเท่าๆ กัน ในกรณีเหล่านั้น การจัดวางโหนดอย่างพิถีพิถันกลับกลายเป็นข้อเสีย

ความคลาดเคลื่อนและความแม่นยำของควอดราเจอร์

ไม่มีวิธีเชิงตัวเลขใดรอดพ้นจากความคลาดเคลื่อน มีสองแหล่งหลักที่กระทบผลลัพธ์ของควอดราเจอร์ทุกครั้ง การเข้าใจทั้งคู่จำเป็นอย่างยิ่งเพื่อรู้ว่าจะเชื่อค่าที่ได้เมื่อใด

แหล่งที่มาของความคลาดเคลื่อนประกอบด้วย:

  • ความคลาดเคลื่อนจากการแยกย่อย (discretization error) (เรียกอีกอย่างว่าความคลาดเคลื่อนจากการตัดทอน) คือช่องว่างระหว่างค่าอินทิกรัลจริงกับผลจากกฎควอดราเจอร์ภายใต้เลขคณิตที่ไร้ข้อผิดพลาด สูตร O(hᵏ) ต่างๆ จับสิ่งนี้ไว้ ความคลาดเคลื่อนจะลดลงเมื่อเพิ่มจำนวนจุดหรือทำให้ช่วงย่อยแคบลง
  • ความคลาดเคลื่อนจากจุดลอยตัว (floating-point error) เป็นปัญหาคนละเรื่อง การบวกจำนวนเล็กๆ จำนวนมากในเลขคณิตความละเอียดจำกัดทำให้เกิดการปัดเศษที่ไม่ได้ลดลงตาม h และอาจเพิ่มขึ้นได้ สำหรับกฎเชิงประกอบที่ใช้ช่วงย่อยนับพัน อาจถึงจุดที่สัญญาณรบกวนจากจุดลอยตัวครอบงำ และการเพิ่มช่วงย่อยไม่ช่วยอีกต่อไป สำหรับงานวิทยาศาสตร์ส่วนใหญ่ มักจะถึงเกณฑ์ความแม่นยำที่ต้องการก่อนถึงพื้นดังกล่าว แต่พื้นนี้มีอยู่จริง

ความเรียบของฟังก์ชัน ความกว้างของช่วง และการเลือกวิธี ล้วนส่งผลต่อความคลาดเคลื่อนจากการแยกย่อย ฟังก์ชันที่หยาบและมีลักษณะแหลมคมต้องการช่วงย่อยมากขึ้นหรือวิธีแบบปรับตัว

ควอดราเจอร์แบบปรับตัว (Adaptive)

กริดที่สม่ำเสมอทำให้สิ้นเปลืองการประเมินค่าเมื่ออินทิแกรนด์เรียบเกือบทั้งหมดแต่ซับซ้อนในไม่กี่บริเวณ

ทำงานอย่างไร

ใช้กฎควอดราเจอร์กับช่วงหนึ่ง แล้วใช้กฎที่ลำดับสูงกว่า (หรือกฎเดียวกันกับครึ่งช่วงทั้งสอง) และเปรียบเทียบ ผลต่างเป็นการประมาณความคลาดเคลื่อนเฉพาะที่ หากต่ำกว่าเกณฑ์ ก็ยอมรับช่วงนั้น หากไม่ ให้แบ่งย่อยแล้วทำซ้ำกับแต่ละครึ่ง ดำเนินการไปจนกว่าทุกช่วงย่อยจะผ่านเกณฑ์

ประสิทธิภาพที่ดีกว่าการทำให้ละเอียดแบบสม่ำเสมอจะสูงมากเมื่ออินทิแกรนด์มีลักษณะเฉพาะที่โดดเดี่ยว: ยอดแหลมแคบๆ รอยคม การแกว่งเร็วที่ล้อมรอบด้วยบริเวณที่เรียบ วิธีแบบปรับตัวจะทุ่มการประเมินค่าไปยังตำแหน่งที่ฟังก์ชันต้องการจริงๆ

scipy.integrate.quad()

ใน Python scipy.integrate.quad() ใช้วิธีควอดราเจอร์แบบเกาส์เชิงปรับตัว (อัลกอริทึม DQAGSE ของ QUADPACK) ส่งผ่านฟังก์ชันและขีดจำกัด จะได้ค่าประมาณและขอบเขตความคลาดเคลื่อน คืนมา สำหรับอินทิกรัลหนึ่งมิติส่วนใหญ่ นี่คือเครื่องมือที่เหมาะสม ไม่ต้องจูนเอง

from scipy import integrate
import numpy as np

# Integrate a function with a peak near x=0.5
def peaked_func(x):
    return np.exp(-100 * (x - 0.5)**2)

result, error_bound = integrate.quad(peaked_func, 0, 1)
print(f"Estimate: {result:.10f}")
print(f"Error bound: {error_bound:.2e}")

quad() จัดการยอดแคบนี้ได้อย่างราบรื่น กฎของซิมป์สันแบบกริดสม่ำเสมอต้องใช้ช่วงย่อยนับร้อยจึงจะทัดเทียม

จะเลือกวิธีควอดราเจอร์อย่างไร

เริ่มจาก scipy.integrate.quad() สำหรับอินทิกรัลหนึ่งมิติใน Python เว้นแต่มีเหตุผลอื่น มันเป็นแบบปรับตัว แม่นยำ และผ่านการทดสอบอย่างดี เนื้อหาด้านล่างเหมาะเมื่อจำเป็นต้องทำเอง ใช้ภาษาไร้ไลบรารีแบบปรับตัวที่ดี หรือปรับให้เหมาะกับกรณีเฉพาะ

  • ฟังก์ชันที่เรียบ เป็นอนาลิติก และมีสูตรชัดเจน: ควอดราเจอร์แบบเกาส์ให้ความแม่นยำต่อการประเมินค่าหนึ่งครั้งสูงสุด หากต้องการความแม่นยำปานกลางและความเรียบง่าย กฎของซิมป์สันแบบเชิงประกอบเป็นตัวเลือกที่แข็งแรง
  • ฟังก์ชันที่มีคม หรือไม่ต่อเนื่อง: วิธีเว้นระยะเท่าๆ กัน (คางหมู ซิมป์สัน) มักได้ผลดีกว่าควอดราเจอร์แบบเกาส์ เพราะตำแหน่งโหนดคงที่ไม่ถูกรบกวนจากความผิดปกติ แยกช่วงอินทิเกรตที่จุดไม่ต่อเนื่องที่ทราบ และจัดการแต่ละส่วนแยกกัน
  • ข้อมูลที่มีเฉพาะจุดซึ่งเว้นระยะเท่าๆ กัน: ควอดราเจอร์แบบเกาส์ใช้ไม่ได้ เพราะไม่สามารถประเมินค่าฟังก์ชันที่โหนด任意ได้ ให้ใช้กฎคางหมูแบบเชิงประกอบหรือกฎของซิมป์สันแบบเชิงประกอบแทน
  • อินทิกรัลมิติสูง: ควอดราเจอร์เผชิญ "คำสาปมิติ" อย่างรวดเร็ว เมื่อมี n จุดต่อมิติ และ d มิติ จะต้องประเมินค่ารวม nᵈ ครั้ง สิบมิติกับสิบจุดต่อมิติคือ 10¹⁰ ครั้ง ซึ่งเป็นไปไม่ได้ มอนติคาร์โลสเกลได้ดีกว่ามากเมื่อเกินราวห้ามิติ จึงควรสลับไปใช้ที่จุดนั้น

ควอดราเจอร์เทียบกับวิธีเชิงตัวเลขที่เกี่ยวข้อง

ควอดราเจอร์ไม่ได้อยู่โดดเดี่ยว การเห็นภาพว่ามันอยู่ตรงไหนเมื่อเทียบกับเครื่องมืออื่นๆ ที่อาจกำลังพิจารณาจะช่วยได้

ควอดราเจอร์เทียบกับการอินทิเกรตเชิงวิเคราะห์

การอินทิเกรตเชิงวิเคราะห์หาปริพันธ์ปริยายที่แน่นอน ส่วนควอดราเจอร์ประมาณเป็นตัวเลข หากมีปริพันธ์ปริยายที่แน่นอนและหาได้ ก็ควรใช้มัน ควอดราเจอร์มีที่ยืนเมื่อการอินทิเกรตแบบ exact เป็นไปไม่ได้หรือไม่เหมาะสม

ควอดราเจอร์เทียบกับมอนติคาร์โล

ทั้งคู่ประมาณค่าอินทิกรัลจำกัด แต่ต่างวิธี ควอดราเจอร์เป็นเชิงกำหนด: ประเมิน f ที่โหนดตายตัวที่เลือกไว้ล่วงหน้า โดยอัตราการลู่เข้าผูกกับความเรียบของฟังก์ชันและจำนวนโหนด มอนติคาร์โลสุ่มตัวอย่างแล้วเฉลี่ย โดยความคลาดเคลื่อนสเกลเป็น O(1/√N) ไม่ขึ้นกับมิติ นั่นทำให้มันลู่เข้าช้ากว่าในมิติต่ำ แต่ไม่ขึ้นกับมิติ จึงเป็นตัวเลือกที่ใช้งานจริงเมื่อเกินราวห้ามิติ

ควอดราเจอร์เทียบกับการอินเตอร์โพเลชัน

กฎควอดราเจอร์บางอย่าง รวมถึงกฎของซิมป์สัน ทำงานโดยปรับพหุนามผ่านจุดที่ประเมินค่าแล้วอินทิเกรตอย่างเที่ยงตรง แต่เป้าหมายต่างจากการอินเตอร์โพเลชัน การอินเตอร์โพเลชันต้องการสร้างฟังก์ชันกลับคืน ส่วนควอดราเจอร์ต้องการเพียงตัวเลข พหุนามเป็นเพียงเครื่องมือ ไม่ใช่ผลลัพธ์

สรุป

สิ่งที่น่าพอใจเกี่ยวกับควอดราเจอร์คือได้ประโยชน์มากมายจากแนวคิดจัดระเบียบเพียงแนวคิดเดียว ทุกวิธีที่กล่าวมา ไม่ว่าจะกฎจุดกึ่งกลาง คางหมู ซิมป์สัน หรือเกาส์ ล้วนเป็นคำตอบต่างรูปต่อคำถามเดียวกัน: เมื่อมีงบประมาณการประเมินค่าฟังก์ชันจำกัด ควรวางมันไว้ที่ไหน และให้น้ำหนักอย่างไร

การปรับพหุนามที่ดีกว่าผ่านจุดประเมินค่าช่วยลดความคลาดเคลื่อนลงอย่างรวดเร็ว การขยับโหนดไปยังตำแหน่งที่เหมาะที่สุดยิ่งคั้นเอาความแม่นยำจากงบประมาณเท่าเดิมได้มากขึ้น วิธีแบบปรับตัวช่วยดึงทุกอย่างมารวมกัน ส่งการประเมินค่าไปยังที่ที่ฟังก์ชันต้องการจริงๆ

ใน Python scipy.integrate.quad() คือค่าตั้งต้นที่เหมาะสมสำหรับปัญหา 1 มิติ เนื้อหาอื่นๆ ในบทความนี้เหมาะเมื่ออยากเข้าใจว่าเบื้องหลังเกิดอะไรขึ้น หรือเมื่อต้องทำเอง หากต้องการต่อยอดทักษะเชิงตัวเลขด้วย SciPy ลองดูคอร์ส Introduction to Optimization in Python

FAQs

ควอดราเจอร์ในทางคณิตศาสตร์คืออะไร?

ควอดราเจอร์คือการประมาณค่าอินทิกรัลจำกัดเชิงตัวเลข แทนที่จะหาปริพันธ์ปริยายด้วยวิธีวิเคราะห์ จะประเมินค่าฟังก์ชันที่ชุดจุดที่เลือก (โหนด) และผสานค่าด้วยน้ำหนักเพื่อประมาณค่าอินทิกรัล คำนี้มาจากปัญหาคลาสสิกของการหาพื้นที่ใต้โค้ง

ความแตกต่างระหว่างกฎคางหมูกับกฎของซิมป์สันคืออะไร?

กฎคางหมูประมาณอินทิแกรนด์ด้วยเส้นตรงระหว่างจุดปลาย ทั้งยังให้ผลเที่ยงตรงสำหรับฟังก์ชันเชิงเส้น กฎของซิมป์สันปรับพหุนามดีกรีสองผ่านสามจุด (สองจุดปลายและจุดกึ่งกลาง) ทำให้เที่ยงตรงสำหรับพหุนามถึงดีกรีสาม สำหรับฟังก์ชันที่เรียบ กฎของซิมป์สันลู่เข้าเร็วกว่าอย่างมาก: ความคลาดเคลื่อนต่อช่วงเป็น O(h⁵) เทียบกับ O(h³) สำหรับกฎคางหมู

ควรใช้ควอดราเจอร์แบบเกาส์แทนกฎของซิมป์สันแบบเชิงประกอบเมื่อใด?

ใช้ควอดราเจอร์แบบเกาส์เมื่อประเมินค่า f ได้ที่จุดใดก็ได้ และต้องการความแม่นยำสูงด้วยจำนวนการประเมินค่าน้อย โดยเฉพาะสำหรับฟังก์ชันที่เรียบและอนาลิติก กฎของซิมป์สันแบบเชิงประกอบมักได้ผลดีกว่าเมื่อมีข้อมูลเฉพาะที่จุดซึ่งเว้นระยะเท่าๆ กัน หรือเมื่อฟังก์ชันมีคมหรือไม่ต่อเนื่องซึ่งจะรบกวนการวางโหนดของเกาส์ สำหรับงานส่วนใหญ่ วิธีแบบปรับตัวอย่าง scipy.integrate.quad() จะช่วยตัดสินใจให้

คำว่า “ควอดราเจอร์แบบปรับตัว” หมายถึงอะไร?

แทนที่จะกระจายจุดประเมินค่าอย่างสม่ำเสมอ ควอดราเจอร์แบบปรับตัวจะกระจุกจุดในที่ที่ความคลาดเคลื่อนจากการประมาณสูง มันประมาณความคลาดเคลื่อนเฉพาะที่ในแต่ละช่วงย่อย แบ่งช่วงที่เกินเกณฑ์ แล้วทำซ้ำจนกว่าความคลาดเคลื่อนรวมจะยอมรับได้ วิธีนี้มีประสิทธิภาพสำหรับอินทิแกรนด์ที่เรียบเกือบทั้งหมดแต่มีบริเวณที่ยากเป็นหย่อมๆ

จะคำนวณอินทิกรัลเชิงตัวเลขใน Python ได้อย่างไร?

เครื่องมือมาตรฐานคือ scipy.integrate.quad() ส่งฟังก์ชันและขอบเขตการอินทิเกรตเข้าไป จะได้ค่าประมาณพร้อมค่าประเมินความคลาดเคลื่อนกลับมา สำหรับขอบเขตอนันต์ ให้ส่ง np.inf หรือ -np.inf สำหรับอินทิกรัลหลายมิติ ใช้ dblquad() หรือ tplquad()

ทำไมควอดราเจอร์จึงล้มเหลวสำหรับอินทิกรัลมิติสูง?

กฎควอดราเจอร์วางโหนดบนกริด ดังนั้นจำนวนครั้งที่ประเมินค่าฟังก์ชันจะสเกลเป็น nᵈ โดยที่ n คือจำนวนจุดต่อมิติ และ d คือจำนวนมิติ ใน 10 มิติที่มี 10 จุดต่อมิติ นั่นคือ 10¹⁰ ครั้ง การระเบิดแบบเอ็กซ์โปเนนเชียลนี้เรียกว่า "คำสาปมิติ" มอนติคาร์โลเลี่ยงปัญหานี้เพราะอัตราความคลาดเคลื่อนเป็น O(1/√N) ไม่ขึ้นกับมิติ โดยที่ N คือจำนวนตัวอย่างสุ่มทั้งหมด

ความแตกต่างระหว่างควอดราเจอร์กับมอนติคาร์โลคืออะไร?

ควอดราเจอร์เป็นแบบเชิงกำหนด: ประเมินค่าฟังก์ชันที่โหนดตายตัวที่เลือกไว้ล่วงหน้า โดยอัตราการลู่เข้าขึ้นกับวิธีและความเรียบของฟังก์ชัน มักอยู่ที่ O(h²) ถึง O(h⁵) สำหรับกฎเชิงประกอบ มอนติคาร์โลเป็นแบบสุ่ม: สุ่มตัวอย่างอย่างสม่ำเสมอแล้วเฉลี่ย โดยความคลาดเคลื่อนสเกลเป็น O(1/√N) ควอดราเจอร์ชนะในหนึ่งหรือสองมิติ มอนติคาร์โลกลายเป็นทางเลือกที่ใช้งานจริงราวห้าถึงสิบมิติขึ้นไป

โหนดและน้ำหนักแบบเกาส์คืออะไร?

โหนดเกาส์คือศูนย์ของพหุนามตั้งฉากชนิดหนึ่ง สำหรับเกาส์-เลอฌ็องดร์คือรากของพหุนามเลอฌ็องดร์ลำดับที่ n ส่วนน้ำหนักจะถูกเลือกเพื่อให้กฎสามารถอินทิเกรตพหุนามถึงดีกรี 2n − 1 ได้อย่างเที่ยงตรง ต่างจากกริดที่เว้นระยะเท่าๆ กัน โหนดเกาส์มักกระจุกใกล้กึ่งกลางช่วงและหลีกเลี่ยงปลายช่วง ไม่จำเป็นต้องคำนวณเอง numpy.polynomial.legendre.leggauss() ให้ค่าเหล่านี้ได้โดยตรง

หัวข้อ
วิทยาการข้อมูล

เรียนกับ DataCamp

คอร์ส

Introduction to Linear Modeling in Python

4 ชม.
27K
สำรวจแนวคิดและการใช้งานของโมเดลเชิงเส้นด้วย Python และสร้างโมเดลเพื่ออธิบาย ทำนาย และดึงอินไซต์จากรูปแบบข้อมูล
ดูรายละเอียดRight Arrow
เริ่มคอร์ส

แทร็ก

นักวิทยาศาสตร์ข้อมูลระดับผู้ช่วย ใน Python

90 ชม.
เรียนรู้วิทยาการข้อมูลใน Python ตั้งแต่การจัดการข้อมูลไปจนถึงการเรียนรู้ของเครื่อง เส้นทางนี้มอบทักษะที่จำเป็นเพื่อประสบความสำเร็จในฐานะนักวิทยาศาสตร์ข้อมูล!
ดูเพิ่มเติมRight Arrow