LDL

厄米特不定矩阵的块LDL分解

语法

L = LDL(A)
[L、D] =低密度脂蛋白(A)
[L D P] =低密度脂蛋白(A)
[L,d,P] = LDL(A, '载体')
[U,d,P] = LDL(A, '上部')
(U D p) =低密度脂蛋白(“上”,“矢量”)
[L D P, S] =低密度脂蛋白(A)
[L D P, S] =低密度脂蛋白(一打)
[U,d,P,S] = LDL(A,THRESH, '上', '矢量')

描述

L = LDL(A)只返回置换下三角矩阵l如在双输出形式。置换信息丢失,因为是块对角因子D。默认情况下,LDL只引用的对角线和下三角一个,并假设上三角形是下三角形的共轭复数转置。因此[L,d,P] =低密度脂蛋白胆固醇(TRIL(A))[L D P] =低密度脂蛋白(A)都返回完全相同的因素。注意,此语法对稀疏无效一个

[L、D] =低密度脂蛋白(A)存储块对角矩阵D和置换下三角矩阵中l这样一个= L * D * L '。该块对角矩阵D对角线上分别有1×1和2×2的方块。注意,此语法对稀疏无效一个

[L D P] =低密度脂蛋白(A)返回单位下三角矩阵l、块对角D和置换矩阵P这样P ' * * P = L * D * L '。这就等于(L D P) =低密度脂蛋白(A,“矩阵”)

[L,d,P] = LDL(A, '载体')返回置换信息作为载体,p,而不是矩阵。该p输出是一个行向量,使得A(P,P)= L * d * L”

[U,d,P] = LDL(A, '上部')只引用的对角线和上三角形一个假设下三角形是上三角形的共轭复数转置。该语法返回一个单元上三角矩阵U这样P ' * * P = U ' * D * U(假如说一个是埃尔米特,而不仅仅是上三角)。同样的,[L,d,P] = LDL(A, '下')给出了默认的行为。

(U D p) =低密度脂蛋白(“上”,“矢量”)返回置换信息作为载体,p一样,[L,d,P] = LDL(A, '下部', '矢量')一个必须是一个完整的矩阵。

[L D P, S] =低密度脂蛋白(A)返回单位下三角矩阵l、块对角D,置换矩阵P和缩放矩阵年代这样P '* S * A * S * P = L * d * L'。该语法仅适用于真正的稀疏矩阵,且仅适用于的下三角形一个引用。LDL使用MA57稀疏实对称一个

[L D P, S] =低密度脂蛋白(一打)使用THRESH如MA57中的枢轴公差。THRESH必须是双标量躺在间隔[0,0.5]。的默认值THRESH0.01。使用较小的值THRESH可能会给更快分解时间和更少的条目,但也可能导致不太稳定的分解。此语法仅适用于真正的稀疏矩阵可用。

[U,d,P,S] = LDL(A,THRESH, '上', '矢量')设置枢轴公差并返回上三角U和排列矢量p如上所述。

例子

这些例子说明了the的各种形式的用法LDL功能,包括一维,二维和三输出形式,以及使用的向量选项。所涵盖的主题包括:

在运行任何这些例子之前,你需要生成以下积极的定冠词和不定埃尔米特矩阵:

甲=满(delsq(numgrid( 'L',10)));B =廊( 'uniformdata',10,0);M = [眼(10)B;B”零(10)];

的结构这里是很常见的最优化和流问题,和实际上是不确定的。注意正定矩阵一个必须满,如LDL不接受稀疏参数。

例1 -双输出形式的ldl

