কম্পিউটার

C++ এ বেসেলের ইন্টারপোলেশন


ইন্টারপোলেশন হল অজানা মানের এক ধরনের অনুমান কৌশল যা জানা মানগুলির মধ্যে থাকে। ইন্টারপোলেশন হল জ্ঞাত ডেটা পয়েন্টগুলির একটি পৃথক সেটের পরিসরের মধ্যে নতুন ডেটা পয়েন্ট তৈরির প্রক্রিয়া।

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

তাই মূলত এখানে কম গণনা খরচ এবং সরলতা ইন্টারপোলেশন ত্রুটি থেকে ক্ষতির চেয়ে বেশি।

বেসেলের ইন্টারপোলেশন সূত্র

f(u) = {(f(0)+f(1))/2} + {u - ½}𝛥f(0) + {u(u-1)/2!}{(𝛥2 f(-1) + 𝛥2 f(0))/2} + {u(u-1)(u - ½)/3!}𝛥3f(-1) + {u(u+1)(u-1)(u-2)/4!}{(𝛥4f(-2) + 𝛥4f(-1))/2}+..

এখানে,

f(0) হল মূল বিন্দু যা সাধারণত মধ্য বিন্দু।

u =x - f(0) / h, gh হল পার্থক্যের ব্যবধান

উদাহরণ

ব্যাসেলের ইন্টারপোলেশন -

চিত্রিত করার জন্য প্রোগ্রাম
#include <iostream>
using namespace std;
float calU(float u, int n){
   if (n == 0)
      return 1;
   float result = u;
   for (int i = 1; i <= n / 2; i++)
      result = result*(u - i);
   for (int i = 1; i < n / 2; i++)
      result = result*(u + i);
   return result;
}
int factorial(int n){
   if(n == 1)
      return 1;
   return n * factorial(n-1);
}
int main(){
   int n = 6;
   float x[] = { 50, 51, 52, 53, 54, 55 };
   float y[n][n];
   y[0][0] = 8.000;
   y[1][0] = 7.746;
   y[2][0] = 7.674;
   y[3][0] = 7.571;
   y[4][0] = 7.469;
   y[5][0] = 7.231;
   for (int i = 1; i < n; i++)
      for (int j = 0; j < n - i; j++)
         y[j][i] = y[j + 1][i - 1] - y[j][i - 1];
   float value = 53.2;
   float sum = (y[2][0] + y[3][0]) / 2;
   int index;
   if (n % 2)
      index = n/2;
   else
      index = n/2 - 1;
   float u = (value - x[index]) / (x[1] - x[0]);
   for (int i = 1; i < n; i++) {
      if (i % 2)
         sum+= (((u-(0.5))*calU(u, i - 1)*y[index][i])/factorial(i));
      else
         sum+= ((calU(u, i)*(y[index][i]+y[-- index][i])/(factorial(i)*2)));
   }
   cout<<"Value at "<<value<<" found using Bessels's interpolation is "<<sum;
   return 0;
}

আউটপুট

Value at 53.2 found using Bessels's interpolation is 7.54985

  1. ইন্টারপোলেশন অনুসন্ধান অ্যালগরিদম বাস্তবায়নের জন্য C++ প্রোগ্রাম

  2. C++ এ এনক্যাপসুলেশন

  3. C++ এ শনাক্তকারী

  4. লিনাক্সে C++ এর সেরা IDE কি?