次のように、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 軸の値が含まれています (各ペアの 2 番目:- 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