อภิปรายวิธีการแสดงชุดของจุดด้วยเส้นตรงที่ดีที่สุด เราได้รับค่า (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 เป็นต้น เราหวังว่าคุณจะพบว่าบทช่วยสอนนี้มีประโยชน์