2013-02-16 7 views
3

Редакция: проблема в моем вопросе была Я попытался найти матрицу S от equation 8, но это уравнение имеет ошибку.Как получить правые собственные векторы матрицы в R?

Как получить прямые прямые векторы матрицы в R? «Собственные()» дает только левых собственных векторов

Действительно последнее издание, я сделал большой беспорядок здесь, но этот вопрос действительно важен для меня:

eigen() обеспечивает некоторую матрицу собственных векторов, из функция справки:

"Если 'г < - собственное (а)', и 'V < - $ г векторов; лам < - значения $ R', затем

     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 

и собственный() обеспечивает только матрицу V:

A V = V Lmbd 

Я хотел бы получить мат rix R и LambdaM для реальной матрицы A, которая может быть отрицательно-определенной.

+1

но транспонировать дает правильные собственные векторы транспонированной матрицы, не так ли? – Qbik

+3

'eigen()' мне кажется, что я возвращаю правильные собственные векторы, как и следовало ожидать. Попробуйте это, чтобы увидеть, что он делает: 'm <- matrix (1: 4, ncol = 2); e <- собственный (m); е $ значения [1]; (m% *% e $ vectors [, 1])/e $ vector [, 1] '. –

+0

с помощью «собственной» помощи: «Если« r <- собственный (A) »и« V <- r $ векторы, значения lam <- r $ », то A = V Lmbd V^(- 1) (до числового пуха), где Lmbd = 'diag (lam)' ", поэтому AV = V Lmbd не AV = Lmbd V – Qbik

ответ

7

Рабочий пример.

По умолчанию (= правый собственные векторы):

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 значений строк/столбцов в векторе сделало бы это «сделайте ri ght вещь "(т. (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 
+0

pleace показать все, тогда я приму ваш ответ – Qbik

+7

У меня нет времени на то, чтобы ответить на ваш отредактированный вопрос. Вы можете попробовать ответить на свой вопрос, основываясь на том, что было опубликовано здесь до сих пор, или ждать, пока кто-то еще взломает его ... –

4

Это должно работать

Для матрицы А.

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

Каждый оставил собственный вектор транспонированной правого собственного вектора транспонированной матрицы