阻断厄米不定矩阵的LDL因子分解
L=低密度脂蛋白(A)
[L、D] =低密度脂蛋白(A)
[L D P] =低密度脂蛋白(A)
[L,D,p]=ldl(A,'载体')
[U,D,P]=低密度脂蛋白(A,'upper')
(U D p) =低密度脂蛋白(“上”,“矢量”)
[L D P, S] =低密度脂蛋白(A)
[L D P, S] =低密度脂蛋白(一打)
[U,D,p,S]=LDL(A,阈值,'upper','vector')
L=低密度脂蛋白(A)
仅返回置换后的下三角矩阵l
如两种输出形式。排列信息丢失,块对角因子也丢失D
.默认情况下,低密度脂蛋白
仅引用对象的对角线和下三角形一个
,并假设上三角形是下三角形的复共轭转置。因此[L,D,P]=ldl(TRIL(A))
和[L D P] =低密度脂蛋白(A)
两者返回的因子完全相同。请注意,此语法对sparse无效一个
.
[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]=低密度脂蛋白(A,'upper')
仅引用的对角线和上三角形一个
假设下三角形是上三角形的复共轭转置。这个语法返回一个单位上三角矩阵U
这样P ' * * P = U ' * D * U
(假设一个
是厄米特的,而不仅仅是上三角形)。同样地,[L,D,P]=低密度脂蛋白(A,“较低”)
提供默认行为。
(U D p) =低密度脂蛋白(“上”,“矢量”)
以向量形式返回置换信息,p
一样,[L,D,p]=ldl(A,'lower','vector')
.一个
必须是一个完整的矩阵。
[L D P, S] =低密度脂蛋白(A)
返回单位下三角矩阵l
、块对角D
,置换矩阵P
,以及比例矩阵年代
这样P'*S*A*S*P=L*D*L'
.此语法仅适用于实稀疏矩阵,且仅适用于的下三角形一个
引用。
[L D P, S] =低密度脂蛋白(一打)
使用脱粒
为算法中的枢轴公差。脱粒
必须是位于间隔中的双标量[0, 0.5]
.的默认值脱粒
是0.01
. 使用较小的脱粒
可能导致更快的分解时间和更少的条目,但也可能导致不太稳定的分解。此语法仅适用于实稀疏矩阵。
[U,D,p,S]=LDL(A,阈值,'upper','vector')
设置轴公差并返回上三角形U
和置换向量p
如上所述。
这些例子说明了the的各种形式的用法低密度脂蛋白
函数,包括一、二、三输出形式,以及向量
和上
选项。主题包括:
在运行这些示例之前,您需要生成以下正定和不定厄米矩阵:
A=满(delsq(numgrid('L',10));B=画廊('uniformdata',10,0);M=[眼睛(10)B;B'零(10)];
结构米
这是在优化和流体流动问题中很常见的,而且米
实际上是不确定的。注意正定矩阵一个
必须是满的,因为低密度脂蛋白
不接受稀疏的论点。
的双输出形式低密度脂蛋白
返回l
和D
这样A-(L*D*L')
很小,l
是置换单元下三角形,并且D
是一个2乘2对角线的块。还要注意,因为一个
是正定的,是D
都是积极的:
[LA,DA]=ldl(A);fprintf(1,…'因式分解错误| | A-LA*DA*LA''| | |是%g\n'。。。常模(A-LA*DA*LA');neginds=查找(诊断(DA)<0)
鉴于一个
b
,解决Ax = b
使用洛杉矶
,达
:
英航=和(2);x = LA ' \ (DA \ (LA \ bA));流(…'绝对误差范数||x - ones(size(bA))|| is %g\n',…规范(x - 1(大小(bA))));
三输出形式也返回排列矩阵,因此l
实际上是单位下三角形:
[Lm,Dm,Pm]=ldl(M);fprintf(1,…'错误规范| | Pm'*M*Pm-Lm*Dm*Lm'| |是%g\n'。。。常模(Pm'*M*Pm-Lm*Dm*Lm');fprintf(1,…'Lm和tril(Lm)之间的差异为%g\n'。。。常模(Lm-tril(Lm));
鉴于b
,解决Mx = b
使用Lm
,Dm
,及点
:
bM = (M, 2)之和;x =点* (Lm \ (Dm \ (Lm \ (Pm“* * bM))));流(…'绝对误差范数||x - ones(size(b))|| is %g\n',…规范(x - 1(大小(bM))));
D
是一个由1 × 1块和2 × 2块组成的块对角矩阵。这是一个三对角矩阵的特例。当输入矩阵为正定时,D
几乎总是对角线(取决于矩阵的确定程度)。当矩阵是不定的时候,D
可以是对角线,也可以表示块结构。例如,与一个
如上所述,达
是对角线。但如果你改变一个
只要一点点,你就得到了一个不定矩阵,然后你就可以计算出D
它有块状结构。
图形间谍(DA);标题(“ldl(A)的D结构”[Las,Das]=低密度脂蛋白(A-4*眼(A号));图形间谍(Das);标题(“低密度脂蛋白D的结构(A-4*眼(A))”);
像鲁
函数,低密度脂蛋白
接受一个参数,该参数确定函数返回的是置换向量还是置换矩阵。低密度脂蛋白
默认情况下返回后者。当您选择“向量”
,该函数执行速度更快,占用内存更少。因此,指定“向量”
选择建议。另一件需要注意的事情是,对于这种操作,索引通常比乘法快:
[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))));
像胆固醇
函数,低密度脂蛋白
接受一个参数,该参数确定引用输入矩阵的哪个三角形,以及是否低密度脂蛋白
返回较低值(l
)或上层(我是
)三角因子。对于密集矩阵,使用上三角版本而不是下三角版本不会带来实际节约:
Ml=万亿(M)[Lml,Dml,Pml]=低密度脂蛋白(Ml,'较低');%“低”是默认行为。fprintf(1,…'Lml和Lm之间的差异为%g\n',norm(Lml-Lm))[Umu,Dmu,pmu]=低密度脂蛋白(triu(M),“上”,“向量”);fprintf(1,…'Umu和Lm“”之间的差异为%g\n',norm(Umu-Lm');%使用此分解求解系统。清除x;x(pm,:)=Umu\(Dmu\(Umu'\(bM(pmu,:)));fprintf(…'绝对误差范数| | x-one(大小(b))| |是%g\n'。。。常模(x-one)(size(bM));;
在指定“上”
和“向量”
选项,“上”
必须先于“向量”
在参数列表中。
当使用符号解法
函数时,通过利用系统具有对称矩阵的知识,您可能会体验到更好的性能。上面例子中使用的矩阵有点小,因此,对于这个例子,生成一个更大的矩阵。这里的矩阵是对称正定的,下面我们将看到关于矩阵的每一位知识,都有一个相应的加速。即对称解算器比一般解算器快,对称正定解算器比对称解算器快:
drawtext (delsq(numgrid('L', 30));= sum(大,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;
阿什克拉夫特、C. R.G.格莱姆斯和J.G.刘易斯。精确对称不定线性方程求解器暹罗J。母体肛门。应用。20卷。第2页,1998年,513-561页。
[2] 达夫,我。S.“MA57——求解稀疏对称定系统和不定系统的新代码〉,技术报告RAL-TR-2002-024,卢瑟福阿普尔顿实验室,2002年。