পাঠ ২৬ · ৫৭-এর মধ্যে · মডিউল ৫
Home / Courses / Numerical Methods / গসিয়ান কোয়াড্রেচার

গসিয়ান কোয়াড্রেচার

Gaussian quadrature
৯ মিনিট পড়া উচ্চ · Advanced Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • গসিয়ান কোয়াড্রেচারের মূল ধারণা — নন-ইউনিফর্ম নোড ও ওয়েট বেছে ফাংশন-ইভ্যালুয়েশন প্রতি বেশি নির্ভুলতা
  • 2-পয়েন্ট ও 3-পয়েন্ট গস-লিজেন্ড্র মেথডের স্ট্যান্ডার্ড নোড/ওয়েট এবং একটি নির্বিচার ইন্টারভালে ম্যাপ করার পদ্ধতি
  • একটি সত্যিকারের Python ইমপ্লিমেন্টেশন এবং সিম্পসনস রুলের সাথে "অ্যাকুরেসি-পার-ইভ্যালুয়েশন" তুলনা
  • কেন গসিয়ান কোয়াড্রেচারকে নিউটন-কোটস পরিবারের চেয়ে বেশি কম্পিউটেশনালি দক্ষ বলা হয়

১ · প্রশ্ন — পয়েন্ট বাছাই কি স্বাধীন করা যায়?

ট্র্যাপিজয়ডাল ও সিম্পসনস রুল (L23-L24) — এবং নিউটন-কোটস পরিবারের সব মেথড — একটি সাধারণ বৈশিষ্ট্য শেয়ার করে: এগুলো সবসময় সমান-দূরত্বের পয়েন্টে ফাংশনের মান ব্যবহার করে, শুধু সেই পয়েন্টগুলোর ওয়েট (গুণক) পরিবর্তন করে নির্ভুলতা বাড়ায়। গসিয়ান কোয়াড্রেচার একটি ভিন্ন প্রশ্ন করে — যদি পয়েন্টের অবস্থানও স্বাধীনভাবে বেছে নেওয়ার স্বাধীনতা থাকে (শুধু ওয়েট নয়), তাহলে একটি নির্দিষ্ট সংখ্যক পয়েন্টে সর্বোচ্চ কত নির্ভুলতা অর্জন করা সম্ভব?

উত্তরটি চমকপ্রদ — nটি পয়েন্ট ব্যবহার করে সমান-দূরত্বের নিউটন-কোটস মেথড সাধারণত ডিগ্রি n-1 (বা প্রতিসাম্যের সুবিধায় সিম্পসনসের মতো n) পলিনোমিয়াল পর্যন্ত নিখুঁত। কিন্তু যদি পয়েন্টের অবস্থান স্বাধীনভাবে বেছে নেওয়া যায়, একই nটি পয়েন্ট দিয়ে ডিগ্রি 2n-1 পর্যন্ত পলিনোমিয়াল নিখুঁতভাবে ইন্টিগ্রেট করা সম্ভব — প্রায় দ্বিগুণ ক্ষমতা!

২ · গস-লিজেন্ড্র নোড ও ওয়েট

[-1, 1] ইন্টারভালের জন্য গস-লিজেন্ড্র মেথডের সর্বোত্তম নোড (xᵢ) ও ওয়েট (wᵢ) লিজেন্ড্র পলিনোমিয়ালের মূল থেকে গাণিতিকভাবে ডেরাইভ করা হয় — এগুলো সুপরিচিত ধ্রুবক, টেক্সটবুকে হার্ডকোড করা মান হিসেবে ব্যবহার করা স্ট্যান্ডার্ড প্র্যাকটিস।

২-পয়েন্ট গস-লিজেন্ড্র (ডিগ্রি-৩ পলিনোমিয়াল পর্যন্ত নিখুঁত):

$$x_{1,2} = \mp\frac{1}{\sqrt{3}}, \qquad w_1 = w_2 = 1$$

৩-পয়েন্ট গস-লিজেন্ড্র (ডিগ্রি-৫ পলিনোমিয়াল পর্যন্ত নিখুঁত):

$$x_1 = -\sqrt{3/5},\ x_2 = 0,\ x_3 = \sqrt{3/5}, \qquad w_1 = w_3 = \frac{5}{9},\ w_2 = \frac{8}{9}$$

যেকোনো নির্বিচার [a, b] ইন্টারভালে প্রয়োগ করতে একটি সরল লিনিয়ার ম্যাপিং ব্যবহার করা হয়:

