主要内容

低密度脂蛋白

阻断厄米不定矩阵的LDL因子分解

语法

l = ldl(a)
[L、D] =低密度脂蛋白(A)
[L D P] =低密度脂蛋白(A)
[l,d,p] = ldl(a,'vector')
[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.默认情况下,低密度脂蛋白仅引用对角线和下三角形一个,并假设上三角形是下三角形的复共轭转置。因此[L,D,P] = LDL(三叶(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,'vector')将置换信息作为向量返回,p,而不是矩阵。这p输出是这样的行向量a(p,p)= l * d * l'

[u,d,p] = ldl(a,'上')仅引用的对角线和上三角形一个假设下三角形是上三角形的复共轭转置。这个语法返回一个单位上三角矩阵U这样p'* a * 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'.此语法仅适用于实稀疏矩阵,且仅适用于的下三角形一个引用。

[L D P, S] =低密度脂蛋白(一打)使用阈值为算法中的枢轴公差。阈值必须是间隔的双标量[0,0.5].的默认值阈值0.01.使用较小的值阈值可以提供更快的分解时间和更少的条目,但也可能导致稳定的分解。此语法仅适用于真实的稀疏矩阵。

[u,d,p,s] = ldl(a,thresh,'上','向量')设置枢轴容差并返回上部三角形U和排列向量p如上所述。

例子

这些例子说明了the的各种形式的用法低密度脂蛋白功能,包括单,两个和三个输出形式,以及使用向量选项。主题包括:

在运行以下任何示例之前,您需要生成以下正明和无限期的Hermitian矩阵:

a = full(delsq(numgrid('l',10)));b =图库('superenddata',10,0);m = [眼睛(10)b;B'Zeros(10)];

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

示例1 - LDL的两种输出形式

的双输出形式低密度脂蛋白返回lD这样A - D (L * * L ')很小,l置换单位下三角形,和D是一个块2-by-2对角线。还要注意,因为一个是积极的,对角线D都是积极的:

[la,da] = ldl(a);FPRINTF(1,...'的分解错误|| a  -  la * da * la''||是%g \ n',...常规(a  -  la * da * la'));neginds = find(diag(da)<0)

给予一个b,解决Ax = b使用LA.

英航=和(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使用LM.Dm, 和

bM = (M, 2)之和;x =点* (Lm \ (Dm \ (Lm \ (Pm“* * bM))));fprintf(...'绝对error rang || x  -  x(size(b))||%g \ n',...常规(x  -  x  -  x  -  x  -  x-(bm)))));

示例3 - D的结构

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

数字;间谍(DA);标题(“来自LDL(a)”的结构);[las,das] = ldl(a  -  4 *眼睛(尺寸(a)));数字;间谍(DAS);标题('来自LDL的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)或上层(L')三角因子。对于密集的矩阵,使用上三角形版本而不是较低的三角形版本没有真正的节省:

ml = tril(m);[LML,DML,PML] = LDL(ml,'较低');%'较低'是默认行为。FPRINTF(1,...'LML和LM之间的差异为%G \ n',NORM(LML  -  LM));[umu,dmu,pmu] = ldl(triu(m),'上','矢量');fprintf(1,...'umu和lm'之间的差异为%g \ n',norm(umu  -  lm'));%解决了使用这种分解的系统。清楚x;x(pm,:) = umu \(dmu \(umu'\(bm(pmu,:)))));fprintf(...'绝对error rang || x  -  x(size(b))||%g \ n',...常规(x  -  x  -  x  -  x  -  x-(bm)))));

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

例6 -林解和厄米不定解

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

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.刘易斯。精确对称不定线性方程求解器Siam J. Matrix肛门。苹果。卷。20. 1998年第298号,第513-561页。

[2] Duff,I. S.“MA57 - 一种用于解决稀疏对称确定和无限系统的新代码。”技术报告RAL-TR-2002-024,Rutherford Appleton实验室,2002年。

扩展功能

另请参阅

||