我已經編寫了一個程序,生成一些我想計算它們的行列式的N x N
矩陣。與此相關,我有兩個問題計算C數組的行列式
什麼庫是最好的做法?因爲我有數百萬這樣的矩陣,所以我希望儘可能快的庫。
將結果轉換爲整數時,我應該注意哪些細節?我將生成的所有矩陣都有整數行列式,我想確保沒有舍入誤差會歪曲行列式的正確值。
編輯。如果可能,請提供計算推薦庫的決定因素的示例。
我已經編寫了一個程序,生成一些我想計算它們的行列式的N x N
矩陣。與此相關,我有兩個問題計算C數組的行列式
什麼庫是最好的做法?因爲我有數百萬這樣的矩陣,所以我希望儘可能快的庫。
將結果轉換爲整數時,我應該注意哪些細節?我將生成的所有矩陣都有整數行列式,我想確保沒有舍入誤差會歪曲行列式的正確值。
編輯。如果可能,請提供計算推薦庫的決定因素的示例。
至於矩陣庫,它看起來像這個問題,在這裏回答:
Recommendations for a small c-based vector and matrix library
至於鑄造到一個整數:如果決定不的整數,那麼你不應該將其轉換爲整數,您應該使用round
,floor
或ceil
以可接受的方式對其進行轉換。這些可能會給你不可或缺的價值,但你仍然需要施展它們;但是,您現在可以這樣做,而不用擔心丟失任何信息。
你可以用blas和lapack製作奇蹟。它們實際上是用fortran編寫的,從「c」中使用它們是一種調整。但總的來說,他們可以以驚人的速度收縮數字。
你是肯定他們含有rutines來計算行列式? LAPACK常見問題(http://www.netlib.org/lapack/faq.html#_are_there_routines_in_lapack_to_compute_determinants)指出沒有這樣的例程。 – Jernej 2012-07-05 14:30:35
該常見問題解答還表示LAPACK可以解決特徵問題(http://www.netlib.org/lapack/faq.html#_what_and_where_is_lapack)。矩陣的行列式是其特徵值的乘積。 – andand 2012-07-05 14:45:07
對。但是,特徵值可能是令人討厭的實數,其中一個混亂的產品會使計算不穩定 – Jernej 2012-07-05 16:48:54
你有GSL,但選擇真的取決於你的矩陣。矩陣密集還是稀疏? N大還是小?對於小型N,您可能會發現使用Cramer規則或Gauss消除自己編碼行列式的速度更快,因爲大多數高性能函數庫專注於大矩陣,並且其優化可能會在簡單問題上引入開銷。
那麼你的意思是「數以百萬計」?涼。 – unwind 2012-07-05 13:34:31