厄米特不定矩阵的块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]
。的默认值THRESH
是0.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
不接受稀疏参数。
的双输出形式LDL
返回l
和D
这样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))));
三个输出形式也返回排列矩阵,因此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))));
D
是一个1×1块和2×2块的块对角矩阵。这使它成为三对角矩阵的一种特殊情况。当输入矩阵为正定时,D
几乎总是对角线的(取决于矩阵的确定程度)。但当矩阵不确定时,D
可以是对角线,或者它可以表示块结构。例如,一个
如上所述,达
是对角线。但是,如果你转移一个
只是有点,你最终无限期矩阵,然后就可以计算D
它有块结构。
数字;间谍(DA);标题( '从LDL(A)d的结构');[拉斯维加斯,达斯] = LDL(A - 4 *眼(尺寸(A)));数字;间谍(DAS);标题( '从LDL d的结构(A - 4 *眼(尺寸(A)))');
如鲁
函数,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))));
如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))));
指定当两个'上'
和“向量”
选项,'上'
必须先于“向量”
在参数列表中。
当使用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年。