2013-02-08 68 views
0

我使用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,因此在这个例子中没有权重。

现在,我需要应用几个不同的“强迫症”。我已经成功的从“1”到“0”改变各fmatrix对的第一个值,以找到如何“通过原点力”,即:

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

回答

0

道歉,我设法弄明白了。我必须从数组中的所有Y值中减去第一个点的Y值。然后我使用“通过原点强制”进行计算。

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