阻断厄米不定矩阵的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)];
结构的结构米
这是在优化和流体流动问题中很常见的,而且米
实际上是不确定的。注意正定矩阵一个
必须完整,如低密度脂蛋白
不接受稀疏的论点。
的双输出形式低密度脂蛋白
返回l
和D
这样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))));
三输出形式也返回排列矩阵,因此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)))));
D
是一个由1 × 1块和2 × 2块组成的块对角矩阵。这是一个三对角矩阵的特例。当输入矩阵为正定时,D
几乎总是对角线(取决于矩阵的确定程度)。当矩阵是不定的时候,D
可以是对角线,或者它可以表达块结构。例如,一个
如上所述,达
是对角线。但如果你转移一个
只有一点,你最终用一个无限的矩阵,然后你可以计算一个D
它有块状结构。
数字;间谍(DA);标题(“来自LDL(a)”的结构);[las,das] = ldl(a - 4 *眼睛(尺寸(a)));数字;间谍(DAS);标题('来自LDL的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
)或上层(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)))));
在指定两者时'上'
和“向量”
选项,'上'
必须先于“向量”
在参数列表中。
使用时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年。