eigs
行列の最大固有値と固有ベクトルを計算
呼び出し手順
d = eigs(A) d = eigs(Af, n) d = eigs(.., B) d = eigs(.., B, k) d = eigs(.., B, k, sigma) d = eigs(.., B, k, sigma, opts) [d, v] = eigs(..)
引数
- A
通常または疎, 実数または複素数, 対称または非対称正方行列
- B
Aと同じ次元の疎, 実数または複素数, 正方行列. Specify[]to skip it, as by default.- k
整数, 計算する固有値の数. By default,
k=min(n-1, 6)(Areal symetric) ork=min(n-2, 6)(otherwise) eigen values are computed, with n=size(A,1).- sigma
実スカラーまたは長さ2の文字列
- opts
構造体
- Af
関数
- n
スカラー, Aが関数の場合のみ
A定義- d
実数または複素数の固有値ベクトルまたは対角行列 (対角項に固有値)
- v
実数または複素数の固有ベクトル行列
説明
eigs関数の目的は,疎で大きな行列の最大固有値を計算することです.
- d = eigs(A) または d = eigs(Af, n)
は,固有値問題
A * v = lambda * vを解きます. このコールは,大きさが最大の6個の固有値を有する ベクトルdを返します.Aは正方行列で, 対称または非対称, 実数または複素数, 通常または複素数 とすることができます.Aは関数Afで 表すことも可能です.この場合, ベクトル引数の長さを指定するスカラーnを 定義する必要があります. この関数は,以下のヘッダを有する必要があります:function y=A(x)
この関数
Afは以下の4つの式の1つを返す必要があります:- A * x
sigmaが指定されないか文字列が'SM'以外の場合.
- A \ x
sigmaが0または'SM'の場合.
- (A - sigma * I) \ x
標準固有値問題の場合, ただし I は単位行列.
- (A - sigma * B) \ x
一般化固有値問題の場合.
- A * x
- [d, v] = eigs(A) or [d, v] = eigs(Af, n)
は,6個の最大固有値を対角項に有する対角行列
dを返します.vは n行6列の行列で, その列は返された固有値に対応する6個の固有値ベクトルです.- d = eigs(A, B)
は,正定行列
Bを指定して, 一般化固有値問題A * v = lambda * B * vを解きます.Bが指定されない場合,B = []が使用されます.Bが指定された場合,BはAと同じ大きさとする必要があります.
- d = eigs(A, B, k)
は,
k個の固有値をベクトルdに返します.- d = eigs(A, B, k, sigma)
は,
sigmaで定義されたk個の固有値を ベクトルdに返します.sigmaは,0を含む実数または複素数,または文字列 とすることができます. sigma が長さ2の文字列の場合, 以下の値のどれかとします :'LM'は,大きさが最大のk個の 固有値を計算します(デフォルト).'SM'は,大きさが最小のk個の 固有値を計算します(sigma = 0 と同じ).'LA'は,実対称問題のみに適用され,k個の代数的最大固有値を計算します.'SA'は,実対称問題のみに適用され,k個の代数的最小固有値を計算します.'BE'は,実対称問題のみに適用され, スペクトラムの各端から半分づつ,k個の固有値を計算します.'LR'は,実非対称または複素問題のみに適用され,k個の実部最大の固有値を計算します.'SR'は,実非対称または複素問題のみに適用され,k個の実部最小の固有値を計算します.'LI'は,実非対称または複素問題のみに適用され,k個の虚部最大の固有値を計算します.'SI'は,実非対称または複素問題のみに適用され,k個の虚部最小の固有値を計算します.
- d = eigs(A, B, k, sigma, opts)
opts構造体が指定された場合,k個の固有値を計算する際に 異なるオプションを使用できます:tol
所要の収束閾値. デフォルトで,
tol = %eps.maxiter
最大反復回数. デフォルトで,
maxiter = 300.ncv
使用するLanzcos基底ベクトルの数. 実非対称問題の場合,
ncvの値は2 * k + 1以上とする必要があり, デフォルトでncv = min(max(2 * k + 1, 20), nA)です. 実対称または複素数問題の場合,ncvは2 * k以上とする必要があり, デフォルトでncv = min(max(2 * k, 20), nA)です.ただし,nA = size(A, 2).resid
初期残差ベクトルを有する開始ベクトルで, 前回実行時の値を使用することもできます. デフォルトで,
residはランダムな 初期値ベクトルです.cholB
Bではなくchol(B)を指定します. デフォルトで ,cholBは %f です.isreal
Afが指定された場合,isrealを定義できます. デフォルトで,isrealは %t です. この引数は,Aが行列の場合, 指定する必要がありません.issym
Afが指定された場合,issymを定義できます. デフォルトでissymは %f です. この引数は,Aが行列の場合, 指定する必要がありません.
参考文献
この関数はR. Lehoucq, K. Maschhoff, D. Sorensen, および C. Yang.により書かれた ARPACKパッケージに基づいています.
実対称問題用のDSAUPD および DSEUPD ルーチン,
実非対称行列用のDNAUPD および DNEUPD ルーチン.
複素問題用のZNAUPD および ZNEUPD.
実対称問題の例
clear opts A = diag(10*ones(10,1)); A(1:$-1,2:$) = A(1:$-1,2:$) + diag(6*ones(9,1)); A(2:$,1:$-1) = A(2:$,1:$-1) + diag(6*ones(9,1)); B = eye(10,10); k = 8; sigma = 'SM'; opts.cholB = %t; d = eigs(A) [d, v] = eigs(A) d = eigs(A, B, k, sigma) [d, v] = eigs(A, B, k, sigma) d = eigs(A, B, k, sigma, opts) [d, v] = eigs(A, B, k, sigma, opts) // 疎行列 AS = sparse(A); BS = sparse(B); d = eigs(AS) [d, v] = eigs(AS) d = eigs(AS, BS, k, sigma) [d, v] = eigs(AS, BS, k, sigma) d = eigs(AS, BS, k, sigma, opts) [d, v] = eigs(AS, BS, k, sigma, opts) // 関数 clear opts function y=fn(x) y = A * x; endfunction opts.isreal = %t; opts.issym = %t; d = eigs(fn, 10, [], k, 'LM', opts) function y=fn(x) y = A \ x; endfunction d = eigs(fn, 10, [], k, 'SM', opts) function y=fn(x) y = (A - 4 * eye(10,10)) \ x; endfunction d = eigs(fn, 10, [], k, 4, opts)
実非対称問題の例
clear opts A = diag(10*ones(10,1)); A(1:$-1,2:$) = A(1:$-1,2:$) + diag(6*ones(9,1)); A(2:$,1:$-1) = A(2:$,1:$-1) + diag(-6*ones(9,1)); B = eye(10,10); k = 8; sigma = 'SM'; opts.cholB = %t; d = eigs(A) [d, v] = eigs(A) d = eigs(A, B, k, sigma) [d, v] = eigs(A, B, k, sigma) d = eigs(A, B, k, sigma, opts) [d, v] = eigs(A, B, k, sigma, opts) // 疎行列 AS = sparse(A); BS = sparse(B); d = eigs(AS) [d, v] = eigs(AS) d = eigs(AS, BS, k, sigma) [d, v] = eigs(AS, BS, k, sigma) d = eigs(AS, BS, k, sigma, opts) [d, v] = eigs(AS, BS, k, sigma, opts) // 関数 clear opts function y=fn(x) y = A * x; endfunction opts.isreal = %t; opts.issym = %f; d = eigs(fn, 10, [], k, 'LM', opts) function y=fn(x) y = A \ x; endfunction d = eigs(fn, 10, [], k, 'SM', opts) function y=fn(x) y = (A - 4 * eye(10,10)) \ x; endfunction d = eigs(fn, 10, [], k, 4, opts)
複素問題の例
clear opts A = diag(10*ones(10,1) + %i * ones(10,1)); A(1:$-1,2:$) = A(1:$-1,2:$) + diag(6*ones(9,1)); A(2:$,1:$-1) = A(2:$,1:$-1) + diag(-6*ones(9,1)); B = eye(10,10); k = 8; sigma = 'LM'; opts.cholB = %t; d = eigs(A) [d, v] = eigs(A) d = eigs(A, B, k, sigma) [d, v] = eigs(A, B, k, sigma) d = eigs(A, B, k, sigma, opts) [d, v] = eigs(A, B, k, sigma, opts) // 疎行列 AS = sparse(A); BS = sparse(B); d = eigs(AS) [d, v] = eigs(AS) d = eigs(AS, BS, k, sigma) [d, v] = eigs(AS, BS, k, sigma) d = eigs(AS, BS, k, sigma, opts) [d, v] = eigs(AS, BS, k, sigma, opts) // 関数 clear opts function y=fn(x) y = A * x; endfunction opts.isreal = %f; opts.issym = %f; d = eigs(fn, 10, [], k, 'LM', opts) function y=fn(x) y = A \ x; endfunction d = eigs(fn, 10, [], k, 'SM', opts) function y=fn(x) y = (A - 4 * eye(10,10)) \ x; endfunction d = eigs(fn, 10, [], k, 4, opts)
参照
- spec — 行列とペンシルの固有値
履歴
| バージョン | 記述 |
| 5.4.0 | 関数が導入されました. |
| 6.1.1 | dnaupd, dneupd, dsaupd, dseupd, znaupd and zneupd become internal. |
| Report an issue | ||
| << bdiag | Eigenvalue and Singular Value | pbig >> |