当我拥有的是一个始终应用旋转的LU解算器时,如何进行LDL分解?

时间:2017-10-12 12:03:21

标签: matlab matrix matrix-decomposition

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

但问题是它从来没有A = LU,而是PA = LU和PA不对称!所以我无法弄清楚如何从PA = LU

确定A = LDL

我能做些什么容易解决这个问题吗?非常感谢任何帮助。

P.S。先发制人:是的,我真的,真的,真的,确实需要LDL分解。不存在其他选择。是的,我确定。不,你不需要我列出确切的问题,以确认我确实需要LDL分解。

*我知道Matlab有自己的LDL功能,但我只使用它进行原型化,而C ++中可用的库(主要是SuperLU)似乎没有任何这样的功能。

1 个答案:

答案 0 :(得分:1)

使用[L,U] = LU_decomposition(A)。然后计算D = U inv(转置(L))。然后它保持A = L U = L * D * L'。请注意,D是右上角三角形 inv(transpose(L))和U是右上角三角形。

显然,如果A是对称的,那么D是对称的,你有你的LDLT分解。希望有所帮助。

干杯, 马丁