MATLAB Function Reference | ![]() ![]() |
表示
d = eigs(A) d = eigs(A,B) d = eigs(A,k) d = eigs(A,B,k) d = eigs(A,k,sigma) d = eigs(A,B,k,sigma) d = eigs(A,k,sigma,options) d = eigs(A,B,k,sigma,options) d = eigs(Afun,n) d = eigs(Afun,n,B) d = eigs(Afun,n,k) d = eigs(Afun,n,B,k) d = eigs(Afun,n,k,sigma) d = eigs(Afun,n,B,k,sigma) d = eigs(Afun,n,k,sigma,options) d = eigs(Afun,n,B,k,sigma,options) d = eigs(Afun,n,k,sigma,options,p1,p2...) d = eigs(Afun,n,B,k,sigma,options,p1,p2...) [V,D] = eigs(A,...) [V,D] = eigs(Afun,n,...) [V,D,flag] = eigs(A,...) [V,D,flag] = eigs(Afun,n,...)
詳細
d = eigs(A)
は、A
の中の大きい順に6番目までの固有値をベクトルとして出力します。
[V,D] = eigs(A)
は、A
の中の大きい順に6番目までの固有値からなる対角行列 D
と、対応する固有ベクトルからなる行列 V
を出力します。
[V,D,flag] = eigs(A)
は、収束状況を示すフラグも出力します。flag
が 0
の場合、すべての固有値は収束しています。他の場合は、必ずしも収束していません。
eigs(Afun,n)
は、行列 A
の代わりに、関数 Afun
を受け入れます。y = Afun(x)
は、y = A*x
と等価です。ここで、x
は、n
行 1
列のベクトルで、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
は、つぎの意味をもっています。
eigs(A,K,sigma,opts)
と eigs(A,B,k,sigma,opts)
は、options 構造体を指定します。
eigs(Afun,n,k,sigma,opts,p1,p2,...)
と eigs(Afun,n,b,k,sigma,opts,p1,p2,...)
は、Afun(x,p1,p2,...)
に渡す付加的な引数を与えます。
注意
d = eig(full(A)) d = sort(d) d = d(end-k+1:end)
これは、大きなスパース行列に対して、最も適しています。問題の大きさ対して、メモリが十分な場合、簡単に、eig(full(A))
を使います。
例題
A = delsq(numgrid('C',15)); d1 = eigs(A,5,'sm');
function y = dnRk(x,R,k) y = (delsq(numgrid(R,k))) * x;
で表される場合、dnRk
の付加的な引数'C'
と 15
を eigs
に渡します。
n = size(A,1); opts.issym = 1; d2 = eigs(@dnRk,n,5,'sm',opts,'C',15);
west0479
は、479 行 479 列のスパース行列で、実数と複素共役の固有値をもつスパース行列です。eig
は、479 個すべての固有値を計算します。eigs
は、簡単に、大きな固有値を計算します。
load west0479 d = eig(full(west0479)) dlm = eigs(west0479,8)
つぎのプロットは、eig
で計算された west0479
の固有値と、eigs
で計算された west0479
の固有値を表示したものです。その内の複素平面の上半分の内の大きい順に4つの固有値を示しています(複素共役を示していません)。
A = delsq(numgrid('C',30))
は、区間 (0 8) に、ほど良く配置された固有値をもつ大きさ 632 の対称正定行列です。但し、この内の18個の固有値は、4の位置で繰り返しを行っています。関数 eig
は、632個の固有値すべてを計算します。A
の大きい順に6個、小さい順に6個の固有値は、つぎのように計算します。
d = eig(full(A)) dlm = eigs(A) dsm = eigs(A,6,'sm')
しかし、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とは一致しない)を使う必要があります。
sigma = 4 - 1e-6 [V,D] = eigs(A,18,sigma)
プロット図は、4の近くに eig
で計算された20個の固有値を示します。また、eigs
で計算されたものでは、4 - 1e-6
の近くに18個の固有値を示します。
参考
参考文献
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 | ![]() |