বিষয়বস্তুতে চলুন

সাংখ্যিক বিশ্লেষণ/নিউটনীয় দ্বিখন্ডন পদ্ধতি

উইকিবই থেকে

নিউটনীয় দ্বিখন্ডন পদ্ধতিতে বীজগাণিতিক সমীকরণের সমাধান নির্নয় করা যায়। এজন্য একটা পরিসীমা নিতে হয় যেই পরিসীমাতে আমরা ধারনা করছি যে আমাদের সমাধানটি আছে। তারপর মধ্যবিন্দুতে সমাধান আছে কিনা দেখবো, যদি না থাকে তাহলে সমাধানটি মধ্যবিন্দুর কোন পাশে আছে সেটা বের করে পরিসীমাকে ওইপাশে নিয়ে নিব।

অনেকটা বাইনারি সার্চ এর মতো, কিন্তু আমরা এখানে একটা বীজগাণিতিক সমীকরণের সমাধান বের করছি।

নিম্নে নিউটনীয় দ্বিখন্ডন পদ্ধতিতে x3-x-2=0 এর সমাধান করা হলো:

#include <stdio.h>
#include <math.h>
 
double f(double x) { return x*x*x - x - 2; }
 
int main() {
    double a = 1, b = 2, c;
    while ((b - a) >= 1e-5) {
        c = (a + b) / 2;
        if (f(c) == 0.0) break;
        else if (f(c) * f(a) < 0) b = c;
        else a = c;
    }
    printf("সমাধান: %lf\n", c);
}

উপরের কোডে double f(double x) { return x*x*x - x - 2; } দিয়ে f(x)=x3-x-2 সংজ্ঞায়িত করা হয়েছে। তারপর double a = 1, b = 2; দিয়ে আমরা প্রাথমিক পরিসীমাটি নির্ধারন করে দিলাম, আমরা ধারনা করছি আমাদের সমাধান 1 থেকে 2 এর মধ্যেই আছে। এরপর লুপের ভিতরে a এবং b খুব কাছাকাছি না আসা পর্যন্ত c = (a + b) / 2; এ c কে a এবং b এর মধ্যবিন্দু হিসাবে নেয়। তারপর দেখি c সমীকরণটির মূল কিনা(f(c) == 0.0)। যদি মূল না হয়ে থাকে, f(c) * f(a) < 0 তে দেখি f(c) এবং f(a) পরস্পরের বিপরীত চিহ্নযুক্ত কিনা অর্থাৎ একটি ধনাত্মক ও অপরটি ঋণাত্মক। যদি তা হয়ে থাকে তবে মূলটি a এবং c এর মধ্যে অবস্থিত নাহলে তা c এবং b এর মধ্যে অবস্থিত।

কাজ: নিউটনীয় দ্বিখন্ডন দিয়ে বর্গমূল বের করা।