我有一组数据z(0), z(1), z(2)...,z(n)
,我目前正在使用p(x,y) = a(1)*x^2+a(2)*y^2+a(3)*x*y+a(4)
种类的2变量多项式。我有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 ++实现。
答案 0 :(得分:0)
由于尚未给出答案,但我仍然在研究这个问题,我将在此分享我的进展。
类TLinearFitter有一个拟合方法,允许您选择鲁棒拟合 - 最小修正方形回归(LTS):
https://root.cern.ch/root/html532/TLinearFitter.html
另一种可能的解决方案,可能更耗时,但从长远来看,可能更高效的是编写我自己的函数以最小化,并使用: https://projects.coin-or.org/Ipopt尽量减少它。虽然在这种方法中有一个更大的“步骤”。我不知道如何使用该库,但我还没有找到一个很好的教程来理解它。
这里:https://wis.kuleuven.be/stat/robust/software有一个名为PROGRESS的LMedS算法的Fortran实现。因此,另一种可能的解决方案是将该软件移植到C / C ++并从中创建一个库。