কম্পিউটার

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

এই সমীকরণটি সর্বোত্তম মানানসই হওয়ার জন্য, আমাদের ফাই-এর মান খুঁজে বের করতে হবে, সমান বা yi-এর কাছাকাছি।

Z =( fi - yi )2 ধরা যাক; এখন, আমাদের সমস্ত পয়েন্টের জন্য এই মানটিকে সর্বনিম্ন করতে হবে। নেতিবাচক পদগুলি দূর করতে আমরা শব্দটি ( fi - yi ) বর্গ করেছি৷

Z ন্যূনতম হওয়ার জন্য এটি সন্তুষ্ট হওয়া উচিত,

𝜹(Z) / 𝜹(m) =০ এবং 𝜹(Z) / 𝜹(c) =০।

এই সমীকরণগুলি সমাধান করার সময়,

sigma(y) =m * sigma(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 =( সিগমা(y) - m * সিগমা(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

উপসংহার

এই টিউটোরিয়ালে, আমরা একটি নির্দিষ্ট পয়েন্টের সেটকে উপস্থাপন করার জন্য সর্বোত্তম উপযুক্ত সরলরেখা খুঁজে বের করার বিষয়ে আলোচনা করেছি। আমরা প্রথমে m এবং c এর সূত্রটি বের করে এবং তারপরে এটি প্রয়োগ করে একটি সহজ পদ্ধতি নিয়ে আলোচনা করেছি। আমরা এই সমস্যার জন্য C++ প্রোগ্রাম নিয়েও আলোচনা করেছি যা আমরা সি, জাভা, পাইথন ইত্যাদি প্রোগ্রামিং ভাষার সাথে করতে পারি। আমরা আশা করি এই টিউটোরিয়ালটি আপনার কাজে লাগবে।


  1. C++ এ প্রদত্ত আকারের আয়তক্ষেত্রের ভিতরে সম্ভাব্য রম্বির সংখ্যা গণনা করুন

  2. C++ এ একটি লাইনের মধ্যবিন্দু খুঁজে বের করার জন্য প্রোগ্রাম

  3. C++ এ একটি লাইনে সর্বোচ্চ পয়েন্ট

  4. C++ এ পয়েন্টের একটি নির্দিষ্ট সেটের জন্য সহজ বন্ধ পথ খুঁজুন