行列の累乗

Rを使えば正方行列のべき乗 (冪乗)を求めることができる。行列の整数のべき乗は例えばperlのモジュールであるMatrixReal等を使えば簡単にできるが、行列の平方根的なもの、すなわち行列の2分の1乗等を作成したい場合などはRを用いた方が早い。以下のように行う。

まず、サンプルとして用いる正方行列"A"を以下のコマンドで作成する。

1|$A=array(c(3,1,1,1,4,2,1,1,1,1,2,1,4,1,1,2), dim=c(4,4))

以上で4x4の正方行列Aが作成された。以下のコマンドで確認できる。

2|$A
3  4  1  4
1  2  1  1
1  1  2  1
1  1  1  2

この行列Aを3分の1乗する。以下のコマンドにて行う。黄色で示した"A"にて行列Aを読み込む。また同様に黄色で示した"1/3"にて3分の1乗を指定する。"A_dec"が求める行列Aの3分の1乗根である。

1|$eigen=eigen(A)
2|$A_dec=eigen$vectors %*% diag((eigen$values)**(1/3)) %*% solve(eigen$vectors)

以上で"A_dec"が生成されたが、これは行列Aの3分の1乗根なので3乗すると元の行列が復元できるはずである。この検算を以下のコマンドで行う。

1|$A_dec %*% A_dec %*% A_dec
3  4  1  4
1  2  1  1
1  1  2  1
1  1  1  2

以上のように確かに行列Aが復元された。このコマンドを用いれば行列の平方根を求めることも容易である。上の黄色で示した"1/3"を"1/2"に変更すれば良い。

このように以上の操作を行えば行列の累乗 (冪乗)が可能であるが、この操作は行列の固有値が全て正の場合に限り成功する。行列Aの固有値は以下のコマンドで確認できる。

1|$eigen(A)$values

固有値が負の値を含む場合は他の方法を探す必要がある。また、この他にも"svd"関数を用いて行列のべき乗を求めることが可能ではあるようである。

このエントリーをはてなブックマークに追加

Site search

ページのトップへ戻る