$$\int_a^b f(x)\,dx \approx \frac{b-a}{2}\sum_i w_i\, f\!\left(\frac{a+b}{2} + \frac{b-a}{2}x_i\right)$$
লক্ষ্য করুন

নোডগুলো ইন্টারভালের প্রান্তে নয় — এগুলো ইন্টারভালের ভেতরে, একটি নির্দিষ্ট গাণিতিকভাবে সর্বোত্তম প্যাটার্নে অবস্থিত (২-পয়েন্ট মেথডে মাঝ থেকে প্রতিসম দূরত্বে, কোনো পয়েন্টই প্রান্তে নয়)। এটাই ট্র্যাপিজয়ডাল রুলের (যা f(a) ও f(b), অর্থাৎ ঠিক প্রান্তে, ব্যবহার করে) থেকে মৌলিক পার্থক্য।

৩ · সত্যিকারের ডেমো — অ্যাকুরেসি-পার-ইভ্যালুয়েশন তুলনা

L23-L24-এর একই পরীক্ষার ফাংশন (∫₀^π sin(x) dx = 2) ব্যবহার করে, এবার গস-লিজেন্ড্র মেথড হাতে-লেখা কোড দিয়ে গণনা করে সিম্পসনস রুলের সাথে সমান সংখ্যক ফাংশন-ইভ্যালুয়েশনে তুলনা করা হলো:

Python
import math

def f(x):
    return math.sin(x)

a, b = 0.0, math.pi
true_val = 2.0

def gauss2(f, a, b):
    # স্ট্যান্ডার্ড 2-পয়েন্ট গস-লিজেন্ড্র নোড ও ওয়েট, [-1,1]-এর জন্য
    nodes   = [-1/math.sqrt(3), 1/math.sqrt(3)]
    weights = [1.0, 1.0]
    mid, half = (a+b)/2, (b-a)/2
    total = sum(wi * f(mid + half*xi) for xi, wi in zip(nodes, weights))
    return half * total

def gauss3(f, a, b):
    # স্ট্যান্ডার্ড 3-পয়েন্ট গস-লিজেন্ড্র নোড ও ওয়েট, [-1,1]-এর জন্য
    nodes   = [-math.sqrt(3/5), 0.0, math.sqrt(3/5)]
    weights = [5/9, 8/9, 5/9]
    mid, half = (a+b)/2, (b-a)/2
    total = sum(wi * f(mid + half*xi) for xi, wi in zip(nodes, weights))
    return half * total

def simpson(f, a, b, n):
    h = (b-a)/n
    total = f(a) + f(b)
    for i in range(1, n):
        x = a + i*h
        total += (4 if i % 2 != 0 else 2) * f(x)
    return total * h / 3

g2, g3 = gauss2(f, a, b), gauss3(f, a, b)
err_g2, err_g3 = abs(g2-true_val), abs(g3-true_val)
print(f"2-point Gauss-Legendre (2 evals): approx={g2:.10f}  error={err_g2:.3e}")
print(f"3-point Gauss-Legendre (3 evals): approx={g3:.10f}  error={err_g3:.3e}")
print()

s2, s4 = simpson(f, a, b, 2), simpson(f, a, b, 4)
err_s2, err_s4 = abs(s2-true_val), abs(s4-true_val)
print(f"Simpson n=2 (3 evals): approx={s2:.10f}  error={err_s2:.3e}")
print(f"Simpson n=4 (5 evals): approx={s4:.10f}  error={err_s4:.3e}")

    
দুটি তুলনাই গসিয়ান কোয়াড্রেচারের পক্ষে যায়। ২-পয়েন্ট গস-লিজেন্ড্র মাত্র ২টি ফাংশন-ইভ্যালুয়েশনে এরর ৬.৪১৮ × ১০⁻² পায়, যেখানে সিম্পসনস রুল n=2 (৩টি ইভ্যালুয়েশন, গসিয়ানের চেয়ে বেশি!) দিয়ে এরর ৯.৪৪০ × ১০⁻² পায় — গসিয়ান কম ইভ্যালুয়েশনেই বেশি নির্ভুল। একইভাবে ৩-পয়েন্ট গস-লিজেন্ড্র (৩টি ইভ্যালুয়েশন) এরর ১.৩৮৯ × ১০⁻³ পায়, যেখানে সিম্পসনস রুল n=4 (৫টি ইভ্যালুয়েশন) দিয়েও এরর মাত্র ৪.৫৬০ × ১০⁻³ — গসিয়ান কম ইভ্যালুয়েশনে প্রায় ৩.৩ গুণ বেশি নির্ভুল। এটাই গসিয়ান কোয়াড্রেচারের মূল বিক্রয়-বিন্দু — একই কম্পিউটেশনাল বাজেটে (ফাংশন কতবার গণনা করতে হচ্ছে, যা একটি জটিল সিমুলেশন ফাংশনের জন্য প্রধান খরচ) উল্লেখযোগ্যভাবে বেশি নির্ভুলতা।
মূল কথা · Key takeaway

