2014-10-29 14 views
4

我需要解決A x = b,其中A是一個對稱正定矩陣。這可以使用cholesky分解有效地實現。因爲矩陣A將至少有25000 x 25000的尺寸,我不能浪費內存。因此,我想用就地版本Julia的cholfact的:如何在Julia中使用就地版本的cholfact()?

cholfact!(A, :U, pivot = true) 

相比

F = cholfact(A, :U, pivot = true) 

這將節省GB的內存。

但是經過計算,A的類型爲Matrix Float64,而F的類型爲CholeskyPivoted{Float64}。據我所知,就地版本丟失了重要的信息,如數據透視向量F.piv。如何在不浪費內存的情況下正確計算膽固醇分解?

回答

2

你想結合這兩種:

F = cholfact!(A, :U, pivot = true) 

這會返回一個CholeskyPivoted,這確實是你想要的。但是通過使用cholfact!,你說你不在乎A在這個過程中是否被破壞。因此,它將使用分配給A的內存來存儲分解因子(因此銷燬A)。

之後,您應該只使用F而不是A,因爲A已被銷燬。在內部,F將包含對A的引用,因爲它將分解存儲在A中。這可能會更清晰,如果你檢查一下CholeskyPivoted is represented; A將用於該UL字段。

+0

爲什麼這不適合我? 錯誤:無法識別的關鍵字參數「pivot」 in cholfact!在linalg/cholesky.jl:101 – Lindon 2016-02-02 01:29:08

相關問題