一般化固有値問題 Last modified: Jun 28, 2004
目的
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
直前のページへ戻る
E-mail to Shigenobu AOKI