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

我需要解决Ax = 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分解?

最佳答案 你想结合这两个:

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

这会返回一个CholeskyPivoted,这确实是你想要的.但是通过使用cholfact !,你说你不关心A是否在这个过程中被破坏了.因此,它将使用为A分配的存储器来存储因子分解(从而破坏A).

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

点赞