低密度脂蛋白

阻断厄米不定矩阵的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)];

结构这是在优化和流体流动问题中很常见的,而且实际上是不确定的。注意正定矩阵一个必须是满的,因为低密度脂蛋白不接受稀疏的论点。

例1 - ldl的双输出形式

的双输出形式低密度脂蛋白返回lD这样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))));

示例2-ldl的三种输出形式

三输出形式也返回排列矩阵,因此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使用LmDm,及

bM = (M, 2)之和;x =点* (Lm \ (Dm \ (Lm \ (Pm“* * bM))));流(…'绝对误差范数||x - ones(size(b))|| is %g\n',…规范(x - 1(大小(bM))));

示例3-D的结构

D是一个由1 × 1块和2 × 2块组成的块对角矩阵。这是一个三对角矩阵的特例。当输入矩阵为正定时,D几乎总是对角线(取决于矩阵的确定程度)。当矩阵是不定的时候,D可以是对角线,也可以表示块结构。例如,与一个如上所述,是对角线。但如果你改变一个只要一点点,你就得到了一个不定矩阵,然后你就可以计算出D它有块状结构。

图形间谍(DA);标题(“ldl(A)的D结构”[Las,Das]=低密度脂蛋白(A-4*眼(A号));图形间谍(Das);标题(“低密度脂蛋白D的结构(A-4*眼(A))”);

示例4-使用“向量”选项

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

[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'选项

胆固醇函数,低密度脂蛋白接受一个参数,该参数确定引用输入矩阵的哪个三角形,以及是否低密度脂蛋白返回较低值(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));;

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

例6 -林解和厄米不定解

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

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年。

另请参阅

||