对矩阵进行对角化以计算矩阵功率?

Posted

技术标签:

【中文标题】对矩阵进行对角化以计算矩阵功率?【英文标题】:Diagonalize a matrix to compute matrix power? 【发布时间】:2020-02-02 21:53:47 【问题描述】:

我正在尝试计算P^100,其中P 是我的转换矩阵。我想通过对角化P 来做到这一点,这样我们就有了P = Q*D*Q^-1

当然,如果我能让P 成为这种形式,那么我可以很容易地计算出P^100 = Q*D^100*Q^-1(其中* 表示矩阵乘法)。

我发现,如果您只执行P^5,您将得到的只是一个矩阵,其中 P 的每个条目都被提升到 5 次方,而不是矩阵的 5 次方 (P*P*P*P*P )。

我在这里发现了一个问题,询问如何检查矩阵是否可对角化,而不是如何显式构造矩阵的对角化。在 MATLAB 中它非常简单,但我使用的是 R 而不是 MATLAB。

【问题讨论】:

正则算术运算符在 R 中是元素级的。您应该能够执行 P%*%P%*%P%*%P%*%P 并且可能类似于 Reduce('%*%', as.list(rep(P,5) ) ) 【参考方案1】:

eigen() 函数将为您计算特征值和特征向量(在您的表达式中,特征向量矩阵为 Q,特征值中的 diag()D)。

您还可以使用expm package 中的%^% 运算符,或this question 的答案中描述的其他包中的函数。

使用其他人的代码的优点是它已经过测试和调试,并且可以使用更快或更健壮的算法(例如,通过composing powers of two of the matrix 计算矩阵幂通常比进行特征向量计算更有效) .编写自己的方法的好处是你会更好地理解它。

【讨论】:

以上是关于对矩阵进行对角化以计算矩阵功率?的主要内容,如果未能解决你的问题,请参考以下文章

径向功率谱分析

scipy.sparse 矩阵的元素功率

裁剪 FFT 矩阵

(POJ 3744)Scout YYF I(概率dp+矩阵快速幂)

matlab用牛顿法计算潮流需要在命令窗口输入啥

使用 mclapply 或 %dopar% 从对角线切片组装矩阵,例如 Matrix::bandSparse