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 軸の値が含まれています (各ペアの 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

4

1 に答える 1

0

申し訳ありませんが、私はそれを理解することができました。配列内のすべてのY値から最初のポイントのY値を減算する必要があります。次に、「原点を通る力」を使用して計算を実行します。

もちろん、この関数は切片値0を返します。これは無視して、代わりに最初のY値を切片として使用する必要があります。

于 2013-02-08T10:13:13.290 に答える