使矩阵对角化以计算矩阵幂?
Diagonalize a matrix to compute matrix power?
我正在尝试计算 P^100
,其中 P
是我的转换矩阵。我想通过对角化 P
来做到这一点,这样我们就有了 P = Q*D*Q^-1
。
当然,如果我能得到P
这种形式,那么我可以很容易地计算出P^100 = Q*D^100*Q^-1
(其中*
表示矩阵乘法)。
我发现,如果您只是 P^5
,您将在 return 中得到的是一个矩阵,其中 P 的每个条目都被提高到 5 次方,而不是 5 次方矩阵的幂 (P*P*P*P*P
).
我在这里发现了一个问题,它询问如何检查矩阵是否可对角化,而不是如何显式构造矩阵的对角化。在 MATLAB 中非常简单,但是我使用的是 R 而不是 MATLAB。
eigen()
函数将为您计算特征值和特征向量(特征向量矩阵在您的表达式中为Q
,特征值的diag()
为D
)。
您还可以在 expm package, or functions from other packages described in the answers to this question 中使用 %^%
运算符。
使用别人的代码的优点是它已经过测试和调试,并且可以使用更快或更健壮的算法(例如,通过 composing powers of two of the matrix 计算矩阵幂通常比通过特征向量计算)。编写自己的方法的好处是您会更好地理解它。
我正在尝试计算 P^100
,其中 P
是我的转换矩阵。我想通过对角化 P
来做到这一点,这样我们就有了 P = Q*D*Q^-1
。
当然,如果我能得到P
这种形式,那么我可以很容易地计算出P^100 = Q*D^100*Q^-1
(其中*
表示矩阵乘法)。
我发现,如果您只是 P^5
,您将在 return 中得到的是一个矩阵,其中 P 的每个条目都被提高到 5 次方,而不是 5 次方矩阵的幂 (P*P*P*P*P
).
我在这里发现了一个问题,它询问如何检查矩阵是否可对角化,而不是如何显式构造矩阵的对角化。在 MATLAB 中非常简单,但是我使用的是 R 而不是 MATLAB。
eigen()
函数将为您计算特征值和特征向量(特征向量矩阵在您的表达式中为Q
,特征值的diag()
为D
)。
您还可以在 expm package, or functions from other packages described in the answers to this question 中使用 %^%
运算符。
使用别人的代码的优点是它已经过测试和调试,并且可以使用更快或更健壮的算法(例如,通过 composing powers of two of the matrix 计算矩阵幂通常比通过特征向量计算)。编写自己的方法的好处是您会更好地理解它。