फंक्शन 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 यह समीकरण 0 के बराबर होता है जब x का मान 2 होगा यानी 2^2 - 8 = 0 तो, इस द्विघात फंक्शन F(x) का रूट 2 होगा।
अब, यदि फंक्शन 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

सीमाओं के विभाजन के बाद नया अंतराल उत्पन्न होगा जैसा कि नीचे दिए गए आंकड़े में दिखाया गया है

उदाहरण
इनपुट-: x^3 - x^2 + 2 ; a =-500 और b = 100 आउटपुट-: रूट का मान है : -0.991821 इनपुट-: x^3 - x^2 + 2 ; a =-200 और b = 300 आउटपुट-: रूट का मान है : -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 के बीच होगा
एल्गोरिदम
शुरुआत चरण 1-> फ़ंक्शन double solution(double x) में x*x*x - x*x + 2 वापस करें चरण 2-> फ़ंक्शन bisection(double a, double b) में यदि solution(a) * solution(b) >= 0 तो, "आपने सही a और b नहीं माना" प्रिंट करें वापस करें अंत यदि c = a सेट करें लूप जब तक (b-a) >= EP c = (a+b)/2 सेट करें यदि solution(c) == 0.0 ब्रेक अंत यदि अन्यथा यदि solution(c)*solution(a) < 0 b = c सेट करें अंत अन्यथा यदि अन्यथा a = c सेट करें अंत अन्यथा अंत "रूट का मान" प्रिंट करें चरण 3-> फ़ंक्शन 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 << "आपने सही a और 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 << "रूट का मान है : " << c; } // मुख्य फ़ंक्शन int main() { double a =-500, b = 100; bisection(a, b); return 0; }आउटपुट
रूट का मान है : -0.991821