2012-10-04 61 views
1

我正在尋找一個軟件包來解決非常大的,C++中的稀疏非線性最小二乘問題。我在C++中遇到了大量現代的linalg庫(eigen,犰狳,boost等),但似乎沒有內置這樣的求解器(甚至是規則最小二乘求解器)。我真的如果可能的話,要避免一堆亂七八糟的調用到舊的C/Fortran接口。謝謝!C++中的稀疏非負最小二乘方

+1

你可以看看[SuiteSparse](http://www.cise.ufl.edu/research/sparse/SuiteSparse/) – enobayram

回答

0

我會簡單地使用用C++編寫的通用NLP求解器IPOPT。它是我嘗試過的最穩健的求解器,它的含義和成功用於非常大的問題。

如果您使用通用IPOPT,則需求的變化(例如添加約束)將不成問題。

解決方案過程耗時的一部分是在每個迭代步驟中解決線性系統問題,因此值得爲您的平臺獲得最佳線性求解器+ LinAlg包。

不幸的是,IPOPT在內部調用Fortran子程序,因此您將需要一個Fortran編譯器,這有點痛苦。

如果IPOPT不夠,您將不得不尋找問題特定的求解器。

+0

Hi @Ali。這是有道理的,但我唯一擔心的是,爲所有變量添加非負性約束可能會帶來很多開銷,而專用的非負最小二乘解算器可能會更有效地整合這些約束。無論如何,如果第二天沒有更多的建議,那麼我會將你的答案標記爲已接受;謝謝! – nomad

+0

@nomad是的,它很容易發生,IPOPT不是你最好的工具。你的問題有多大? – Ali

+0

我的矩陣是50萬乘96K,每列有幾百個條目。所以它非常稀疏,但*巨大*。 – nomad

0

如果您不需要限制,請嘗試使用Ceresg2o。兩者都建立在Eigen之上,並且可以使用稀疏矩陣求解器,即SuiteSparse和朋友。