行列の最大固有値と固有ベクトルを計算
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
と同じ次元の疎, 実数または複素数, 正方行列.
Specify []
to skip it, as by default.
整数, 計算する固有値の数. By default,
k=min(n-1, 6)
(A
real symetric) or
k=min(n-2, 6)
(otherwise) eigen values are computed,
with n=size(A,1).
実スカラーまたは長さ2の文字列
構造体
関数
スカラー, Aが関数の場合のみ A
定義
実数または複素数の固有値ベクトルまたは対角行列 (対角項に固有値)
実数または複素数の固有ベクトル行列
eigs関数の目的は,疎で大きな行列の最大固有値を計算することです.
は,固有値問題A * v = lambda * v
を解きます.
このコールは,大きさが最大の6個の固有値を有する
ベクトル d
を返します.
A
は正方行列で,
対称または非対称, 実数または複素数, 通常または複素数
とすることができます.
A
は関数Af
で
表すことも可能です.この場合,
ベクトル引数の長さを指定するスカラーn
を
定義する必要があります.
この関数は,以下のヘッダを有する必要があります:
function y=A(x)
この関数 Af
は以下の4つの式の1つを返す必要があります:
sigmaが指定されないか文字列が'SM'以外の場合.
sigmaが0または'SM'の場合.
標準固有値問題の場合, ただし I は単位行列.
一般化固有値問題の場合.
は,6個の最大固有値を対角項に有する対角行列 d
を返します.
v
は n行6列の行列で,
その列は返された固有値に対応する6個の固有値ベクトルです.
は,正定行列B
を指定して,
一般化固有値問題 A * v = lambda * B * v
を解きます.
B
が指定されない場合,
B = []
が使用されます.
B
が指定された場合,
B
はAと同じ大きさとする必要があります.
は,k
個の固有値をベクトルd
に返します.
は,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
個の虚部最小の固有値を計算します.
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) | ![]() | ![]() |
Version | Description |
5.4.0 | 関数が導入されました. dnaupd, dneupd, dsaupd, dseupd, znaupd および zneupdは廃止されました. |