投稿者 tel | 2014年1月11日

2×2行列の固有値を求める

2×2の行列の固有値を求めるプログラムを書いた。xyの分布の主成分分析するときとかに使う。

固有値のおさらい

正方行列Mに対して以下の様なλを固有値という。

eigen

固有値を求めるには以下の式(固有方程式)を解く。

eigene

ここでIは単位行列。2×2の行列の場合をがんばって計算すると、

det

になるので解の公式を使って

ans

となる。固有ベクトルは

evec

プログラム

解の公式で解く際に、答えが虚数になる場合があるのでそのときは求めないことにした。

// 固有ベクトル、固有値を求める
function solve(m, e, v0, v1) {
    var b = m[0] + m[3],
    c = m[0] * m[3] - m[1] * m[2],
    d = b * b - 4 * c;

    // 虚数になる場合は計算しない
    if(d < 0) return false;

    d = Math.sqrt(d);

    e[0] = 0.5 * (b + d);
    e[1] = 0.5 * (b - d);

    v0[0] = m[1];
    v0[1] = m[3] - e[1];

    v1[0] = m[0] - e[0];
    v1[1] = m[2];

    return true;
}

http://jsdo.it/sapphire_al2o3/eigen

大きい行列の場合は解析的には無理そうなので別の手法を使う。


Responses

  1. 11
    00
    求まらない


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。