चर्चा करें कि सर्वोत्तम संभव सीधी रेखा द्वारा बिंदुओं के एक सेट का प्रतिनिधित्व कैसे करें। हमें बिंदुओं के एक सेट के मान (x, y) दिए गए हैं, और हमें सबसे अच्छी सीधी रेखा y =mx + c खोजने की आवश्यकता है, इसलिए हमें केवल m और c का मान ज्ञात करना है, उदाहरण के लिए
Input: no_of_points = 4 x1 = 2, y1 = 3, x2 = 5, y2 = 6, x3 = 1, y3 = 3, x4 = 4, y4 = 5. Output: m = 0.8, c = 1.85 Explanation: If we apply the value of m and c in the equation y = mx + c for any point (xi, yi) it would give the best straight line covering all the points. Putting value of m and c in (x2,y2), L.H.S : mx + c = 0.8 * 5 + 1.85 = 5.85 R.H.S : y = 6 which is nearly equal to L.H.S. Input: no_of_points = 3 x1 = 3, y1 = 6, x2 = 2, y2 = 4, x3 = 1, y3 = 3, Output: m = 1.5,c = 1.33
समाधान खोजने के लिए दृष्टिकोण
इस समस्या को हल करने के लिए, हमें m और c के मान ज्ञात करने होंगे। अंकों की संख्या 2 होने पर एक अनूठा समाधान होगा, लेकिन जब कोई बिंदु दो से अधिक नहीं होता है, तो समाधान मौजूद हो भी सकता है और नहीं भी।
आइए अंकों की संख्या को n मान लें,
तो हमारे पास n समीकरण होंगे, fn =mxn + c
इस समीकरण को सबसे अच्छा फिट होने के लिए, हमें y के बराबर या करीब fi का मान ज्ञात करना होगा।
आइए Z =(fi - yi) 2 लें; अब, हमें इस मान को सभी बिंदुओं के लिए न्यूनतम बनाने की आवश्यकता है। हमने नकारात्मक शब्दों को खत्म करने के लिए शब्द ( fi - yi ) को चुकता कर दिया है।
Z के न्यूनतम होने के लिए इसे संतुष्ट करना चाहिए,
(Z) / 𝜹(m) =0 और 𝜹(Z) / 𝜹(c) =0.
इन समीकरणों को हल करने पर,
सिग्मा(y) =m * सिग्मा(x) + no_of_points * c, और
सिग्मा(xy) =m * सिग्मा(x2) + c * सिग्मा(x)।
जो है,
m =(no_of_points * sigma(xy) - sigma(x) 8 sigma(y) ) / (n * sigma(x2) - sigma(x2)) , और
c =(sigma(y) - m * sigma(x)) / no_of_points.
तो अब हमारे पास अंतिम समीकरण के m और c को खोजने का एक सीधा सूत्र है।
उदाहरण
उपरोक्त दृष्टिकोण के लिए C++ कोड
#include <cmath> #include <iostream> using namespace std; int main(){ int X[] = { 3, 2, 1 }; int Y[] = { 6, 4, 3}; int no_of_points = sizeof(X) / sizeof(X[0]); float m, c; int sum_of_X = 0, sum_of_X2 = 0, sum_of_Y = 0, sum_of_XY = 0; // calculating all the terms of the equation. for (int i = 0; i < no_of_points; i++) { sum_of_X = sum_of_X + X[i]; sum_of_X2 = sum_of_X2 + pow(X[i],2); sum_of_Y = sum_of_Y + Y[i]; sum_of_XY = sum_of_XY + (X[i] * Y[i]); } // calculating value of m and c using formula. m = (no_of_points * sum_of_XY - sum_of_X * sum_of_Y) / (no_of_points * sum_of_X2 - pow(sum_of_X,2)); c = (sum_of_Y - m * sum_of_X) / no_of_points; cout << "m = " << m; cout << "\nc = " << c; return 0; }
आउटपुट
m = 1.5 c = 1.33333
निष्कर्ष
इस ट्यूटोरियल में, हमने दिए गए बिंदुओं के सेट का प्रतिनिधित्व करने के लिए सबसे अच्छी फिट सीधी रेखा खोजने पर चर्चा की। हमने पहले एम और सी के लिए सूत्र प्राप्त करके और फिर इसे लागू करके एक सरल दृष्टिकोण पर चर्चा की। हमने इस समस्या के लिए C++ प्रोग्राम पर भी चर्चा की जिसे हम प्रोग्रामिंग भाषाओं जैसे C, Java, Python, आदि के साथ कर सकते हैं। हमें उम्मीद है कि आपको यह ट्यूटोरियल मददगार लगेगा।