狠狠撸

狠狠撸Share a Scribd company logo
2009.08 作成

             [R]   対称行列の固有値?固有ベクトルの最適な求め方



 固有値算出には、固有値分解、特異値分解、QR 分解などいくつかの方法があり、R では
いずれも LAPACK のルーチンを呼び出して使っている。
 対称行列についての計算の場合は、計算効率が良く DC 法よりもメモリを消費しない HG
法を採用している eigen 関数の利用が最も良いと思われる。


LAPACK にある固有値?特異値問題の解き方の流れ
  Phase 1.    初期行列を減じる        (二重対角化)
  Phase 2.    固有値計算
  Phase 3.    結果がもとの行列に対応するよう逆変換
 ※ Phase 1 と 3 は並立処理可能。問題は Phase 2。


固有値計算(Phase 2)の解法
 1) QR 法                               [LAPACK V.1~]
     計算効率が O(n**3)
 2) Divide-and-conquer(分割統治:DC)法       [LAPACK V.2~]
     計算効率が最大で O(n**3)
 3) Holy Grail(HG)法                    [LAPACK V.3~]
     計算効率が O(nk)


Rの固有値?特異値分解で使っている LAPACK ルーチン
 ○ 固有値分解 eigen()
  - DSYEVR   対称行列の固有値問題に対する倍精度実数の RRR ドライバ ← HG 法
             ※ RRR: relatively robust representation の略
  - DGEEV    非対称行列の固有値問題に対する倍精度実数の simple ドライバ
  - ZHEEV    倍精度複素数用
  - ZGEEV    倍精度複素数用


 ○ 特異値分解 svd()
  - DGESDD   特異値分解の DC 法ドライバ
  - ZGESVD   倍精度複素数用



[参考]          “LAPACK Users’ Guide” Third Edition
             http://www.netlib.org/lapack/lug/index.html

More Related Content

搁での対称行列の固有値?固有ベクトルの最适な求め方

  • 1. 2009.08 作成 [R] 対称行列の固有値?固有ベクトルの最適な求め方 固有値算出には、固有値分解、特異値分解、QR 分解などいくつかの方法があり、R では いずれも LAPACK のルーチンを呼び出して使っている。 対称行列についての計算の場合は、計算効率が良く DC 法よりもメモリを消費しない HG 法を採用している eigen 関数の利用が最も良いと思われる。 LAPACK にある固有値?特異値問題の解き方の流れ Phase 1. 初期行列を減じる (二重対角化) Phase 2. 固有値計算 Phase 3. 結果がもとの行列に対応するよう逆変換 ※ Phase 1 と 3 は並立処理可能。問題は Phase 2。 固有値計算(Phase 2)の解法 1) QR 法 [LAPACK V.1~] 計算効率が O(n**3) 2) Divide-and-conquer(分割統治:DC)法 [LAPACK V.2~] 計算効率が最大で O(n**3) 3) Holy Grail(HG)法 [LAPACK V.3~] 計算効率が O(nk) Rの固有値?特異値分解で使っている LAPACK ルーチン ○ 固有値分解 eigen() - DSYEVR 対称行列の固有値問題に対する倍精度実数の RRR ドライバ ← HG 法 ※ RRR: relatively robust representation の略 - DGEEV 非対称行列の固有値問題に対する倍精度実数の simple ドライバ - ZHEEV 倍精度複素数用 - ZGEEV 倍精度複素数用 ○ 特異値分解 svd() - DGESDD 特異値分解の DC 法ドライバ - ZGESVD 倍精度複素数用 [参考] “LAPACK Users’ Guide” Third Edition http://www.netlib.org/lapack/lug/index.html