web-dev-qa-db-ja.com

行列の固有値を計算するのにどれくらいの費用がかかりますか?

行列の固有値を計算するのにどれくらいの費用がかかりますか?

最高のアルゴリズムの複雑さは何ですか?

1000 x 1000のマトリックスがある場合、実際にはどのくらい時間がかかりますか?行列がスパースの場合に役立つと思いますか?

固有値の計算が終了しない場合はありますか?

Rでは、次のおもちゃの例のように固有値を計算できます。

m<-matrix( c(13,2, 5,4), ncol=2, nrow=2 )
eigen(m, only.values=1)
$values
[1] 14  3

誰かがそれが使用するアルゴリズムを知っていますか?

固有値を計算する他の(オープンソース)パッケージはありますか?

31
Frank

固有値計算のアルゴリズムのほとんどは、big-Oh(n ^ 3)にスケーリングされます。ここで、nは(対称および正方)行列の行/列次元です。

現在までの最良のアルゴリズムの時間計算量を知るには、Scientific Computing/NumericalMethodsの最新の研究論文を参照する必要があります。

ただし、最悪の場合を想定した場合でも、1000x1000行列に対して少なくとも1000 ^ 3の操作が必要になります。

Rは、デフォルトでLAPACKルーチン(DSYEVR、DGEEV、ZHEEV、およびZGEEV)の実装を使用します。ただし、EISPACK = TRUEをパラメーターとして指定して、EISPACKのRS、RG、CH、およびCGルーチンを使用することもできます。

固有値計算のための最も人気があり、優れたオープンソースパッケージはLAPACKとEISPACKです。

20
amit-agrawal

大きな行列では、通常、すべての固有値が必要になるわけではありません。上位の少数の人に(たとえば)次元削減を実行させたいだけです。

正規アルゴリズムは、ARPACKに実装されているArnoldi-Lanczos反復アルゴリズムです:

www.caam.rice.edu/software/ARPACK/

Eigsにはmatlabインターフェースがあります:

http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/ref/eigs.html

eigs(A,k) and eigs(A,B,k) return the k largest magnitude eigenvalues.

そして今、Rインターフェースもあります:

http://igraph.sourceforge.net/doc-0.5/R/arpack.html

18
ramanujan

1000x1000のマトリックスがある場合、実際にはどのくらい時間がかかりますか?

MATLAB(LAPACKに基づく)は、デュアルコア1.83 GHzマシンで、1000x1000のランダムなすべての固有値を約5秒で計算します。行列が対称の場合、計算は大幅に高速化され、約1秒しかかかりません。

8
Fanfan

固有値アルゴリズム を見てみましょう。これは、さまざまな方法にリンクしています。それらはすべて異なる特性を持ち、うまくいけば、1つがあなたの目的に適しているでしょう。

5
Brian Agnew

[〜#〜] cran [〜#〜]GuessCompxパッケージを使用して、固有値計算の経験的複雑さを推定し、完全な値を予測できます。実行時間(あなたの例ではまだ小さいですが)。フィッティングプロセスは行をサブセット化するだけなので、少しヘルパー関数が必要です。したがって、行列を正方行列にする必要があります。

_library(GuessCompx)
m = matrix(rnorm(1e6), ncol=1000, nrow=1000)
# custom function  to subset the increasing-size matrix to a square one:
eigen. = function(m) eigen(as.matrix(m[, 1:nrow(m)]))
CompEst(m, eigen.)
#### $`TIME COMPLEXITY RESULTS`
#### $`TIME COMPLEXITY RESULTS`$best.model
#### [1] "CUBIC"
#### $`TIME COMPLEXITY RESULTS`$computation.time.on.full.dataset
#### [1] "5.23S"
#### $`TIME COMPLEXITY RESULTS`$p.value.model.significance
#### [1] 1.784406e-34
_

時間の立方体の複雑さ、およびメモリのNlog(N)の複雑さ Rベースのeigen()関数の使用法が得られます。計算全体を実行するには、5.2秒と37Mbかかります。

enter image description here

3
agenis

QRアルゴを使用しています。 Wilkinson、J。H.(1965)代数的固有値問題を参照してください。クラレンドンプレス、オックスフォード。スパース性を利用しません。

0
power