2009-07-25 83 views
6

我有一個矩陣,我想知道這是否是對角化對角化。我如何在R編程語言中執行此操作?確定是否矩陣是在R編程語言

+0

plesae問你的問題在相關數學論壇... – 2009-07-25 02:34:35

+0

這是確定的,他們的預期。 http://blog.stackoverflow.com/2009/07/stack-overflow-flash-mobs/ – LachlanG 2009-07-25 02:38:03

+7

@Mitch:這是一個編程問題。 R是一種編程語言。 – jalf 2009-07-25 02:50:25

回答

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%%解決(P)]應該是相同的爲m

是的,我完全偷從R Wiki

4

可以實現完整的算法來檢查矩陣減少到約旦的形式或對角線之一(見例如,this document)。或者你可以採取快速和骯髒的方式:對於n維方陣,使用特徵(M)$值並檢查它們是不同的值。對於隨機矩陣,這總是足夠的:簡併性有prob0。

P.S:基於由JD長一個簡單的觀察之下,我憶及,diagonalizability一個充分必要條件是,特徵向量跨越原有的空間。要檢查這一點,只要看到特徵向量矩陣具有滿秩(無零特徵值)。因此,這裏是代碼:

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

你可能想一些基本的討論和代碼檢查this page。您需要搜索「對角化」,這是相關部分開始的地方。