Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में सर्वोत्तम संभव सीधी रेखा द्वारा दिए गए बिंदुओं के सेट का प्रतिनिधित्व करें

चर्चा करें कि सर्वोत्तम संभव सीधी रेखा द्वारा बिंदुओं के एक सेट का प्रतिनिधित्व कैसे करें। हमें बिंदुओं के एक सेट के मान (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, आदि के साथ कर सकते हैं। हमें उम्मीद है कि आपको यह ट्यूटोरियल मददगार लगेगा।


  1. C++ में एक लाइन के मध्य-बिंदु को खोजने का प्रोग्राम

    इस समस्या में, हमें दो बिंदु A और B दिए गए हैं, जो एक रेखा के आरंभ और अंत बिंदु हैं। हमारा काम C++ में एक लाइन के मध्य-बिंदु को खोजने के लिए एक प्रोग्राम बनाना है। समस्या का विवरण - यहाँ, हमारे पास एक रेखा है जिसमें शुरुआती और अंत बिंदु A(x1, y1) और B(x2, y2) हैं। और हमें रेखा के मध्य-बिंदु को खोजन

  1. सी ++ में एक लाइन पर मैक्स पॉइंट्स

    मान लीजिए कि हमारे पास 2D प्लेन है। हमें एक ही सीधी रेखा पर रहने वाले बिंदुओं की अधिकतम संख्या ज्ञात करनी है। तो अगर अंक इस तरह हैं - फिर 4 अंक होते हैं इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - n :=अंकों की संख्या, यदि n <3 है, तो n लौटाएं उत्तर :=2 मैं के लिए 1 से n - 1 की सीमा

  1. सी ++ में दिए गए बिंदुओं के सेट के लिए सरल बंद पथ खोजें

    विचार करें कि हमारे पास बिंदुओं का एक सेट है। हमें सभी बिंदुओं को कवर करते हुए एक सरल बंद रास्ता खोजना होगा। मान लीजिए कि बिंदु नीचे की तरह हैं, और अगली छवि उन बिंदुओं पर एक बंद पथ बना रही है। रास्ता पाने के लिए हमें इन चरणों का पालन करना होगा - नीचे बाएँ बिंदु को P के रूप में खोजें अन्य n