3

版 :私の質問の問題は、式 8Sからたが、この式にはエラーがあることでした。

R の行列の正しい固有ベクトルを直接取得する方法は? 'eigen()' は左固有ベクトルのみを与える

本当に最後の版、私はここで大きな混乱を犯しましたが、この質問は私にとって本当に重要です:

eigen()関数のヘルプから、固有ベクトルの行列を提供します。

" 'r <- eigen(A)' および 'V <- r$vectors; lam <- r$values' の場合、

                      A = V Lmbd V^(-1)                         

(数値ファズまで)、ここでLmbd =diag(lam)"

つまりA V = V Lmbd、ここで V は行列です。これを確認します。

set.seed(1)
A<-matrix(rnorm(16),4,4)
Lmbd=diag(eigen(A)$values)
V=eigen(A)$vectors
A%*%V

> A%*%V
                      [,1]                  [,2]          [,3]           [,4]
[1,]  0.0479968+0.5065111i  0.0479968-0.5065111i  0.2000725+0i  0.30290103+0i
[2,] -0.2150354+1.1746298i -0.2150354-1.1746298i -0.4751152+0i -0.76691563+0i
[3,] -0.2536875-0.2877404i -0.2536875+0.2877404i  1.3564475+0i  0.27756026+0i
[4,]  0.9537141-0.0371259i  0.9537141+0.0371259i  0.3245555+0i -0.03050335+0i
> V%*%Lmbd
                      [,1]                  [,2]          [,3]           [,4]
[1,]  0.0479968+0.5065111i  0.0479968-0.5065111i  0.2000725+0i  0.30290103+0i
[2,] -0.2150354+1.1746298i -0.2150354-1.1746298i -0.4751152+0i -0.76691563+0i
[3,] -0.2536875-0.2877404i -0.2536875+0.2877404i  1.3564475+0i  0.27756026+0i
[4,]  0.9537141-0.0371259i  0.9537141+0.0371259i  0.3245555+0i -0.03050335+0i

R右固有ベクトルの行列を見つけたいのですが
、左固有ベクトルの行列を定義する方程式Lは次のとおりです。

L A  = LambdaM L

右固有ベクトルの行列を定義する方程式Rは次のとおりです。

A R = LambdaM R

そして eigen() は matrix のみを提供しますV:

A V = V Lmbd

R行列を取得したいと思います。LambdaM実際の行列Aは負定値である可能性があります。

4

2 に答える 2

9

実例です。

デフォルト (=固有ベクトル):

m <- matrix(1:9,nrow=3)
e <- eigen(m)
e1 <- e$vectors
zapsmall((m %*% e1)/e1) ## right e'vec
##          [,1]      [,2] [,3]
## [1,] 16.11684 -1.116844    0
## [2,] 16.11684 -1.116844    0
## [3,] 16.11684 -1.116844    0

左固有ベクトル:

eL <- eigen(t(m))    
eL1 <- eL$vectors

(左側の行ベクトルを乗算する必要があるため、もう少し努力する必要があります。単一の固有ベクトルのみを抽出した場合、R は行/列ベクトルの区別を知らないため、「正しいことを行う」ことになります (つまり、(eL1[,1] %*% m)/eL1[,1] ただ動作します))。

zapsmall(t(eL1) %*% m/(t(eL1)))
##          [,1]      [,2]      [,3]
## [1,] 16.116844 16.116844 16.116844
## [2,] -1.116844 -1.116844 -1.116844
## [3,]  0.000000  0.000000  0.000000
于 2013-02-16T16:44:04.773 に答える
4

これはうまくいくはずです

行列 A が与えられます。

lefteigen  <-  function(A){
  return(t(eigen(t(A))$vectors))
}

すべての左固有ベクトルは、行列の転置の右固有ベクトルの転置です

于 2013-02-16T16:40:19.270 に答える