用 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
为了使这个方程最合适,我们需要找到等于或接近yi的fi值。
让我们取Z=(fi-yi)2;现在,我们需要使所有点的这个值最小。我们对项(fi-yi)进行平方以消除负项。
为了使Z最小,这应该满足,