如何在Julia中使用cholfact()的就地版本?

时间:2014-10-29 15:24:38

标签: linear-algebra julia

我需要解决 A x = b,其中 A 是对称的正半确定矩阵。这可以使用cholesky分解有效地实现。因为矩阵 A 至少具有25000 x 25000的尺寸,所以我不能浪费内存。因此,我想使用Julia's cholfact的原位版本:

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

相比
F = cholfact(A, :U, pivot = true)
这将节省千兆字节的内存。

但在计算之后,A的类型为Matrix Float64,而F的类型为CholeskyPivoted{Float64}。据我所知,就地版本丢失了基本信息,例如数据透视矢量F.piv。如何在不浪费内存的情况下正确计算cholesky分解?

1 个答案:

答案 0 :(得分:2)

您希望将这两者结合起来:

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

这会返回CholeskyPivoted,这确实是你想要的。但是,通过使用cholfact!,您说您不关心A是否在此过程中被销毁。因此,它将使用为A分配的内存来存储分解(从而销毁A)。

之后,您应该只使用F,而不是A,因为A已被销毁。在内部,F将包含对A的引用,因为它将分解存储在A中。如果你研究CholeskyPivoted is represented的方式,这可能会更清楚; A字段将用于UL字段。