加权线性最小二乘线性拟合。如何强制通过第一点在线?

时间:2013-02-08 09:54:06

标签: math alglib

我正在使用alglib使用最小二乘线性拟合方程计算斜率和截距值,如下所示: -

int info;
double[] c;
alglib.lsfitreport rep;
var fmatrix = new double[,] { { 1, 0 }, { 1, 0.05 }, { 1, 0.1 }, { 1, 0.2 } };
var y = new double[] { 32046, 32260, 32296, 32678 };
var w = new double[] { 1, 1, 1, 1 };

alglib.lsfitlinearw(y, w, fmatrix, out info, out c, out rep);

var intercept = c[0];
var slope = c[1];

“fmatrix”包含我的x轴值(每对中的第二个: - 0,0.05,0.1,0.2); “y”显然保持我的y轴值; “w”是权重 - 在这种情况下全部为1,因此在此示例中不应用权重。

现在,我需要应用几种不同的“强迫”。我已经设法通过将每个fmatrix对的第一个值从“1”改为“0”来找到“强制通过原点”,即:

var fmatrix = new double[,] { { 0, 0 }, { 0, 0.05 }, { 0, 0.1 }, { 0, 0.2 } };

但是我还需要强制通过第一个点(x = 0,y = 32046)。任何想法如何实现这一目标?数学不是我的强项,我不太了解函数的文档:http://www.alglib.net/translator/man/manual.csharp.html#sub_lsfitlinearw

1 个答案:

答案 0 :(得分:0)

道歉,我设法弄明白了。我必须从数组中的所有Y值中减去第一个点的Y值。然后我使用“force through origin”执行计算。

该函数当然会返回0的截距值,我应该忽略它,并使用第一个Y值作为截距。