主要内容

低密度脂蛋白

厄米不定矩阵的块LDL分解

语法

L = ldl(A)
[L,D] = ldl(A)
[L,D,P] = ldl(A)
[L,D,p] = ldl(A,'vector')
[U,D,P] = ldl(A,'upper')
[U,D,p] = ldl(A,'upper','vector')
[L,D,P,S] = ldl(A)
[l, d, p, s] = ldl (a, thresh)
[U,D,p,S] = LDL(A,THRESH,'upper','vector')

描述

L = ldl(A)只返回排列后的下三角矩阵l与双输出形式一样。排列信息丢失了,块对角线因子也是如此D.默认情况下,低密度脂蛋白只参考对角线和下三角形一个,并假设上三角形是下三角形的复共轭转置。因此[L,D,P] = ldl(TRIL(A))而且[L,D,P] = ldl(A)两者返回完全相同的因子。注意,此语法对于稀疏是无效的一个

[L,D] = ldl(A)存储块对角矩阵D和一个排列下三角矩阵l这样A = l * d * l '.块对角矩阵D对角线上有1 × 1和2 × 2的方块。注意,此语法对于稀疏是无效的一个

[L,D,P] = ldl(A)返回单位下三角矩阵l,块对角线D,和排列矩阵P这样P'* a *P = l * d * l '.这相当于[L,D,P] = ldl(A,'矩阵')

[L,D,p] = ldl(A,'vector')以向量形式返回排列信息,p,而不是矩阵。的p输出是这样的行向量A(p,p) = L*D*L'

[U,D,P] = ldl(A,'upper')的对角线和上三角形一个假设下三角形是上三角形的复共轭转置。此语法返回一个单位上三角矩阵U这样P'* a *P = u '* d * u(假设一个是厄米矩阵,而不仅仅是上三角)。同样的,[L,D,P] = ldl(A,'低')给出默认行为。

[U,D,p] = ldl(A,'upper','vector')以向量形式返回排列信息,p,就像[L,D,p] = ldl(A,'low ','vector')一个必须是一个完整的矩阵。

[L,D,P,S] = ldl(A)返回单位下三角矩阵l,块对角线D,排列矩阵P,和缩放矩阵年代这样P'* s * a * s *P = l * d * l '.此语法仅适用于实稀疏矩阵,且仅适用于的下三角形一个引用。

[l, d, p, s] = ldl (a, thresh)使用作为算法中的枢轴公差。一定是区间内的双标量[0, 0.5].的默认值0.01.使用较小的可能提供更快的分解时间和更少的输入,但也可能导致不稳定的分解。此语法仅适用于真正的稀疏矩阵。

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

例子

的各种形式的用法低密度脂蛋白函数,包括单输出、双输出和三输出形式,以及对向量而且选项。涵盖的主题有:

在运行这些例子之前,你需要生成以下正定和不定厄米矩阵:

A = full(delsq(numgrid('L', 10)));B = gallery('uniformdata',10,0);M =[眼睛(10)B;B " 0 (10)];

的结构这在优化和流体流动问题中非常常见实际上是不确定的。注意这个正定矩阵一个一定是满了吧低密度脂蛋白不接受稀疏参数。

例1 -双输出形式的ldl

的双输出形式低密度脂蛋白返回l而且D这样A - D (L * * L ')很小,l排列单位是下三角形,和D是一个2乘2的对角线块。还要注意,因为一个的对角线是正定的吗D都是正面的:

[LA,DA] = ldl(A);流(1,…“分解误差||A - LA*DA*LA”|| is %g\n',…norm(A - LA*DA*LA'));neginds = find(diag(DA) < 0)

鉴于一个b,解决Ax = b使用

bA = sum(A,2);x = LA'\(DA\(LA\bA));流(…绝对误差范数||x - ones(size(bA))||为%g\n',…norm(x - ones(size(bA))));

例2 -三输出形式的ldl

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

[Lm, Dm, Pm] = ldl(M);流(1,…下午的错误标准| |“* M * Pm Lm * Dm * Lm”| | % g \ n”,…norm(Pm'*M*Pm - Lm*Dm*Lm'));流(1,…Lm和tril(Lm)的差值是%g\n',…范数(Lm - tril(Lm));

鉴于b,解决Mx = b使用LmDm,

bM = sum(M,2);x = Pm*(Lm'\(Dm\(Lm\(Pm'*bM))));流(…'绝对误差范数||x - ones(size(b))||是%g\n',…norm(x - ones(size(bM))));

例3 - D的结构

D是一个1 × 1块和2 × 2块的块对角线矩阵。这使得它成为三对角矩阵的一种特殊情况。当输入矩阵是正定的,D几乎都是对角线的(取决于矩阵有多确定)。当矩阵是不定的,D可以是对角线,也可以表示块状结构。例如,用一个如上所述,是斜的。但是如果你改变一个只要一点点,你就会得到一个不定矩阵,然后你就可以计算a了D它有块状结构。

图;间谍(DA);title(' ldl(A)的D结构');[Las, Das] = ldl(A - 4*眼睛(大小(A)));图;间谍(Das);title(' ldl的D结构(A - 4*眼(大小(A)))');

例4 -使用'vector'选项

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

[Lm, Dm, pm] = ldl(M, 'vector');流(1,错误规范| | M(点、点)- Lm * Dm * Lm”| | % g \ n’,……norm(M(pm,pm) - Lm*Dm*Lm');用这种因式分解解一个系统。。清楚x;x(pm,:) = Lm'\(Dm\(Lm\(bM(pm,:))));fprintf('绝对误差范数||x - ones(size(b))|| is %g\n',…norm(x - ones(size(bM))));

例5 -使用“upper”选项

就像胆固醇函数,低密度脂蛋白接受一个参数,该参数确定输入矩阵的哪个三角形被引用,以及是否被引用低密度脂蛋白返回一个较低的(l)或以上(L ')三角因子。对于密集矩阵,使用上三角版本而不是下三角版本并没有真正的节省:

Ml = tril(M);[Lml, Dml, Pml] = ldl(Ml, '低');% 'lower'是默认行为。流(1,…' Lml与Lm的差值为%g\n',范数(Lml - Lm));(Umu Dmu, pmu) =低密度脂蛋白(triu (M),“上”,“矢量”);流(1,…“Umu与Lm”之差为%g\n′,范数(Umu - Lm′));用这个因式分解解一个系统。清楚x; x(pm,:) = Umu\(Dmu\(Umu'\(bM(pmu,:)))); fprintf(... 'The absolute error norm ||x - ones(size(b))|| is %g\n', ... norm(x - ones(size(bM))));

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

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

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

Abig = full(delsq(numgrid('L', 30)));bbig = 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;

参考文献

[1]阿什克拉夫特,C., R.G.格莱姆斯和J.G.刘易斯。精确对称不定线性方程求解器SIAM J.矩阵肛门。达成。20卷。第2期,1998年,第513-561页。

[2]达夫,i.s。MA57 -稀疏对称定系统和不定系统解的新代码技术报告RAL-TR-2002-024,卢瑟福阿普尔顿实验室,2002。

扩展功能

另请参阅

||