计算矩阵的轨迹到功率k

时间:2012-02-29 07:00:07

标签: math optimization linear-algebra mathematical-optimization adjacency-matrix

我需要计算矩阵的轨迹到3和4的幂,它需要尽可能快。

这里的矩阵是简单图的邻接矩阵,因此它是方形的,对称的,其条目总是1或0,对角元素总是0。

对于矩阵到2的幂的追踪,优化是微不足道的:

  • 我们只需要跟踪条目(i,i),跳过所有其他
  • 由于矩阵是对称的,这些条目只是第i行的平方和总结的条目
  • 由于条目只有1或0,因此可以跳过平方操作

我在维基百科上发现的另一个想法是总结Hadamard产品的所有元素,即入门乘法,但我不知道如何将此方法扩展到3和4的幂。

请参阅http://en.wikipedia.org/wiki/Trace_(linear_algebra)#Properties

也许我只是盲目但我想不出一个简单的解决方案。

最后我需要一个C ++实现,但我认为这对问题并不重要。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

轨迹是特征值的总和,矩阵幂的特征值只是该幂的特征值。

也就是说,如果l_1,...,l_n是矩阵的特征值,则跟踪(M ^ p)= 1_1 ^ p + l_2 ^ p + ... + l_n ^ p。

根据您的矩阵,您可能想要计算特征值然后求和。如果你的矩阵具有低秩(或者可以很好地用低秩矩阵近似),你可以非常便宜地计算特征值(部分特征分解具有复杂度O(n * k ^ 2),其中k是秩)。

编辑:你在评论中提到它是1600x1600,在这种情况下找到所有的特征值应该没问题。这是您可以用于此http://code.google.com/p/redsvd/

的众多C ++代码之一

答案 1 :(得分:1)

好的,我只是自己想出了这个。 我不知道的重要事情是:

  

如果A是有向或无向图G的邻接矩阵,那么矩阵An(即A的n个副本的矩阵乘积)具有一个有趣的解释:第i行和第j列中的条目给出了数字(有向或无向)从顶点i到顶点j的长度为n的行程。这意味着,例如,无向图G中的三角形数正好是A ^ 3的轨迹除以6。

(从http://en.wikipedia.org/wiki/Adjacency_matrix#Properties复制)

在处理稀疏图并使用邻接列表而不是矩阵时,基本上可以在O(n)中检索从节点i到i的所有n个节点的给定长度的路径数。

尽管如此,谢谢你的回答!