2016-11-11 78 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