LinearAlgebra[IsDefinite] - 行列が正定値または負定値かを判定
使い方
IsDefinite(A, q)
パラメータ
A - 正方行列
q - query = attribute の形の等式で attribute は 'positive_definite', 'positive_semidefinite', 'negative_definite', 'negative_semidefinite' のいずれか
|
説明
|
|
•
|
IsDefinite(A, query = 'positive_definite') は、A が実対称または複素エルミート行列であってすべての固有値が正の値であることが確定すれば true を返します。デフォルトは query = 'positive_definite' であるため、このコマンドは、IsDefinite(A) と同じです。
|
|
同様に、実対称または複素エルミート行列に対して、以下の呼び出し手順は指定された結果を返します。
|
|
IsDefinite(A, query = 'positive_semidefinite') はすべての固有値が非負の値であることが確定すれば true を返します。
|
|
IsDefinite(A, query = 'negative_definite') はすべての固有値が負の値であることが確定すれば true を返します。
|
|
IsDefinite(A, query = 'negative_semidefinite') はすべての固有値が非正の値であることが確定すれば true を返します。
|
|
固有値が上で述べたものとは異なっていることが確定すれば、false の値が返されます。
|
|
要求された判定 に答えを出せない場合、このルーチンは、判定が true となる場合に満たされるべき条件を表わす論理式を返します。
|
•
|
正定値の定義は、すべての列ベクトル x に対して、HermitianTranspose(x) . A . x > 0 となることです。
|
|
半正定値、負定値、半負定値の定義は等号入りの不等号にしたり不等号を逆向きにすることにより得られます。
|
•
|
実非対称(複素非エルミート)行列に対して、定値性は A の対称 (エルミート) 部分、すなわち 1/2*(A+HermitianTranspose(A)) を考察することによって確かめられます。
|
|
実非対称行列の場合、対称な部分、1/2*(A+Transpose(A)) は A と同じ定値性を持ちます。
|
•
|
この関数は LinearAlgebra パッケージの一部ですから、コマンド with(LinearAlgebra) を実行した後にのみ IsDefinite(..) の形で使うことができます。ただし、長い形の名前 LinearAlgebra[IsDefinite](..) を使えばいつでもアクセスすることができます。
|
|
|
例
|
|
>
|
with(LinearAlgebra):
A := DiagonalMatrix([-5,0,-1]);
|
| (2.1) |
| (2.2) |
>
|
IsDefinite(A, 'query' = 'positive_semidefinite');
|
| (2.3) |
>
|
IsDefinite(A, 'query' = 'negative_semidefinite');
|
| (2.4) |
>
|
B := <<1,8,3>|<-4,5,2>|<6,1,0>>;
|
| (2.5) |
| (2.6) |
>
|
C := <<1,2+I>|<2-I,5>>;
|
| (2.7) |
| (2.8) |
>
|
IsDefinite(C, 'query' = 'positive_semidefinite');
|
| (2.9) |
>
|
IsDefinite(C, 'query' = 'negative_semidefinite');
|
| (2.10) |
次の例では、判定の結果は、 x と y に割り当てられる値に依存します。
>
|
assume(x,real,y,real);
IsDefinite( <<x,0>|<0,y>> );
|
| (2.11) |
|
|