গসিয়ান কোয়াড্রেচার প্রশ্নটাকেই ঘুরিয়ে দেয় — "নির্দিষ্ট পয়েন্টে সবচেয়ে ভালো ওয়েট কী" থেকে "নির্দিষ্ট সংখ্যক ইভ্যালুয়েশনে সবচেয়ে ভালো পয়েন্ট ও ওয়েট কী।" যখন প্রতিটি ফাংশন-ইভ্যালুয়েশনের খরচ বেশি (যেমন একটি ভারী সিমুলেশন), গসিয়ান কোয়াড্রেচারের এই "প্রতি-ইভ্যালুয়েশন বেশি অ্যাকুরেসি" বৈশিষ্ট্য এটিকে নিউটন-কোটস মেথডের চেয়ে বাস্তবে বেশি ব্যবহৃত করে তোলে। এই মডিউলের (M5) ছয়টি পাঠ — ফাইনাইট ডিফারেন্স থেকে রিচার্ডসন এক্সট্রাপোলেশন, ট্র্যাপিজয়ডাল থেকে সিম্পসনস, অ্যাডাপটিভ থেকে গসিয়ান — একসাথে দেখায় ক্যালকুলাসের দুটি মৌলিক অপারেশন (ডেরিভেটিভ ও ইন্টিগ্রাল) কম্পিউটারে কীভাবে বাস্তবায়ন করা হয়। পরের মডিউলে (M6) আমরা এই একই টুলগুলো ব্যবহার করে ডিফারেনশিয়াল সমীকরণ নিউমেরিক্যালি সমাধান করা শুরু করব।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ গসিয়ান কোয়াড্রেচারের নোডগুলো ইন্টারভালের প্রান্তে থাকে না। এটি কোন বাস্তব পরিস্থিতিতে একটি অসুবিধা হয়ে দাঁড়াতে পারে বলে আপনার ধারণা?

যদি আপনার কাছে শুধু কিছু নির্দিষ্ট, পূর্ব-নির্ধারিত পয়েন্টে ফাংশনের মান পাওয়া যায় (যেমন একটি সেন্সর থেকে নির্দিষ্ট সময়ে রেকর্ড করা ডেটা, যেখানে নতুন করে যেকোনো বিন্দুতে মান বের করা সম্ভব নয়), তাহলে গসিয়ান কোয়াড্রেচার সরাসরি প্রযোজ্য নয় — এর জন্য নোডের অবস্থানে ফাংশনটি সরাসরি গণনা করতে সক্ষম হতে হয়। এই ক্ষেত্রে নিউটন-কোটস মেথড (যেমন ট্র্যাপিজয়ডাল বা সিম্পসনস, যা যেকোনো পূর্ব-নির্ধারিত সমান-দূরত্বের গ্রিডে কাজ করে) বেশি ব্যবহারিক।

প্র ০২ উপরের ডেমোতে ৩-পয়েন্ট গস-লিজেন্ড্র সিম্পসনস n=4-এর চেয়ে ভালো করেছে, যদিও কম ফাংশন-ইভ্যালুয়েশন ব্যবহার করেছে (৩ বনাম ৫)। এই তুলনা কি "একই ফাংশন-ইভ্যালুয়েশন সংখ্যায়" করলে ফলাফল আরও বেশি গসিয়ানের পক্ষে যাবে বলে আপনার ধারণা?

হ্যাঁ — সিম্পসনস রুল n=2 (৩ ইভ্যালুয়েশন, ৩-পয়েন্ট গসিয়ানের সমান) ব্যবহার করলে তার এরর (৯.৪৪০ × ১০⁻²) ৩-পয়েন্ট গসিয়ানের এরর (১.৩৮৯ × ১০⁻³)-এর চেয়ে প্রায় ৬৮ গুণ বেশি — সমান ইভ্যালুয়েশন সংখ্যায় তুলনা করলে গসিয়ানের সুবিধা আরও নাটকীয়ভাবে স্পষ্ট হয়।

