主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

eigs

固有値および固有ベクトルのサブセット

説明

d= eigs (一个は,行列一个について,絶対値が最も大きい6個の固有値からなるベクトルを返します。これは大規模なスパース行列など,eigを使用してすべての固有値を計算すると計算負荷が高くなる場合に非常に便利です。

d= eigs (一个kは,絶対値が最も大きいk個の固有値を返します。

d= eigs (一个kσσの値に基づいて,k個の固有値を返します。たとえば,eigs (k ' smallestabs ')は絶対値が最も小さいk個の固有値を返します。

d= eigs (一个kσ名称,值は1つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば,eigs (k,σ,“宽容”,1 e - 3)はアルゴリズムの収束の許容誤差を調整します。

d= eigs (一个kσ选择は構造体を使用してオプションを指定します。

d= eigs (一个B___は一般化固有値問題* V = B * * Dを求解します。オプションで,kσ选择または名前と値のペアの引数を追加の入力引数として指定できます。

d= eigs (Afunn___は,行列ではなく関数ハンドルAfunを指定します。2番目の入力nは,Afunで使用される行列一个のサイズを指定します。オプションで,Bkσ选择または名前と値のペアの引数を追加の入力引数として指定できます。

VD) = eigs (___は,主対角に固有値を含む対角行列Dと,対応する固有ベクトルを列に含む行列Vを返します。前述の構文にある任意の入力引数の組み合わせが使用できます。

VD国旗) = eigs (___は,収束フラグも返します。国旗0の場合,すべての固有値は収束しています。

すべて折りたたむ

行列一个= delsq (numgrid (' C ', 15))は,区間(0 8)にほど良く配置された固有値をもつ対称正定値行列です。絶対値が最も大きい6個の固有値を計算します。

一个= delsq (numgrid (“C”、15));d = eigs (A)
d =6×17.8666 7.7324 7.6531 7.5213 7.4480 7.3517

2番目の入力を指定して,最も大きい特定数の固有値を計算します。

d = eigs (3)
d =3×17.8666 7.7324 7.6531

行列一个= delsq (numgrid (' C ', 15))は,区間(0 8)にほど良く配置された固有値をもつ対称正定値行列です。最も小さい5個の固有値を計算します。

一个= delsq (numgrid (“C”、15));d = eigs (5“smallestabs”
d =5×10.1334 0.2676 0.3469 0.4787 0.5520

非ゼロ要素の密度がの約25%,1500行1500列の乱数スパース行列を作成します。

n = 1500;一个= sprand (n, n, 0.25);

行列の陆分解を求め,:一个(p) = L * Uを満たす置換ベクトルpを返します。

陆(L U p) = (,“向量”);

関数ハンドルAfunを作成します。この関数ハンドルはベクトル入力xを受け取り,陆分解の結果を使用して,実質的にx \を返します。

@(x) U\(L\(x(p)));

eigsと関数ハンドルAfunを使用して,絶対値の最も小さい6個の固有値を計算します。2番目の入力は一个のサイズです。

d = eigs (Afun 1500 6“smallestabs”
d =6×1复杂0.1423 + 0.0000i 0.4859 + 0.0000i -0.3323 - 0.3881i -0.3323 + 0.3881i 0.1019 - 0.5381i 0.1019 + 0.5381i

west0479は479行479列の実数値スパース行列であり,共役固有値の実数および複素数のペアをもちます。

west0479行列を読み込み,eigを使用してすべての固有値を計算してプロットします。固有値は複素数であるため,情节は自動的に実数部をx座標,虚数部をy座標として使用します。

负载west0479一个= west0479;d = eig(完整的(A));情节(d,“+”

固有値は,実数直線(x軸)に沿って,特に原点近くに集まっています。

eigsには,各種の最大の固有値または最小の固有値を取り出すことができるσのオプションがいくつかあります。σで使用できるオプションごとに,いくつかの固有値を計算してプロットします。

图绘制(d,“+”)举行la = eigs (6“largestabs”);情节(洛杉矶,“罗”A,6, A = eigs“smallestabs”);情节(sa),“去”)举行传奇(所有特征值的最大程度的最小程度的)包含(“实轴”) ylabel (“虚轴”

图绘制(d,“+”)举行数量= eigs (4“bothendsreal”);情节(ber,“r ^”A,4, 4“bothendsimag”);情节(贝,“g ^”)举行传奇(所有特征值的“真实”的两端“两端想象的”)包含(“实轴”) ylabel (“虚轴”

图绘制(d,“+”)举行lr = eigs (3“largestreal”);情节(lr,“罗”) sr = eigs(A,3,“smallestreal”);情节(sr,“去”i = eigs(A,3, 3)“largestimag”“SubspaceDimension”, 45岁);情节(李“m ^”i = eigs(A,3,“smallestimag”“SubspaceDimension”, 45岁);情节(si,“c ^”)举行传奇(所有特征值的最大的真实”“最小的真实”“最大的想象”“最小的想象”)包含(“实轴”) ylabel (“虚轴”

対称正定値スパース行列を作成します。

一个= delsq (numgrid (“C”, 150));

“smallestreal”を使用して,最も小さい6個の実数固有値を計算します。この場合,一个维多を使用して法が実行されます。

d = eigs(A, 6,“smallestreal”
d =6×10.0013 0.0025 0.0033 0.0045 0.0052 0.0063
toc
运行时间为3.043174秒。

“smallestabs”を使用して,同じ固有値を計算します。この場合,一个维多の逆行列を使用して法が実行されます。

A, 6,“smallestabs”
dsm =6×10.0013 0.0025 0.0033 0.0045 0.0052 0.0063
toc
运行时间为0.443565秒。

固有値はゼロの近くに集まります。一个を使用する“smallestreal”の計算は収束に時間がかかります。これは,固有値間のギャップが非常に小さいためです。反対に,“smallestabs”オプションでは一个の逆行列を使用するため,一个の固有値の逆行列でギャップがはるかに大きくなり,結果として計算が容易になります。このパフォーマンスの改善は,“smallestreal”では不要な一个の因子分解を行うことで得られます。

固有値とほぼ等しい数値σの近傍の固有値を計算します。

行列一个= delsq (numgrid(“C”,30))は,区間(0 8)にほど良く配置された固有値をもつサイズ632の対称正定値行列です。ただし,このうちの18個の固有値は,4.0の位置で反復があります高祖近傍の固有値をいくつか計算するには,関数呼び出し4.0 eigs (20)を試みるのが妥当です。ただし,この呼び出しは- 4.0 *我の逆行列の最大固有値を計算します。ここで,は単位行列です高祖は一个の固有値であるため,この行列は特異であり,逆行列はありません。eigsは失敗してエラーメッセージが出力されます。数値σは,固有値と厳密に等しい値にできません。これらの固有値を求めるには,代わりに4.0近傍(等しくない)のσ値を使用しなければなりません。

eigを使用してすべての固有値を計算し,eigsを使用して4 - 1 e-6に最も近い20個の固有値を求めて,それらの結果を比較します。それぞれの方法で計算した固有値をプロットします。

一个= delsq (numgrid (“C”, 30));Sigma = 4 - 1e-6;d = eig(一个);D =排序(eigs(σ),20日);
情节(d (307:326),“ks”)举行情节(D,k +的)举行传奇(“eig (A)”“eigs(σ),20日”)标题(18个重复的A特征值

どちらも非ゼロ要素の密度の低い,乱数のスパース行列一个およびBを作成します。

B = sprandn(1e3,1e3,0.001) + speye(1e3);B = B * B;一个= sprandn (1 e3, e3, 0.005);= A + A”;

行列Bのコレスキー分解を求め,3つの出力を使用して置換ベクトル年代およびテスト値pを返します。

(R, p, s) =胆固醇(B,“向量”);p
p = 0

pはゼロであるため,BB (s, s) = R ' * Rを満たす対称正定値行列です。

一个およびRに関する一般化固有値問題について,絶対値が最も大きい6個の固有値および固有ベクトルを計算します。RBのコレスキー因子であるため,“IsCholesky”真正的として指定します。さらに,B (s, s) = R ' * Rであり,したがってR =胆固醇(B (s, s))であるため,置換ベクトル年代“CholeskyPermutation”の値として使用します。

[V D标志]= eigs (R, 6日“largestabs”“IsCholesky”,真的,“CholeskyPermutation”,年代);国旗
国旗= 0

国旗はゼロであるため,すべての固有値が収束しています。

入力引数

すべて折りたたむ

入力行列。正方行列として指定します。一个は通常(必ずではない),大きなスパース行列です。

一个が対称である場合,eigsはそうした場合専用のアルゴリズムを使用します。一个が”ほぼ”対称である場合は,= (+) / 2を使用して一个を対称にしてからeigsを呼び出すことを検討してください。これにより,eigsは複素数固有値ではなく,実数固有値を確実に計算します。

データ型:
複素数のサポート:あり

入力行列。一个と同じサイズの正方行列として指定します。Bが指定された場合,eigsは一般化固有値問題* V = B * * Dを求解します。

Bが対称正定値である場合,eigsはそうした場合専用のアルゴリズムを使用します。Bが”ほぼ”対称正定値である場合は,B = (B + B) / 2を使用してBを対称にしてからeigsを呼び出すことを検討してください。

一个がスカラーの場合,Bを空行列eigs ([], k)として指定して標準固有値問題を解くことで,Bkのあいまいさを解決できます。

データ型:
複素数のサポート:あり

計算する固有値の数。正のスカラー整数として指定します。

例:eigs (2)一个の最も大きい固有値を2つ返します。

固有値のタイプ。次の表のいずれかの値として指定します。

σ

説明

σ(R2017a以前)

标量(0を含む実数,複素数)

数値σに最も近い固有値。

変更なし

“largestabs”(既定)

最大の絶対値。

“lm”

“smallestabs”

最小固有値。σ= 0と同じ。

“sm”

“largestreal”

最大の実数値。

“lr”“拉”

“smallestreal”

最小の実数値。

“老”“sa”

“bothendsreal”

それぞれ最大の実数部および最小の実数部をもつ,両端のk / 2個の値(kが奇数の場合,大きいほうの端を1つ余分にとる)。

“是”

非対称問題では,σは次の値にすることもできます。

σ

説明

σ(R2017a以前)

“largestimag”

最大虚数部。

一个が複素数の場合,“李”

“smallestimag”

最小虚数部。

一个が複素数の場合,“如果”

“bothendsimag”

それぞれ最大の虚数部および最小の虚数部をもつ,両端のk / 2個の値(kが奇数の場合,大きいほうの端を1つ余分にとる)。

一个が実数の場合,“李”

例:eigs (k, 1)は1に最も近いk個の固有値を返します。

例:eigs (k ' smallestabs ')は絶対値が最も小さいk個の固有値を返します。

データ型:|字符|字符串

オプション構造体。第1次の表のつ以上のフィールドを含む構造体として指定します。

メモ

オプション構造体を使用したオプションの指定は推奨されません。代わりに名前と値のペアを使用してください。

オプションフィールド 説明 名前と値のペア
issym

Afun行列の対称性。

“IsFunctionSymmetric”
托尔

収束の許容誤差。

“宽容”
麦克斯特

反復最大回数

“MaxIterations”
p

兰索斯基底ベクトルの数。

“SubspaceDimension”

開始ベクトル

“StartVector”
disp

診断情報の表示レベル。

“显示”
失败 収束していない固有値の出力での処理。 “FailureTreatment”
上海浦东发展银行 Bは対称正定値か。 “IsSymmetricDefinite”
cholB

Bはコレスキー因子胆固醇(B)か。

“IsCholesky”
permB

スパース行列Bが実際に胆固醇(B (permB permB))である場合は,置換ベクトルpermBを指定します。

“CholeskyPermutation”

例:opts.issym= 1, opts.tol = 1e-10は,フィールドissymおよび托尔に値が設定された構造体を作成します。

データ型:结构体

行列関数。関数ハンドルとして指定します。関数y = Afun (x)は,σの入力に応じて適切な値を返さなければなりません。

  • * x- - - - - -σが未指定,または“smallestabs”以外のテキストオプションの場合。

  • x \- - - - - -σ0または“smallestabs”の場合。

  • (我)一个σ* \ x- - - - - -σが非ゼロのスカラーである場合(標準固有値問題)。

  • (一个σ* B) \ x- - - - - -σが非ゼロのスカラーである場合(一般化固有値問題)。

たとえば,次のAfunは,σ= ' smallestabs 'を指定してeigsを呼び出すときに機能します。

陆(L U p) =(,“矢量”);@(x) U\(L\(x(p)));d = eigs (Afun 100 6“smallestabs”)

一般化固有値問題の場合は,行列Bを次のように追加します(Bは関数ハンドルで表すことができません)。

d = eigs (Afun, 100 B 6“smallestabs”)

一个は,“IsFunctionSymmetric”(またはopts.issym)により対称であることが指定されている場合を除いて,非対称であると見なされます。“IsFunctionSymmetric”真正的に設定すると,eigsは複素数固有値ではなく,実数固有値を確実に計算します。

関数Afunに追加パラメーターを指定する方法の詳細については,関数のパラメーター化を参照してください。

ヒント

Afunから予測される出力を確認するには,“显示”オプションをオンにしてeigsを呼び出します。

Afunで表される正方行列一个のサイズ。正のスカラー整数として指定します。

名前と値のペアの引数

オプションの名称,值の引数ペアをコンマ区切りで指定します。的名字は引数名で,价值は対応する値です。的名字は引用符で囲まなければなりません。Name1, Value1,…,的家のように,複数の名前と値のペアの引数を任意の順序で指定できます。

例:d = eigs (k,σ,“宽容”,1平台以及MaxIterations, 100)は収束の許容誤差を緩和し,より少ない反復回数を使用します。
一般オプション

すべて折りたたむ

収束の許容誤差。“宽容”と正の実数値スカラーで構成されるコンマ区切りのペアとして指定します。

例:s = eigs (k,σ,“宽容”,1 e - 3)

アルゴリズムの最大反復回数。“MaxIterations”と正の整数で構成されるコンマ区切りのペアとして指定します。

例:d = eigs (k,σ,MaxIterations, 350)

维多部分空間の最大サイズ。“SubspaceDimension”と非負の整数で構成されるコンマ区切りのペアとして指定します。“SubspaceDimension”値は,実対称問題の場合はk + 1以上でなければならず,それ以外の場合はk + 2です。ここでkは固有値の数です。

推奨値はp > = 2 * kで,実非対称問題ではp > = 2 * k + 1です。“SubspaceDimension”値が指定されない場合,既定のアルゴリズムにより,少なくとも20.個の兰索斯ベクトルが使用されます。

eigsが収束しない問題では,“SubspaceDimension”の値を大きくすることで収束動作が改善される場合があります。ただし,値を大きくしすぎると,メモリの問題が発生することがあります。

例:d = eigs (k,σ,SubspaceDimension, 25)

初期開始ベクトル。“StartVector”と数値ベクトルで構成されるコンマ区切りのペアとして指定します。

異なる乱数開始ベクトルを指定する主な理由は,ベクトルの生成に使用する乱数ストリームを制御するためです。

メモ

eigsは,プライベート乱数ストリームを使用する再現可能な方法で開始ベクトルを選択します。乱数のシードを変更しても,開始ベクトルには影響”しません”

例:d = eigs (k,σ,StartVector, randn (m, 1))は,グローバル乱数ストリームから値を取り出す乱数開始ベクトルを使用します。

データ型:

収束しない固有値の処理。“FailureTreatment”と,“replacenan”“保持”“下降”のいずれかのオプションで構成されるコンマ区切りのペアとして指定します。

“FailureTreatment”の値は,eigsが収束しない固有値を出力に表示する方法を決定します。

オプション

出力への影響

“replacenan”

収束しない固有値を値に置き換えます。

“保持”

収束しない固有値を出力に含めます。

“下降”

収束しない固有値を出力から削除します。このオプションを使用すると,eigsは要求された数よりも少ない固有値を返す場合があります。

例:d = eigs (k,σ,“FailureTreatment”、“下降”)は収束していない固有値を出力から削除します。

データ型:字符|字符串

診断情報の表示の切り替え。“显示”と,数値または逻辑の1真正的)または0)で構成されるコンマ区切りのペアとして指定します。計算中に診断情報の表示をオンにするには,値真正的または1を指定します。

Afunのオプション

すべて折りたたむ

Afun行列の対称性。“IsFunctionSymmetric”と,数値または逻辑の1真正的)または0)で構成されるコンマ区切りのペアとして指定します。

このオプションは,Afunが入力ベクトルに適用する行列が対称であるかどうかを指定します。真正的または1の値を指定すると,eigsが対称行列に専用のアルゴリズムを使用して,実数固有値を返さなければならないことを示します。

一般化固有値問題* V = B * * D用のオプション

すべて折りたたむ

Bのコレスキー分解の切り替え。“IsCholesky”と,数値または逻辑の1真正的)または0)で構成されるコンマ区切りのペアとして指定します。

このオプションは,呼び出しeigs (A, B, ___)内の行列Bの入力がR =胆固醇(B)で実際に生成されたコレスキー因子Rであるかどうかを指定します。

メモ

σ“smallestabs”または数値スカラーの場合は,このオプションを使用しないでください。

コレスキー置換ベクトル。“CholeskyPermutation”と数値ベクトルで構成されるコンマ区切りのペアとして指定します。スパース行列B胆固醇(B (permB permB))に従って因子分解前に並べ替える場合は,置換ベクトルpermBを指定します。

また,スパース行列の胆固醇の3出力の構文を使用して,[R p permB] =胆固醇(B,“矢量”)permBを直接得ることもできます。

メモ

σ“smallestabs”または数値スカラーの場合は,このオプションを使用しないでください。

Bの対称正定性の切り替え。“IsSymmetricDefinite”と,数値または逻辑の1真正的)または0)で構成されるコンマ区切りのペアとして指定します。Bが対称正定値である,つまり,厳密に正の固有値をもつ対称行列だとわかっている場合は,真正的または1を指定します。

Bが対称半正定値(一部の固有値がゼロ)の場合に,“IsSymmetricDefinite”真正的または1に指定すると,eigsは強制的に,Bが対称正定値である場合に使用するものと同じ専用のアルゴリズムを使用します。

メモ

このオプションを使用するには,σの値が数値または“smallestabs”でなければなりません。

出力引数

すべて折りたたむ

固有値。列ベクトルとして返されます。dσの値によって異なる方法で並べ替えられます。

σの値

出力の並べ替え

“largestabs”

絶対値の降順

“largestreal”

実数部の降順

“largestimag”

虚数部の降順

“smallestabs”

絶対値の昇順

“smallestreal”

“bothendsreal”

実数部の昇順

“smallestimag”

虚数部の昇順

“bothendsimag”

虚数部の絶対値の降順

固有ベクトル。行列として返されます。Vの列は,Dの対角上の固有値に対応します。Vの形式と正規化は,入力引数の組み合わせによって異なります。

  • [V D] = eigs (A)は,* V = V * Dとなるような,一个の右固有ベクトルを列にもつ行列Vを返します。Vの固有ベクトルは,個々の2ノルムが1となるように正規化されます。

    一个が対称の場合,固有ベクトルVは正規直交です。

  • [V D] = eigs (A, B)は,* V = B * * Dを満たす一般化右固有ベクトルを列にもつ行列としてVを返します。各固有ベクトルの2ノルムは必ずしも1である必要はありません。

    Bが対称正定値の場合,Vの固有ベクトルは,個々のBノルムが1になるように正規化されます。一个も対称の場合,固有ベクトルはBと正規直交になります。

マシン,MATLAB®のリリース,またはパラメーター(開始ベクトル,部分空間の次元など)が異なる場合,異なる固有ベクトルが出力されることがありますが,数値的にはいずれも正確です。

  • 実数固有ベクトルでは,固有ベクトルの符号を変更できます。

  • 複素数固有ベクトルでは,絶対値が1の任意の複素数を固有ベクトルに乗算できます。

  • 重複固有値では,その固有ベクトルを線形結合によって再結合できます。たとえば,Ax =λxかつ唉=λyの場合,(x + y) =λ(x + y)であるため,x + yも一の固有ベクトルです。

固有値の行列。主対角に固有値をもつ対角行列として返されます。

収束フラグ。0または1として返されます。0の値はすべての固有値が収束したことを示します。それ以外の場合は,一部の固有値が収束していません。

この収束フラグ出力を使用すると,失敗した収束に関する警告が非表示になります。

ヒント

  • eigsは,複数の実行にわたって再現性を確保するために,プライベート乱数ストリームを使用して既定の開始ベクトルを生成します。eigsを呼び出す前にrngを使用して乱数発生器の状態を設定しても,出力に影響しません。

  • eigsの使用は,小規模で密な行列でいくつかの固有値を求めるための方法として最も効率的ではありません。このような問題では,eig(全(A))を使用する方が迅速な場合があります。たとえば,500 行 500 列の行列の固有値を 3 つ求める問題は比較的小規模なので、eigで容易に処理できます。

  • 指定した行列についてeigsが収束しない場合は,“SubspaceDimension”の値を増やすことによって兰索斯基底ベクトルの数を増加させます。補助的な選択肢として,反復の最大回数“MaxIterations”と収束の許容誤差“宽容”を調整することも,収束動作に役立つ場合があります。

互換性についての考慮事項

すべて展開する

R2017bでの動作変更

参照

[1]斯图尔特,G.W."求解大特征问题的Krylov-Schur算法"《矩阵分析与应用》杂志。第23卷,2001年第3期,第601-614页。

[2] Lehoucq, r.b., D.C. Sorenson和c.y ang。ARPACK用户指南。费城,PA: SIAM, 1998。

拡張機能

R2006aより前に導入