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)
(A
real 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 >> |