确定矩阵在R编程语言中是否可对角化

时间:2009-07-25 02:32:28

标签: r matrix

我有一个矩阵,我想知道它是否可以对角化。我如何用R编程语言执行此操作?

4 个答案:

答案 0 :(得分:7)

如果你有一个给定的矩阵m,则一种方法是将特征向量乘以特征值的对角线乘以原始矩阵的逆矩阵。这应该让我们回到原始矩阵。在R中看起来像:

m <- matrix( c(1:16), nrow = 4)
p <- eigen(m)$vectors
d <- diag(eigen(m)$values)
p %*% d %*% solve(p)
m

因此,该示例p %*% d %*% solve(p)应与m

相同

答案 1 :(得分:4)

您可以实现完整算法以检查矩阵是否缩小为Jordan形式或对角形式(参见例如this document)。或者您可以采用快速而肮脏的方式:对于n维方形矩阵,使用eigen(M)$值并检查它们是否为n个不同的值。对于随机矩阵,这总是足够的:简并有问题。

P.S。:基于JD Long的简单观察,我回忆起对角化的一个充分必要条件是特征向量跨越原始空间。要检查这一点,只需看到特征向量矩阵具有满秩(没有零特征值)。所以这是代码:

diagflag = function(m,tol=1e-10){
    x = eigen(m)$vectors
    y = min(abs(eigen(x)$values))
    return(y>tol)
}
# nondiagonalizable matrix 
m1 = matrix(c(1,1,0,1),nrow=2) 
# diagonalizable matrix
m2 = matrix(c(-1,1,0,1),nrow=2) 

> m1
     [,1] [,2]
[1,]    1    0
[2,]    1    1

> diagflag(m1)
[1] FALSE

> m2
     [,1] [,2]
[1,]   -1    0
[2,]    1    1

> diagflag(m2)
[1] TRUE

答案 2 :(得分:2)

您可能需要查看this page以获取一些基本讨论和代码。您需要搜索相关部分开始的“对角化”。

答案 3 :(得分:0)

对角线上的所有对称矩阵均可通过正交矩阵对角化。实际上,如果您只希望通过正交矩阵共轭来实现对角线化,即D = P A P',其中P'代表换位,则对称于对角线,即A_ {ij} = A_ {ji},完全等同于对角线化。

如果矩阵不是对称的,则对角化性不是D = P A P',而仅仅是D = P A P ^ {-1},而我们不是必须具有P'= P ^ {-1},这是正交性的条件。

您需要做一些实质性的工作,也许有更好的方法,但是您可以只计算特征向量并检查秩等于总维数。

有关详细说明,请参见this discussion