อภิปรายวิธีการแสดงชุดของจุดด้วยเส้นตรงที่ดีที่สุด เราได้รับค่า (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
เพื่อให้สมการนี้เหมาะสมที่สุด เราต้องหาค่าของ fi เท่ากับหรือใกล้เคียงกับ yi
ลองใช้ Z =( fi - yi )2; ตอนนี้ เราต้องทำให้ค่านี้ต่ำสุดสำหรับทุกจุด เรายกกำลังสองเทอม ( fi - yi ) เพื่อกำจัดเทอมเชิงลบ
สำหรับ Z ที่น้อยที่สุด สิ่งนี้ควรตอบสนอง
𝜹(Z) / 𝜹(m) =0 และ 𝜹(Z) / 𝜹(c) =0.
ในการแก้สมการเหล่านี้
sigma(y) =m * sigma(x) + no_of_points * c และ
ซิกมา(xy) =ม. * ซิกมา(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
บทสรุป
ในบทช่วยสอนนี้ เราได้พูดคุยกันถึงการหาเส้นตรงที่เหมาะสมที่สุดเพื่อแสดงชุดของคะแนนที่กำหนด เราได้พูดคุยถึงแนวทางง่ายๆ โดยการหาสูตรของ m และ c ก่อน แล้วจึงนำไปใช้ เรายังพูดถึงโปรแกรม C++ สำหรับปัญหานี้ ซึ่งเราสามารถทำได้ด้วยภาษาโปรแกรม เช่น C, Java, Python เป็นต้น เราหวังว่าคุณจะพบว่าบทช่วยสอนนี้มีประโยชน์