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

10

我有一个矩阵,想知道它是否可对角化。如何在R编程语言中实现?


请在相关的数学论坛上提出您的问题... - Mitch Wheat
没问题,他们是预期的。 - LachlanG
7
@Mitch: 这是一个编程问题。R 是一种编程语言。 - jalf
@jalf: 我同意。在特定语言中实现统计方法确实是一个编程问题。如果问题是“如何判断矩阵是否对角化?”那么这就是一个统计学问题。 - JD Long
@JD Long:对角化与统计学没有任何特定关系。它可能适用于高级统计学,但它本身是纯数学研究的一个课题。 - Noldorin
@noldorin 说得好!我应该说“在给定语言中实现任何方法肯定是一个编程问题。”你说得对,这个话题比统计学要广泛得多。我是在回应这个观点,即这不是一个合适的编程问题。 - JD Long
4个回答

9
如果给定一个矩阵m,其中一种方法是将特征向量乘以特征值对角线再乘以原始矩阵的逆矩阵。这样应该可以得到原始矩阵。在R中,这看起来像是:
```r m <- matrix(rnorm(16), 4, 4) e <- eigen(m) m.new <- e$vectors %*% diag(e$values) %*% solve(e$vectors) ```
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相同。


这是一个很好的观点。为了回答原问题(检查矩阵m是否可对角化):1)计算特征向量矩阵p = eigen(m)$vectors 2)检查特征向量矩阵p是否可逆(即,solve(p)不会导致错误)。如果是,则它是可对角化的,并且幺正作用是P。如果不是,则它是不可对角化的。为什么呢?因为可逆性意味着特征空间的直积的维数与原矩阵的维数相同,这个条件是对角化的必要和充分条件。 - gappy
请注意,如果矩阵对称,则我们不需要解决(p),因为对称矩阵的特征向量是正交的,并且正交矩阵的转置是其逆。因此,我们可以写成p%%d%%t(p)。这只是当m = t(m)时的潜在优化。 - user236215

5
您可以实现完整的算法来检查矩阵是否归约为Jordan形式或对角线形式(例如,参见此文档)。或者您可以采用快速而不太正规的方法:对于n维方阵,请使用eigen(M)$values并检查它们是否是n个不同的值。对于随机矩阵,这总是足够的:退化的概率为0。

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

你不需要担心使用浮点数计算时,distinct(独特的)的确切含义是什么。 - hadley
是的,这就是问题结构知识的帮助所在。如果矩阵具有某些随机结构,例如高斯iid,则可以声称特定的特征值分布属性(通常在单位圆上均匀),然后实施简单的测试以检验特征值是否相同的零假设。这篇论文基本上是我所知道的关于随机矩阵的全部内容:http://tinyurl.com/eigenvalues。如果对矩阵一无所知,我会尝试更多的启发式方法。附言:我喜欢ggplot2! - gappy
感谢您将我所知甚微的内容发挥到更好的答案!做得好。这正是我喜欢 StackOverflow 的原因;好的东西比纯线程讨论更明显地浮现在最上面。(ggplot确实很棒!) - JD Long

2
您可能想查看此页面,其中包含一些基本讨论和代码。您需要搜索“对角化”,这是相关部分的开始。

0

所有沿对角线对称的矩阵都可以被正交矩阵对角化。实际上,如果你想要仅通过正交矩阵共轭来对角化,即 D= P AP',其中P'表示转置,则沿对角线的对称性,即A_{ij}=A_{ji},与对角化完全等价。

如果矩阵不对称,则对角化意味着不是D=PAP',而只是D=PAP^{-1},我们不一定有P'=P^{-1},这是正交性的条件。

你需要做更实质性的事情,并且可能有更好的方法,但你可以计算特征向量并检查秩是否等于总维度。

请参见this discussion以获取更详细的解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接