使用线性编程找到“最佳拟合线”

时间:2013-04-09 08:23:00

标签: algorithm

这是一个家庭作业问题。我被要求找到给定的一组n个点(2D)的最佳拟合线的系数。系数是abc in:ax + by = c。有n个点,使用线性编程找到导致最小“最大绝对误差”的系数,定义为:max(| a * xi + b * yi -c |),i的范围是1-n。

这是我的思考过程:

设M表示最大绝对误差。线性规划的目标是最小化M.因为M是所有| a * xi + b * yi-c |中最大的,所以它必须大于它们中的每一个。因此(a * xi + b * yi-c)< = M,并且(a * xi + b * yi-c)> = -M,对于所有i(第二个表达式是考虑绝对符号) 。

我认为这足以定义问题。当我将条件放入求解器时,它返回一个等于0的b c,但实际上它不应该。我想我在这里错过了一些条件。有人能指出我吗?

1 个答案:

答案 0 :(得分:2)

你应该添加一个额外的语句:a或b不应该是0.如果两个值都是0,你有一个有效的系统解决方案,但没有a和b都等于0的行。

编辑:改进Rerito的建议。任何行都有a或b不等于0.对于任何非零k,行(k*a)*x + (k*b)* y + (k*c)(a)*x + (b)* y + (c)都是相同的。所以我会说你需要运行解算器两次 - 一次指定a为1时,一次指定b为1,然后选择更好的解决方案。您必须运行解算器两次,因为最佳解决方案可能是a=0b=0(但不是两者)。