我希望我只是错过了一个矩阵算术的简单技巧,但我现在遇到的问题是,我能访问的只是一个LU求解器(Matlab LU*或SuperLU),我需要一个对称矩阵a的LDL分解,所以我想“没问题”,因为LU分解是唯一的,LDL分解也是唯一的,那么D就是U的对角线。
但问题是它从来不是A=LU,而是PA=LU,而且PA不是对称的!所以我不知道如何从PA=LU确定A=LDL
我能做点什么简单的事来解决这个问题吗?如有任何帮助,不胜感激。
附注。先发制人:是的,我真的真的真的真的需要一个LDL分解。没有别的选择。是的,我肯定。不,你不需要我为你布置确切的问题,以确认我确实需要一个LDL分解。
*我知道Matlab有它自己的LDL函数,但我只是用它来做原型,而我在C++中可用的库(大部分是SuperLU)似乎没有任何这样的函数。
使用[L,U]=LU_decomposition(A)。然后计算d=uinv(transpose(1))。则它保持A=LU=L*D*L'。注意,D是右上角三角形,因为inv(transpose(L))和U是右上角三角形。
显然,如果A是对称的,那么D也是对称的,你就有了LDLT分解。希望能帮上忙。
干杯,马丁