目的 Ax=λBx, A:実対称行列,B:実対称正値行列,λ:スカラー,x:列行列としたとき, 一般化固有値問題を解く。 使用法 geneig(A, B) 引数 A, B 上述の通り。 ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/geneig.R", encoding="euc-jp") # 一般化固有値問題を解く Ax=λBx, A:実対称行列,B:実対称正値行列,λ:スカラー,x:列行列 geneig <- function( a, # 行列 A b) # 行列 B { a <- as.matrix(a) b <- as.matrix(b) if (nrow(a) == 1) { # 1 行 1 列の場合 res <- list(values=as.vector(a/b), vectors=as.matrix(1)) } else { res <- eigen(b) g <- diag(1/sqrt(res$values)) v <- res$vectors res <- eigen(g %*% t(v) %*% a %*% v %*% g) res$vectors <-v %*% g %*% res$vectors } return(res) } 使用例 > A <- matrix(c(1, 1, 0.5, 1, 1, 0.25, 0.5, 0.25, 2), byrow=TRUE, nc=3) > B <- matrix(c(2, 2, 2, 2, 5, 5, 2, 5, 11), byrow=TRUE, nc=3) > geneig(A, B) $values [1] 0.610644151 0.315046830 -0.009024314 $vectors [,1] [,2] [,3] [1,] -0.5263910 -0.5145987 0.53984627 [2,] -0.2817799 0.4026197 -0.50842651 [3,] 0.2479435 -0.3183995 -0.06174487 参考文献 村越勝弘「FORTRANのための数値計算法」日本コンピュータ協会,P.269-281