সর্বোত্তম সম্ভাব্য সরলরেখা দ্বারা বিন্দুগুলির একটি সেট কীভাবে উপস্থাপন করবেন তা আলোচনা করুন। আমাদেরকে বিন্দুগুলির একটি সেটের মান (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++ প্রোগ্রাম নিয়েও আলোচনা করেছি যা আমরা সি, জাভা, পাইথন ইত্যাদি প্রোগ্রামিং ভাষার সাথে করতে পারি। আমরা আশা করি এই টিউটোরিয়ালটি আপনার কাজে লাগবে।