一般化固有値問題     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

Made with Macintosh