2016-11-11 63 views
1

我有一套数据z(0), z(1), z(2)...,z(n),我目前正在拟合一个2变量多项式的类型p(x,y) = a(1)*x^2+a(2)*y^2+a(3)*x*y+a(4)。我有i=1,...,n(x(i),y(i))坐标,我强加的是p(x(i),y(i))=z(i)。这样我就可以使用Eigen SVD来解决一个超定系统。我正在寻找一种更复杂的方法,可以处理异常值,如最小中值平方稳健回归(如here所述),但我还没有找到2个变量的C++实现。我看着GSL,但似乎没有什么2变量功能。我能想到的唯一的其他解决方案是在ROOT中使用TGraph2D。你知道任何其他解决方案吗?数字食谱可能?由于我正在编写C++代码,我更喜欢C或C++实现。最小平方中值的正方形稳健回归C++

回答

0

既然还没有答案,但我仍然在处理这个问题,我会在这里分享我的进展。

类TLinearFitter有一个合适的方法,它允许您选择强大的配件 - 截尾最小二乘回归(LTS):

https://root.cern.ch/root/html532/TLinearFitter.html

另一种可能的解决方案,更多的时间也许耗时,但也许更多从长远来看高效率是写我自己的功能被最小化,并且使用: https://projects.coin-or.org/Ipopt来最小化它。虽然在这种方法中有一个更大的“步骤”。我不知道如何使用这个库,但我还没有找到一个很好的教程来理解它。

here:https://wis.kuleuven.be/stat/robust/software有一个名为PROGRESS的LMedS算法的Fortran实现。因此,另一个可能的解决方案可能是将此软件移植到C/C++并从中创建一个库。

+0

最后我使用TLinearFitter :: EvalRobust方法。它运作良好,主要缺点当然是性能。 SVD要快得多。 – BiA