的双输出形式LDL返回lD这样A-(L * d * L')很小,l被置换单元下三角,和D是一个块2×2对角线。还要注意的是,由于一个正定,对角线D都是正面的:

[LA,DA] = LDL(A);fprintf中(1,...... '的因式分解误差|| A  -  LA * DA * LA' '||就是%克\ n',...范数(A  -  LA * DA * LA'));neginds =查找(DIAG(DA)<0)

特定一个b,解决Ax = b使用LA,:

英航=和(2);x = LA ' \ (DA \ (LA \ bA));流(…'绝对误差规范||x - ones(大小(bA))||是%g\n',…规范(x - 1(大小(bA))));

实施例2 - LDL的三个输出方式

三个输出形式也返回排列矩阵,因此l实际上是单位下三角形:

[LM,DM,PM] = LDL(M);fprintf中(1,...... '的误差范|| PM' '* M * PM  -  Lm的* DM * Lm的' '||就是%克\ n',...规范(PM'* M * PM  -  Lm的* DM * Lm的'));fprintf中(1,...... 'Lm与TRIL(LM之间的差值)是%克\ n',...规范(LM  -  TRIL(LM)));

特定b,解决Mx = b使用LM,Dm:

bM = (M, 2)之和;x =点* (Lm \ (Dm \ (Lm \ (Pm“* * bM))));fprintf中(...... '的绝对误差范数|| X  - 酮(大小(B))||就是%克\ n',...范数(X  - 酮(大小(BM))));

实施例3 - d的结构

D是一个1×1块和2×2块的块对角矩阵。这使它成为三对角矩阵的一种特殊情况。当输入矩阵为正定时,D几乎总是对角线的(取决于矩阵的确定程度)。但当矩阵不确定时,D可以是对角线,或者它可以表示块结构。例如,一个如上所述,是对角线。但是,如果你转移一个只是有点,你最终无限期矩阵,然后就可以计算D它有块结构。

数字;间谍(DA);标题( '从LDL(A)d的结构');[拉斯维加斯,达斯] = LDL(A  -  4 *眼(尺寸(A)));数字;间谍(DAS);标题( '从LDL d的结构(A  -  4 *眼(尺寸(A)))');

实施例4 - 使用“载体”选项

函数,LDL接受一个参数,该参数决定函数返回的是置换向量还是置换矩阵。LDL返回后者在默认情况下。当您选择“向量”,该函数执行速度更快,占用内存更少。出于这个原因,指定“向量”选择建议。另一件需要注意的事情是,对于这种操作,索引通常比乘法快:

[Lm, Dm, pm] = ldl(M, 'vector');流(1,错误规范| | M(点、点)- Lm * Dm * Lm”| | % g \ n’,……规范(M(点、点)- Lm * Dm * Lm '));用这种分解方法求解方程组。清楚x;:x (pm) = Lm ' \ (Dm \ (Lm \ (bM(点,:))));fprintf('The absolute error norm ||x - ones(size(b))|| is %g\n',…规范(x - 1(大小(bM))));

例5 -使用‘upper’选项

CHOL函数,LDL接受确定哪个输入矩阵的三角形被参考,以及是否一个参数LDL返回较低(l)或以上(L”)三角因素。对于密集矩阵,有与使用上三角版本,而不是下三角版本没有真正的节约:

毫升= TRIL(M);[LML,DML,PML] =低密度脂蛋白胆固醇(毫升, '下');%“下”是默认行为。fprintf中(1,... 'LML Lm和之间的差是%克\ N',范数(LML  -  Lm的));[UMU,DMU,PMU] =低密度脂蛋白胆固醇(triu(M), '上', '矢量');fprintf中(1,... ' 'UMU Lm和之间的差值' 为%克\ N',范数(UMU  -  Lm的'));%解决使用这种分解的系统。清楚x;X(分,:) = UMU \(DMU \(UMU'\(BM(PMU,:))));fprintf中(...... '的绝对误差范数|| X  - 酮(大小(B))||就是%克\ n',...范数(X  - 酮(大小(BM))));

指定当两个'上'“向量”选项,'上'必须先于“向量”在参数列表中。

例6 - linsolve和厄米特不确定求解器

当使用linsolve函数,通过利用系统具有对称矩阵这一知识,您可能会体验到更好的性能。上面例子中使用的矩阵有点小,因此,对于这个例子,生成一个更大的矩阵。这里的矩阵是对称正定的,下面我们将看到,随着每一点关于矩阵的知识,有一个相应的加速。即对称求解器比一般求解器快,而对称正定求解器比对称求解器快:

/ / / / / / / / / / / /= sum(Abig, 2);LSopts。POSDEF = false; LSopts.SYM = false; tic; linsolve(Abig, bbig, LSopts); toc; LSopts.SYM = true; tic; linsolve(Abig, bbig, LSopts); toc; LSopts.POSDEF = true; tic; linsolve(Abig, bbig, LSopts); toc;

算法

LDL在Harwell子程序库(HSL)中使用MA57例程用于真实的稀疏矩阵。

参考

abb0 Ashcraft, C., R.G. Grimes和J.G. Lewis。"精确对称不定线性方程求解器"SIAM J.矩阵分析。申请卷。20.编号2,1998年,第513-561。

[2]未击中,I. S.“MA57 - 一个新的用于稀疏对称定冠词和不定系统的解决方案代码”技术报告RAL-TR-2002-024,卢瑟福·阿普尔顿实验室,2002年。

另请参阅

||