0

我希望我只是错过了一个简单的矩阵算术技巧,但我遇到的问题是我只能使用一个 LU 求解器(Matlab LU* 或 SuperLU),我需要一个对称的 LDL 分解矩阵 A. 所以我认为“没问题”,因为 LU 分解是唯一的,而 LDL 分解是唯一的,所以 D 只是 U 的对角线。

但问题是它永远不会 A = LU,而是 PA = LU 并且 PA 不是对称的!所以我不知道如何从 PA = LU 确定 A = LDL

我可以做一些简单的事情来解决这个问题吗?任何帮助是极大的赞赏。

PS先发制人:是的,我真的,真的,真的,真的需要分解低密度脂蛋白。不是没有其他选择。是,我确定。不,您不需要我为您列出确切的问题来确认我确实需要进行 LDL 分解。

*我知道 Matlab 有它自己的 LDL 函数,但我只是用它来制作原型,而我在 C++(主要是 SuperLU)中可用的库似乎没有任何这样的函数。

4

1 回答 1

1

使用 [L,U] = LU_decomposition(A)。然后计算 D=U inv(transpose(L))。然后它成立 A = L U = L * D * L'。请注意,D 是右上三角,因为 inv(transpose(L)) 和 U 是右上三角。

显然,如果 A 是对称的,则 D 是对称的,你就有了 LDLT 分解。希望有帮助。

干杯,马丁

于 2018-02-21T02:21:06.847 回答