主要内容

amd

近似最小度排列

语法

P = amd(A)
P = amd(A,opts)

描述

P = amd(A)返回稀疏矩阵的近似最小度排列向量C = a + a '.Cholesky因式分解C (P, P)(P, P)往往比的更稀疏C一个.的amd函数往往比symamd,而且往往会返回更好的订单symamd.矩阵一个一定是正方形的。如果一个是完整的矩阵吗amd (A)等于amd(稀疏(A))

P = amd(A,opts)允许重排序的附加选项。的选择Input是一个包含如下两个字段的结构。你只需要设置感兴趣的字段:

  • 密集的-一个非负标量值,表示什么被认为是密集的。如果A是n × n的,那么行和列大于max(16日(密度* sqrt (n)))条目A + A'被认为是“密集的”,在排序过程中被忽略。MATLAB®软件将这些行和列放在输出排列的最后。如果这个选项不存在,这个字段的默认值是10.0。

  • 咄咄逼人的-控制积极吸收的标量值。如果该字段设置为非零值,则执行主动吸收。如果此选项不存在,则此选项为默认值。

MATLAB软件执行装配树后序,这通常与消去树后序相同。它并不总是相同的,因为使用了近似的度数更新,并且因为“密集的”行和列不参与后排。它非常适合后续胆固醇但是,如果你需要一个精确的消元树后排序,你可以使用以下代码:

P = amd(S);C = spones(S)+spones(S’);[ignore, Q] = tree(C(P,P));P = P(q);

如果年代已经对称了,省略第二行,C = spones(S)+spones(S’)

例子

全部折叠

计算一个矩阵在排序前后的Cholesky因子amd检验对稀疏性的影响。

加载杠铃图稀疏矩阵,并向其添加一个稀疏单位矩阵,以保证其为正定。计算两个Cholesky因子:一个是原始矩阵,另一个是原始矩阵amd

负载barbellgraph.matA = A+speye(size(A));p = amd(A);L = chol(A,“低”);Lp = chol(A(p,p),“低”);

绘制所有四个矩阵的稀疏模式。从预定矩阵得到的Cholesky因子比自然排序矩阵的因子稀疏得多。

figure subplot(2,2,1) spy(A) title(“原始矩阵A”) subplot(2,2,2) spy(A(p,p)) title(“AMD订购A”副情节(2,2,3)间谍(L)标题(“A型胆大因素”副情节(2,2,4)间谍(Lp)标题(“AMD的胆道因素订购了A”

图中包含4个轴对象。标题为原始矩阵A的axis对象1包含一个类型为line的对象。标题为AMD有序A的Axes对象2包含一个类型为line的对象。标题为Cholesky因子A的Axes对象3包含一个类型为line的对象。标题为Cholesky factor (AMD有序A)的Axes对象4包含一个类型为line的对象。

参考文献

[1]阿米斯托,帕特里克R.,蒂莫西A.戴维斯,伊恩S.达夫。算法837:AMD,近似最小度排序算法。ACM数学软件汇刊30日,没有。3(2004年9月):381-388。https://doi.org/10.1145/1024074.1024081

扩展功能