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,因此在此示例中未应用权重。

现在,我需要应用几个不同的“强制”。我设法通过将每个 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

4

1 回答 1

0

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

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

于 2013-02-08T10:13:13.290 回答