अरैखिक समीकरणों को हल करने के लिए सिकेन्ट विधि का भी प्रयोग किया जाता है। यह विधि न्यूटन-रैफसन विधि के समान है, लेकिन यहाँ हमें फलन f(x) का विभेदन ज्ञात करने की आवश्यकता नहीं है। केवल f(x) का उपयोग करके, हम न्यूटन के डिवाइड डिफरेंस फॉर्मूला का उपयोग करके संख्यात्मक रूप से f'(x) पा सकते हैं। न्यूटन-रैफसन सूत्र से,
हम जानते हैं कि,
अब, डिवाइड डिफरेंस फॉर्मूला का उपयोग करते हुए, हम प्राप्त करते हैं,
न्यूटन-रैफसन सूत्र के f'(x) को नए f'(x) द्वारा प्रतिस्थापित करके, हम गैर-रैखिक समीकरणों को हल करने के लिए secant सूत्र पा सकते हैं।
नोट: इस पद्धति के लिए, हमें गैर-रैखिक समीकरणों की जड़ खोजने के लिए किन्हीं दो प्रारंभिक अनुमानों की आवश्यकता है।
इनपुट और आउटपुट
Input: The function f(x) = (x*x) - (4*x) - 10 Output: The root is: -1.74166
एल्गोरिदम
secant(x1, x2)
इनपुट: रूट के लिए दो प्रारंभिक अनुमान।
आउटपुट: एक गैर-रैखिक समीकरण f(x) की अनुमानित जड़।
Begin f1 := f(x1) f2 := f(x2) x3 := ((f2*x1) – (f1*x2)) / (f2 – f1) while relative error of x3 and x2 are > precision, do x1 := x2 f1 := f2 x2 := x3 f2 := f(x2) x3 := ((f2*x1) – (f1*x2)) / (f2 – f1) done root := x3 return root End
उदाहरण
#include<iostream> #include<cmath> using namespace std; double absolute(double value) { //to find magnitude of value if(value < 0) return (-value); return value; } double f(double x) { //the given function x^2-4x-10 return ((x*x)-(4*x)-10); } double secant(double x1, double x2) { double x3, root; double f1, f2; f1 = f(x1); f2 = f(x2); x3 = (f2*x1-f1*x2)/(f2-f1); while(absolute((x3-x2)/x3) > 0.00001) { //test accuracy of x3 x1 = x2; //shift x values f1 = f2; x2 = x3; f2 = f(x2); //find new x2 x3 = (f2*x1-f1*x2)/(f2-f1); //calculate x3 } root = x3; return root; //root of the equation } main() { double a, b, res; a = 0.5; b = 0.75; res = secant(a, b); cout << "The root is: " << res; }
आउटपुट
The root is: -1.74166