3

eigen()任意の行列の固有値と固有ベクトルを計算するような関数を書きたいです。固有値の計算のために次のコードを書きましたが、結果の線形方程式を解く関数またはメソッドが必要です。

eig <- function(x){
       if(nrow(x)!=ncol(x)) stop("dimension error")
          ff <- function(lambda){
                for(i in 1:nrow(x)) x[i,i] <- x[i,i] - lambda
                }
det(x)
}

det(x)=0の値を見つけるには、多項式の線形方程式を解く必要がありますlambda。何か方法はありますか?

4

3 に答える 3

3

を使用した1つのソリューションを次に示しますuniroot.all

library(rootSolve)
myeig <- function(mat){
  myeig1 <- function(lambda) {
    y = mat
    diag(y) = diag(mat) - lambda
    return(det(y))
  }

  myeig2 <- function(lambda){
    sapply(lambda, myeig1)
  }
  uniroot.all(myeig2, c(-10, 10))
}

R > x <- matrix(rnorm(9), 3)
R > eigen(x)$values
[1] -1.77461906 -1.21589769 -0.01010515
R > myeig(x)
[1] -1.77462211 -1.21589767 -0.01009019
于 2013-04-21T14:37:39.547 に答える