文档

symamd

对称近似最小度排列

语法

p = symamd(S)
p = symamd(S,旋钮)
[p,stats] = symamd(…)

描述

p = symamd(S)对于一个对称正定矩阵年代,返回排列向量p这样S (p, p)往往具有更稀疏的Cholesky因子年代。来求排序年代symamd构造一个矩阵这样spones(M'*M) = spones(S),然后进行计算p = colamd(M)。的symamd函数也可以用于对称不定矩阵。

年代必须是方形的;只有严格的下三角形部分被引用。

p = symamd(S,旋钮)在哪里旋钮是标量。如果年代n——- - - - - -n,行和列大于旋钮* n条目在排序之前被删除,并在输出排列中最后排序p。如果旋钮那么,参数不存在旋钮= spparms('wh_frac')

[p,stats] = symamd(…)生成可选向量。统计数据它提供了关于矩阵的排序和有效性的数据年代

统计(1)

被忽略的密集或空行数symamd

统计(2)

被忽略的密集或空列数symamd

统计数据(3)

所使用的内部数据结构上执行的垃圾收集数symamd(大致大小)8.4*nnz(tril(S,-1)) + 9n整数)

(4)统计数据

0如果矩阵有效,或者1如果无效

(5)统计数据

未排序或包含重复项的最右列索引0如果不存在这样的列

统计数据(6)

上次看到重复或乱序的行索引中给出的列索引(5)统计数据,或0如果不存在这样的行索引

统计(7)

重复和乱序的行索引数

尽管如此,MATLAB®内置函数生成有效的稀疏矩阵,用户可以使用MATLAB C或Fortran api构造无效的稀疏矩阵并将其传递给symamd。出于这个原因,symamd验证年代是有效的:

  • 如果行索引在同一列中出现两次或多次,则symamd中忽略重复项,继续处理,并提供关于重复项的信息统计(4)

  • 如果一列中的行索引顺序乱了,symamd对矩阵内部副本的每一列进行排序年代(但不修复输入矩阵年代),继续处理,并提供有关中的无序条目的信息统计(4)

  • 如果年代在任何其他方面都无效,symamd不能继续下去。它打印错误消息,并且不返回输出参数(p统计数据).

排序之后是对称消去树后排序。

例子

全部折叠

这里是逆Cuthill-McKee和最小度在巴基球的例子中提到的比较symrcm参考页面。

B = bucky+4*speye(60);r = symrcm(B);p = symamd(B);R = B(R, R);S = B(p,p);次要情节(2,2,1),间谍(R,4),标题(“B (r, r)”)次要情节(2,2,2),间谍(S,4),标题(“B (s, s)”) subplot(2,2,3), spy(chol(R),4), title(“胆固醇”(B (r, r))) subplot(2,2,4), spy(chol(S),4), title(“胆固醇”(B (s, s))

尽管这是一个非常小的问题,但这两个顺序的行为都是典型的。RCM产生了一个带宽较窄的矩阵,在Cholesky分解过程中几乎完全填充。最小度生成的结构具有连续零的大块,这些零在分解过程中不被填充。因此,最小度排序需要更少的时间和存储的分解。

参考文献

代码的作者symamdStefan I. Larimore和Timothy A. Davis (davis@cise.ufl.edu),佛罗里达大学。该算法是与施乐PARC的John Gilbert和橡树岭国家实验室的Esmond Ng合作开发的。佛罗里达大学稀疏矩阵算法研究:http://www.cise.ufl.edu/research/sparse/

R2006a之前介绍

这个话题有用吗?