8

以前は MATLAB を使用していましたが、私が提起した質問に対して、p = polyfit(x,y,1) を使用して、プレート内の散乱データに最適な線を推定できました。C++ でライン フィッティング アルゴリズムを実装するために、どのリソースを利用できるか疑問に思っていました。このテーマには多くのアルゴリズムがあることを理解しています。私にとって、アルゴリズムは高速である必要があり、その間、MATLAB で polyfit 関数の同等の精度を得ることができると期待しています。

4

7 に答える 7

7

ゼロからコーディングすることをお勧めします。これは、C++での非常に単純な実装です。polyfitここの式から直接、データから最小二乗近似の切片と勾配の両方をコード化できます(と同じ方法)。

http://en.wikipedia.org/wiki/Simple_linear_regression#Fitting_the_regression_line

これらは閉じた形式の数式であり、ループを使用して簡単に評価できます。より高度な近似を使用している場合は、行列ライブラリまたはより高度なアルゴリズムをお勧めしますが、上記で説明した単純な線形回帰の場合、必要なのはこれだけです。行列と線形代数のルーチンは、そのような問題にはやり過ぎでしょう(私の意見では)。

于 2012-07-12T10:14:39.460 に答える
1

この実装を使用したり調べたりすることもできます。ここにはドキュメントもあります。

于 2012-07-12T10:31:14.830 に答える
0

線に合わせるには、次のようにy=param[0]x+param[1]します。

// loop over data:
{               
sum_x += x[i];
sum_y += y[i];
sum_xy += x[i] * y[i];
sum_x2 += x[i] * x[i];
}

// means
double mean_x = sum_x / ninliers;
double mean_y = sum_y / ninliers;

float varx = sum_x2 - sum_x * mean_x;
float cov = sum_xy - sum_x * mean_y;

// ゼロ varx をチェック

param[0] = cov / varx;
param[1] = mean_y - param[0] * mean_x;

トピックの詳細http://easycalculation.com/statistics/learn-regression.php (数式は同じです。N を掛けて割っただけで、サンプル サイズです)。平面を 3D データに合わせたい場合は、同様のアプローチを使用します - http://www.mymathforum.com/viewtopic.php?f=13&t=8793

免責事項: すべての 2 次近似は線形であり、パラメーターのノイズを減らすという意味で最適です。ただし、代わりにデータのノイズを減らすことに関心があるかもしれません。外れ値はソリューションに大きな偏りを与える可能性があるため、無視することもできます。どちらの問題も RANSAC で解決できます。私の投稿を参照してください:

于 2013-04-05T17:31:28.693 に答える