Main Content

det

説明

d = det(A) は、正方行列 A の行列式を返します。

すべて折りたたむ

3 行 3 列の正方行列 A を作成します。

A = [1 -2 4; -5 2 0; 1 0 3]
A = 3×3

     1    -2     4
    -5     2     0
     1     0     3

A の行列式を計算します。

d = det(A)
d = -32

行列式が特異性の正確な尺度にならない理由を調べます。

単位行列 eye(10) に小さい数を乗算して 10 行 10 列の行列を作成します。

A = eye(10)*0.0001;

行列 A の主対角の要素は非常に小さくなります。ただし、A は単位行列の倍数であるため、特異では "ありません"。

A の行列式を計算します。

d = det(A)
d = 1.0000e-40

行列式は極めて小さくなります。この行列について abs(det(A)) < tol の形式の許容誤差テストを行うと、ほとんどの場合は特異行列として判定されます。この行列の行列式はゼロに近くなりますが、実際には A が悪条件ということはありません。したがって、A は特異と見なされません。行列の行列式がゼロに近いからといって、それが特異性を示すとは限りません。

A が特異かどうかを調べるには、関数 cond または関数 rcond のいずれかを使用します。

A の条件数を計算します。

c = cond(A)
c = 1

この結果から、A が悪条件でないことを確認できます。

厳密に特異であるものの非ゼロの大きい行列式をもつ行列について調べます。特異行列の行列式は理論的にはゼロになりますが、浮動小数点計算の性質上、この理論が常に成り立つとは限りません。

17 行 17 列の対角優位特異行列 A を作成し、非ゼロ要素のパターンを表示します。

A = diag([36 54 24 46 64 78 88 94 96 94 88 78 64 46 24 54 36]);
S = diag([-27 -12 -13 -24 -33 -40 -45 -48 -49 -48 -45 -40 -33 -12 -27 -36],1);
A = A + S + rot90(S,2);
spy(A)

Figure contains an axes object. The axes object with xlabel nz = 49 contains a line object which displays its values using only markers.

A は行が線形従属であるため、特異です。たとえば sum(A) はゼロのベクトルを返します。

A の行列式を計算します。

d = det(A)
d = 2.6698e+10

A が特異であるという事実にもかかわらず、A の行列式は極めて大きくなります。実際、A の行列式は厳密にゼロになるはずです。d が不正確になる理由は、det による行列式の計算には LU 分解を使用しており、その LU 分解の MATLAB® 実装で丸め誤差が蓄積されるためです。この結果は数値行列式の計算の重要な側面を示しています。詳細については、制限の節を参照してください。

入力引数

すべて折りたたむ

入力行列。正方数値行列として指定します。

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

制限

行列が特異であるかどうかを調べるときは、次のような制限があるため det の使用は避けてください。代わりに cond または rcond を使用してください。

制限結果

一般に行列式の大きさは行列の条件数には無関係です。

条件数が変わらなくても、行列の行列式が大きくなったり小さくなったりすることがあります。

det による行列式の計算では LU 分解を使用しており、浮動小数点の丸め誤差の影響を受けます。

行列式の計算で数値的に安定した結果が得られないことがあります。たとえば、特異行列の行列式の大きさは理論上は 0 ですが、det では大きい行列式が返されることがあります。

アルゴリズム

det では、関数 lu によるガウスの消去法で得られた三角因子から行列式を計算します。

[L,U] = lu(X)
s =  det(L)      % This is always +1 or -1 
det(X) = s*prod(diag(U))

拡張機能

バージョン履歴

R2006a より前に導入

参考

| | | | | |