对矩阵进行对角化以计算矩阵功率?
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 计算矩阵幂通常比进行特征向量计算更有效) .编写自己的方法的好处是你会更好地理解它。
【讨论】:
以上是关于对矩阵进行对角化以计算矩阵功率?的主要内容,如果未能解决你的问题,请参考以下文章