কম্পিউটার টিউটোরিয়াল

বাইসেকশন মেথড (Bisection Method) C++ প্রোগ্রাম


একটি ফাংশন f(x) এবং a, b সংখ্যা দেওয়া আছে যেখানে f(a) * f(b) > 0 এবং f(x) a এবং b-এর মধ্যে থাকে অর্থাৎ f(x) = [a, b]। কাজ হলো বাইসেকশন মেথড ব্যবহার করে f(x)-এ a এবং b ইন্টারভালের মধ্যকার রুটের মান বের করা।

বাইসেকশন মেথড কী?

বাইসেকশন মেথড f(x) ফাংশনে 'a' এবং 'b' লিমিটের মধ্যকার রুটের মান বের করতে ব্যবহৃত হয়। ফাংশনের রুট হলো এমন একটি মান a যাতে f(a) = 0।

উদাহরণ

দ্বিঘাত সমীকরণ F(x) = x^2 - 8। এটি ০ হয় যখন x = 2। অর্থাৎ x^2 - 8 = 0 হলে এই ফাংশনের রুট হবে ২।

যদি একটি ফাংশন f(x) ইন্টারভাল [a..b]-এ কন্টিনিউয়াস হয় এবং f(a) ≠ f(b) সাইন থাকে, তবে একটি মান m থাকবে যা a এবং b-এর মধ্যে অবস্থিত এবং f(m) = 0।

মান m ∈ [a..b] যাতে f(m) = 0। অর্থাৎ m হলো রুটের মান যা একাধিক হতে পারে।

নিচে চিত্র দেওয়া আছে যা f(a) এবং f(b) ইন্টারভাল দেখাচ্ছে। রুট বের করতে লিমিট দুটি ভাগ করে m-এ সংরক্ষণ করা হয়: m = (a + b) / 2

বাইসেকশন মেথড (Bisection Method) C++ প্রোগ্রাম

লিমিট ভাগ করার পর নতুন ইন্টারভাল তৈরি হয়:

বাইসেকশন মেথড (Bisection Method) C++ প্রোগ্রাম

উদাহরণ

ইনপুট: x^3 - x^2 + 2; a = -500, b = 100 আউটপুট: The value of root is : -0.991821
ইনপুট: x^3 - x^2 + 2; a = -200, b = 300 আউটপুট: The value of root is : -1.0025

প্রোগ্রামে ব্যবহৃত পদ্ধতি -

  • ইকুয়েশন এবং a, b ইন্টারভাল ইনপুট নেওয়া।
  • ইন্টারভাল ভাগ করা: m = (a + b) / 2
    • m প্রিন্ট করা রুট হিসেবে।
  • যদি f(m) ≠ 0
    • চেক করুন f(a) * f(m) < 0 হলে রুট a এবং m-এর মধ্যে।
    • চেক করুন f(b) * f(m) < 0 হলে রুট b এবং m-এর মধ্যে।

অ্যালগরিদম

শুরু
ধাপ ১ -> double solution(double x) ফাংশনে
    return x*x*x - x*x + 2
ধাপ ২ -> bisection(double a, double b) ফাংশনে
    যদি solution(a) * solution(b) >= 0 হয়, তবে
        "You have not assumed right a and b" প্রিন্ট
        রিটার্ন
    শেষ
    c = a সেট
    লুপ যতক্ষণ (b-a) >= EP
        c = (a+b)/2 সেট
        যদি solution(c) == 0.0
            ব্রেক
        শেষ
        অন্যথায় যদি solution(c)*solution(a) < 0
            b = c সেট
        শেষ
        অন্যথায়
            a = c সেট
        শেষ
    শেষ
    "The value of root" প্রিন্ট
ধাপ ৩ -> int main() ফাংশনে
    a = -500, b = 100 ইনিশিয়ালাইজ
    bisection(a, b) কল
শেষ

উদাহরণ

#include <iostream>
using namespace std;
#define EP 0.01 // উদাহরণ ফাংশন যার সমাধান বাইসেকশন মেথড দিয়ে নির্ধারিত
// ফাংশন: x^3 - x^2 + 2
double solution(double x) {
    return x*x*x - x*x + 2;
}
// EPSILON এররসহ solution(x)-র রুট প্রিন্ট
void bisection(double a, double b) {
    if (solution(a) * solution(b) >= 0) {
        cout << "You have not assumed right a and b\n";
        return;
    }
    double c = a;
    while ((b-a) >= EP) {
        // মিডিল পয়েন্ট বের করা
        c = (a+b)/2;
        // চেক করা মিডিল পয়েন্ট রুট কিনা
        if (solution(c) == 0.0)
            break;
        // সাইড সিলেক্ট করে ধাপ রিপিট
        else if (solution(c)*solution(a) < 0)
            b = c;
        else
            a = c;
    }
    cout << "The value of root is : " << c;
}
// মেইন ফাংশন
int main() {
    double a = -500, b = 100;
    bisection(a, b);
    return 0;
}

আউটপুট

The value of root is : -0.991821

  1. C++-এ পিরামিডের ভলিউম বের করার প্রোগ্রাম

  2. C++-এ অক্টাহেড্রনের সারফেস এরিয়া বের করার প্রোগ্রাম

  3. C++-এ ডোডেকাহেড্রনের সারফেস এরিয়া বের করার প্রোগ্রাম

  4. C++-এ কুইকসর্ট (QuickSort) প্রোগ্রাম