2011-10-29 53 views
3

我需要一個庫來解決Ax = b系統,其中A是一個非對稱稀疏矩陣,每行8個入口(它可能相當大)。我認爲一個實現雙漸變漸變的庫應該沒問題,但是我找不到一個可以工作的庫(我試過iml ++,但是在iml ++/sparselib ++包中缺少一些頭文件)。有小費嗎?稀疏矩陣超定線性方程組c/C++庫

+0

你看過http://www.boost.org/doc/libs/1_47_0/libs/numeric/ublas/doc/index.htm嗎? – andand

+0

是的,但我認爲ublas只是一個模板庫,我看不到任何迭代方法來解決稀疏系統,我錯了嗎? – tuccio

+0

有一個稀疏矩陣類。我沒有詳細查看是否有解決方案,但你可能想看看http://www.boost.org/doc/libs/1_47_0/libs/numeric/ublas/doc /matrix_sparse.htm來查看是否有內容可以使用。 – andand

回答

3

有治療超定系統的標準方法。例如Wikipedia這樣說:

一組線性聯立方程式可以用矩陣形式寫成Ax = y。如果有更多的方程而不是變量,系統稱爲超定,並且(通常)沒有解決方案。系統可以改爲(A T A)x = A T y。新系統具有與變量一樣多的方程(矩陣A T A是一個方陣),並且可以用通常的方法解決。該解是原始超定系統的最小二乘解,最小化歐幾里德範數|| Ax-y ||,這是衡量原始系統中雙方之間差異的度量。

因此,您可以使用任何標準方形矩陣稀疏求解器。

我個人使用Tim Davis的CSparse的直接求解器。蒂姆已經寫了一些優秀的直接稀疏求解器。事實上,他的UMFPACK是另一個很好的選擇,例如,MATLAB使用它。請注意,這兩個求解器都提供C接口。如果你正在尋找一些本地C++接口,那麼我沒有什麼可以提供的。

我有一些迭代求解器的經驗。但是,我發現對於我所看到的問題,迭代方法對於大型矩陣變得不穩定。直接求解器使我獲得了更多的成功。當然,根據你問題產生的矩陣類型,你可以有相反的經驗是完全合理的。

+0

非常感謝,這一直很有幫助,我現在正在使用umfpack(這是非常煩人的做一個視覺工作室項目來編譯它:D),它似乎工作正常 – tuccio

+0

你沒有接受答案。你有問題嗎? –

+0

是的,我很痙攣,我甚至沒有注意到我切換它:D – tuccio

0

看起來像ARPACK解決了稀疏非對稱矩陣問題。有一個C++版本

+0

ARPACK是一個特徵解算器。這是宏偉的,但問題涉及一個不同的問題。 –

0

對David Heffernan的回答:不要忘記一件重要的事情:必須檢查/證明矩陣A具有線性獨立的列,否則可能發生(A^TA)單數(然後它不起作用,課程)。