LinearAlgebra[EigenConditionNumbers] - 数値固有値の条件付問題における固有値または固有ベクトルの条件数の計算
使い方
EigenConditionNumbers(A, C, bal, o, outopts)
パラメータ
A - 行列; 固有値または固有ベクトルの条件数を求めたい数値行列
C - (オプション) 行列; 一般化数値固有値の条件付問題のための行列
bal - (オプション) identical('balance')=symbol; 縮尺あるいは並べ換えを行うことを認めるかどうかの指定 -- ここで symbol は、'both', 'permute', 'scale', 'none'のいずれか
o - (オプション) identical('output')=list; 固有値および固有ベクトルの条件数を返すか、あるいは固有値および固有ベクトルを返すかどうかの指定
outopts - (オプション) outputoptions[o]=list の形をした等式; ここで o は、'conditionvalues', 'conditionvectors', 'values', 'vectors', 'alpha', 'beta'のいずれか、list は、結果のコンストラクタへ渡すためのオプション、つまり結果として得られるオブジェクトのコンストラクタオプションを含むリスト
|
説明
|
|
•
|
EigenConditionNumbers(A) コマンドは、式列を返すことで、単純固有値の条件付問題を解きます。この式列は、2つの成分から構成されます。1つめは、A の固有値の条件数(浮動小数点数)からなるベクトル V1 であり、2つめは、A の固有ベクトルの条件数(浮動小数点数)からなるベクトル V2 です。オプションによっては、浮動小数点固有値あるいは浮動小数点固有ベクトルが返されることもあります。
|
|
単純固有値問題で、A が実対称行列あるいは複素エルミート行列である場合は、実固有値が返されます。
|
•
|
EigenConditionNumbers(..) 関数は、単純固有値の条件付問題 A . x = lambda . x および、一般化固有値の条件付問題 A . x = lambda . C . x を解きます。固有値 V[i] および非零の固有ベクトル E[1 .. -1, i] は、単純固有値問題にたいしては M . E[1 .. -1, i] = V[i] . E[1 .. -1, i] 、一般化問題に対しては M . E[1 .. -1, i] = V[i] . C . E[1 .. -1, i] または beta[i] . M . E[1 .. -1, i] = alpha[i] . C . E[1 .. -1, i] を満たすようなものです。
|
•
|
EigenConditionNumbers(A, C) コマンドは、一般化数値固有値の条件付問題を解きます。
|
|
一般化固有値の条件付問題で、A および C が実対称行列あるいは複素エルミート行列であり、また C が positive_definite の属性をもっている場合には、固有値は実となります。
|
|
一般化固有値の条件付問題では、各有限固有値 V[i] について、V[i] = beta[i] / alpha[i] となります。
|
•
|
outopts オプションは、結果を作成する Matrix または Vector コンストラクタに、付加情報(readonly, shape, storage, order, datatype, attributes)を提供します。
|
•
|
条件数と誤差境界間の関係に関する広範囲で詳細な情報については、以下の参考文献を参照して下さい。
|
|
E. Anderson et al. LAPACK users' guide. 3d ed. SIAM, 1999.
|
|
|
例
|
|
>
|
with(LinearAlgebra):
A := Matrix(3,3,[[-1,-3,-6],[3,5,6],[-3,-3,-4]],'datatype'='float');
|
| (2.1) |
>
|
EigenConditionNumbers(A);
|
| (2.2) |
>
|
(v, e) := EigenConditionNumbers(A,'output'=['values','vectors']);
|
| (2.3) |
>
|
A . e[1..-1,2] = v[2] . e[1..-1,2];
|
| (2.4) |
>
|
M := Matrix([[6.,8.,5.],[8.,8.,9.],[5.,9.,6.]], 'datatype' = 'float'):
N := Matrix([[6.,3.,3.],[3.,8.,8.],[3.,8.,9.]], 'datatype' = 'float'):
EigenConditionNumbers(M,N,output=['vectors', 'values','conditionvalues','conditionvectors']);
|
| (2.5) |
>
|
EigenConditionNumbers(M,N,output=['values']);
|
| (2.6) |
>
|
EigenConditionNumbers(M,N,output=['alpha','beta']);
|
| (2.7) |
|
|