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

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