2011-02-08 45 views
6

從哪裏可以得到用D寫的快速線性系統求解器?它應該是能採取的方矩陣和向量​​b和求解方程式 = bb,並且理想地,還對執行顯式倒置。我有一個我自己寫的,但它很慢,可能是因爲它完全緩存天真。但是,對於我的使用情況下,我需要用下面的絕對的,不可轉讓的要求,即東西,如果它不符合這些,那麼我不關心,否則它有多好,否則是:D的快速線性系統求解器?

  1. 必須獲得公共領域許可,Boost許可或類似的許可許可。理想情況下,它不應該要求二進制文件(即不BSD)的歸屬,儘管這一點有點可談。

  2. 必須用純D編寫,或者很容易翻譯爲純D.不管它有多快,不可思議的Fortran代碼(即LAPACK)都不是一個好答案。

  3. 必須針對大型(即n> 1000)系統進行優化。我不想爲遊戲程序員設計真正快速的解決4x4矩陣的問題。

  4. 一定不能與我不需要的大量圖書館密不可分的聯繫在一起。

編輯:之所以這些看似瘋狂的要求,就是我需要,我不希望有任何第三方依賴一個permissively授權的開源庫,這個代碼。

+1

A有哪些屬性?對稱?正?肯定的?殺雞取卵?疏?你要求快速,公共領域並排除LAPACK!這聽起來不像你真的想要一個解決方案!您是否知道所有高性能線性求解器都來自「手冊」? – 2011-02-08 20:01:12

+0

什麼是「手冊」? – Baxissimo 2011-02-08 22:25:05

回答

3

如果你不喜歡Fortran代碼,一個合理快速的C++密集矩陣庫,具有適度的多核心支持,編寫良好的代碼和良好的用戶界面是Eigen。將代碼翻譯爲D(或者從中獲取一些算法)應該很簡單。 「現在我的」思考你的需求「:」大家「(Mathematica,Matlab,Maple,SciPy,GSL,R ......)使用ATLAS/LAPACK,UMFPACK,PARDISO,CHOLMOD等。編寫快速,多線程,高效內存,便攜式和數值穩定的矩陣求解器是很困難的(相信我,我曾嘗試過)。很多這方面的努力已經進入了ATLAS和其他方面。

所以我的方法是根據您的矩陣類型爲相關庫編寫綁定,並從D對C接口進行鏈接。也許綁定在multiarray就夠了(我還沒試過)。否則,我會建議查看另一個C++庫,即uBlas和各自的bindings的想法。