用 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 时,将有一个唯一的解,但当点数大于 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) + 点数 * c,以及
sigma(xy) = m * sigma(x2) + c * sigma(x)。
即,
m = (点数 * sigma(xy) - sigma(x) 8 sigma(y) ) / (n * sigma(x2) - sigma(x2) ),以及
c = ( sigma(y) - m * sigma(x) ) / 点数。
因此,现在我们有了直接的公式来找到最终方程的 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 等编程语言来实现。希望本教程对您有所帮助。
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP