det
説明
例
行列の行列式を計算
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
が悪条件でないことを確認できます。
特異行列の行列式を求める
厳密に特異であるものの非ゼロの大きい行列式をもつ行列について調べます。特異行列の行列式は理論的にはゼロになりますが、浮動小数点計算の性質上、この理論が常に成り立つとは限りません。
13 行 13 列の対角優位特異行列 A
を作成し、非ゼロ要素のパターンを表示します。
A = diag([24 46 64 78 88 94 96 94 88 78 64 46 24]); S = diag([-13 -24 -33 -40 -45 -48 -49 -48 -45 -40 -33 -24],1); A = A + S + rot90(S,2); spy(A)
A
は行が線形従属であるため、特異です。たとえば sum(A)
はゼロのベクトルを返します。
A
の行列式を計算します。
d = det(A)
d = 0
A
が特異であるという事実にもかかわらず、A
の行列式は極めて大きくなります。実際、A
の行列式は厳密にゼロになるはずです。d
が不正確になる理由は、det
による行列式の計算には LU 分解を使用しており、その LU 分解の MATLAB® 実装で丸め誤差が蓄積されるためです。この結果は数値行列式の計算の重要な側面を示しています。詳細については、制限の節を参照してください。
入力引数
A
— 入力行列
正方数値行列
入力行列。正方数値行列として指定します。
データ型: single
| double
複素数のサポート: あり
制限
行列が特異であるかどうかを調べるときは、次のような制限があるため det
の使用は避けてください。代わりに cond
または rcond
を使用してください。
制限 | 結果 |
---|---|
一般に行列式の大きさは行列の条件数には無関係です。 | 条件数が変わらなくても、行列の行列式が大きくなったり小さくなったりすることがあります。 |
| 行列式の計算で数値的に安定した結果が得られないことがあります。たとえば、特異行列の行列式の大きさは理論上は 0 ですが、 |
アルゴリズム
det
では、関数 lu
によるガウスの消去法で得られた三角因子から行列式を計算します。
[L,U] = lu(X) s = det(L) % This is always +1 or -1 det(X) = s*prod(diag(U))
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
コード生成では、この関数のスパース行列入力はサポートされません。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
使用上の注意事項および制限事項:
コード生成では、この関数のスパース行列入力はサポートされません。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は GPU 配列を完全にサポートしています。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)