প্র ০৩ এই মডিউলে (M5) আমরা ফাইনাইট ডিফারেন্স, রিচার্ডসন এক্সট্রাপোলেশন, ট্র্যাপিজয়ডাল, সিম্পসনস, অ্যাডাপটিভ কোয়াড্রেচার ও গসিয়ান কোয়াড্রেচার শিখলাম। এই সবগুলো মেথডের মধ্যে আপনি কী একটি সাধারণ থিম লক্ষ্য করেছেন?

প্রতিটি মেথডই একটি ট্রেড-অফ পরিচালনা করছে — নির্ভুলতা বনাম কম্পিউটেশনাল খরচ (কতবার ফাংশন গণনা করতে হচ্ছে)। প্রতিটি পরবর্তী মেথড আগেরটার চেয়ে "স্মার্টার" উপায়ে এই ট্রেড-অফ পরিচালনা করে — সরল লিমিট থেকে সেন্ট্রাল ডিফারেন্স (একই খরচে বেশি নির্ভুলতা), রিচার্ডসন এক্সট্রাপোলেশন (বিদ্যমান গণনা পুনঃব্যবহার), সিম্পসনস (উচ্চতর-ডিগ্রি ফিট), অ্যাডাপটিভ (খরচ শুধু যেখানে দরকার সেখানে ব্যয় করা), এবং গসিয়ান (পয়েন্টের অবস্থানই অপ্টিমাইজ করা)। এই থিমটি — সীমিত কম্পিউটেশনাল বাজেট থেকে সর্বোচ্চ নির্ভুলতা বের করা — পুরো নিউমেরিক্যাল মেথডস ক্ষেত্রের কেন্দ্রীয় প্রশ্ন, এবং M6-এর ODE সলভার থেকে M9-এর অপ্টিমাইজেশন পর্যন্ত বারবার ফিরে আসবে।

অনুশীলন

  1. চিন্তা করুন: যদি কোড সেলে একটি ৪-পয়েন্ট গস-লিজেন্ড্র মেথড যোগ করা হয় (আরও বেশি নোড ব্যবহার করে), ৩-পয়েন্ট মেথডের তুলনায় এরর বাড়বে না কমবে বলে আপনার ধারণা?

    কমবে — বেশি নোড মানে সাধারণত উচ্চতর-ডিগ্রি পলিনোমিয়াল পর্যন্ত নিখুঁত ইন্টিগ্রেশন (৪-পয়েন্ট মেথড ডিগ্রি-৭ পলিনোমিয়াল পর্যন্ত নিখুঁত), তাই sin(x)-এর মতো একটি মসৃণ ফাংশনে এরর আরও ছোট হওয়ার কথা — একই যুক্তি যা ২-পয়েন্ট থেকে ৩-পয়েন্টে যাওয়ার সময় এরর ৬.৪১৮ × ১০⁻² থেকে ১.৩৮৯ × ১০⁻৩-এ নামিয়ে এনেছিল।

  2. পরীক্ষা করুন: কোড সেলে gauss2/gauss3 ফাংশন দুটির প্যাটার্ন অনুসরণ করে একটি নতুন gauss1 ফাংশন লিখুন যা শুধু ১-পয়েন্ট গস-লিজেন্ড্র (নোড x = 0, ওয়েট w = 2) ব্যবহার করে — এটি আসলে মিডপয়েন্ট রুলের সমতুল্য। Run চেপে এর এরর ২-পয়েন্ট ও ৩-পয়েন্ট মেথডের সাথে তুলনা করুন।

    ১-পয়েন্ট মেথড (মিডপয়েন্ট রুল) মাত্র ডিগ্রি-১ পলিনোমিয়াল পর্যন্ত নিখুঁত — sin(x)-এর মতো একটি বাঁকা ফাংশনে এর এরর ২-পয়েন্ট ও ৩-পয়েন্ট মেথডের চেয়ে উল্লেখযোগ্যভাবে বড় হবে, যদিও এটি সবচেয়ে কম (মাত্র ১টি) ফাংশন-ইভ্যালুয়েশন ব্যবহার করে — নোড সংখ্যা বনাম নির্ভুলতার ট্রেড-অফ আবারও স্পষ্ট।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
কম্পোজিট রুল ও অ্যাডাপটিভ কোয়াড্রেচার