MATLAB Function Reference    
eigs

正方大規模スパース行列の部分的な固有値と固有ベクトルを算出

表示

詳細

d = eigs(A) は、Aの中の大きい順に6番目までの固有値をベクトルとして出力します。

[V,D] = eigs(A) は、A の中の大きい順に6番目までの固有値からなる対角行列 D と、対応する固有ベクトルからなる行列 V を出力します。

[V,D,flag] = eigs(A) は、収束状況を示すフラグも出力します。flag0 の場合、すべての固有値は収束しています。他の場合は、必ずしも収束していません。

eigs(Afun,n) は、行列 A の代わりに、関数 Afun を受け入れます。y = Afun(x) は、y = A*x と等価です。ここで、x は、n1 列のベクトルで、nは、A の大きさを示します。Afun で表される行列 A は、実数で、非対称と仮定しています。多くのこれらをコールする場合、eigs(A,...) は、 eigs(Afun,n,...) と置き換わります。

eigs(A,B) は、一般的固有値問題A*V == B*V*D を解きます。B は、対称(または、エルミート)正定行列で、Aと同じサイズである必要があります。eigs(A,[],...) は、標準の固有値問題 A*V == V*D を示しています。

eigs(A,k) eigs(A,B,k) は、大きい順に k 個の固有値を出力します。

eigs(A,k,sigma) eigs(A,B,k,sigma) は、sigma をベースに k 個の固有値を出力します。sigma は、つぎの意味をもっています。



scalar
sigma に最も近い固有値。sigma がスカラの場合、Afun は、A\x (標準)、または、(A-sigma*B)\x (一般的)のいずれかを出力します。B は、対称(エルミート)半正定であることのみが必要であることに注意してください。
'lm'
最大固有値(デフォルト)
'sm'
最小固有値
実数対称問題に対して、つぎのオプションがあります。
'la'
最大実数部(MATLAB 5 の 'lr')
'sa'
最小実数部(MATLAB 5 の 'sr')
'be'
両端(k が奇数の場合、大きいほうの端を一つ余分にとる)
非対称、複素数問題に対して、つぎのオプションもあります。
'lr'
最大実数部
'sr'
最小実数部
'li'
最大虚数部
'si'
最小虚数部

eigs(A,K,sigma,opts) eigs(A,B,k,sigma,opts) は、options 構造体を指定します。

パラメータ
詳細
デフォルト値
options.issym
0、または、1A、または、A-sigma*B の対称性を Afun で表す。
0
options.isreal
0、または、1A、または、A-sigma*B の対称性を Afun で表す。
0
options.tol
収束:abs(lamda_comp-lamda_true) < tol*abs(lamda_comp)
eps
options.maxit
繰り返し最大回数
300
options.p
基底ベクトルの数。p >= 2k (p >= 2k+1 は、実数非対称) を推奨。p は、実数対称なものに対して、 k < p <= nで、他のものでは、 k+1 < p <= n であることに注意してください。
2K
options.v0
スタートベクトル
ARPACKによりランダムに生成
options.disp
警告情報表示レベル
1
options.cholB
B が、コレスキ分解 chol(B) である場合 1、他の場合 0 です。
0
options.permB
スパース B が、chol(B(permB,permB)) の場合、置換ベクトルです。
1:N

eigs(Afun,n,k,sigma,opts,p1,p2,...)eigs(Afun,n,b,k,sigma,opts,p1,p2,...) は、Afun(x,p1,p2,...) に渡す付加的な引数を与えます。

注意

d = eigs(A,k) は、つぎのように分解できます。

これは、大きなスパース行列に対して、最も適しています。問題の大きさ対して、メモリが十分な場合、簡単に、eig(full(A))を使います。

例題

例題 1:

等価なものとして、dnRk がつぎの一ラインの関数

で表される場合、dnRkの付加的な引数'C'15eigs に渡します。

例題 2:

west0479 は、479 行 479 列のスパース行列で、実数と複素共役の固有値をもつスパース行列です。eig は、479 個すべての固有値を計算します。eigs は、簡単に、大きな固有値を計算します。

つぎのプロットは、eig で計算された west0479 の固有値と、eigs で計算された west0479 の固有値を表示したものです。その内の複素平面の上半分の内の大きい順に4つの固有値を示しています(複素共役を示していません)。

例題 3:

A = delsq(numgrid('C',30)) は、区間 (0 8) に、ほど良く配置された固有値をもつ大きさ 632 の対称正定行列です。但し、この内の18個の固有値は、4の位置で繰り返しを行っています。関数 eig は、632個の固有値すべてを計算します。A の大きい順に6個、小さい順に6個の固有値は、つぎのように計算します。

しかし、4の位置での繰り返し固有値は、注意深く取り扱う必要があります。コール eigs(A,18,4.0) は、4.0 の近くで18個の固有値を計算します。それより、A - 4.0*I の固有値を検出してみましょう。ここでは、1/(lambda - 4.0) の割り算の型を含んでいます。ここで、lambda は、A の固有値の推定値です。lambda が、4.0 に近い場合、eigs の計算がうまく行かない場合があります。これら18個の固有値を検出するには、sigma に4の近似値(4とは一致しない)を使う必要があります。

プロット図は、4の近くに eig で計算された20個の固有値を示します。また、eigs で計算されたものでは、4 - 1e-6の近くに18個の固有値を示します。

参考

arpackc, eig, svds

参考文献

Lehoucq, R.B. and D.C. Sorensen, "Deflation Techniques for an Implicitly Re-Started Arnoldi Iteration," SIAM J. Matrix Analysis and Applications, Vol. 17, 1996, pp. 789-821.

Lehoucq, R.B., D.C. Sorensen, and C. Yang, ARPACK Users' Guide: Solution of Large-Scale Eigenvalue Problems with Implicitly Restarted Arnoldi Methods, SIAM Publications, Philadelphia, 1998.

Sorensen, D.C., "Implicit Application of Polynomial Filters in a k-Step Arnoldi Method," SIAM J. Matrix Analysis and Applications, Vol. 13, 1992, pp. 357-385.


 eig ellipj