概要
MDETERM 関数は、行列(配列)の「行列式(determinant)」を 1 つの数値として返す関数です。
行列式は、連立一次方程式が解けるかどうか(逆行列があるかどうか)を判定したり、行列の性質を調べるときに使われる重要な値です。
Excel では、正方行列(行数=列数)の範囲を指定して =MDETERM(範囲) と書くだけで、その行列の行列式を計算できます。
MDETERM 関数の基本
書式と引数
MDETERM の書式はとてもシンプルです。
=MDETERM(array)
array には、行数と列数が等しい「正方行列」のセル範囲を指定します。
例えば、2×2 行列なら A1:B2、3×3 行列なら A1:C3 のように指定します。
配列定数({1,2;3,4} のような形)を直接書くこともできます。
行列式とは何か(ざっくりイメージ)
行列式は、その行列から計算される 1 つの数値で、次のような情報を教えてくれます。
- 0 でない → 逆行列が存在する(行列は「正則」)
- 0 → 逆行列が存在しない(行列は「特異」)
また、線形代数の世界では「空間をどれくらい“伸ばしたり縮めたり”するか」を表す量としても使われます。
Excel では、MDETERM がこの行列式を自動で計算してくれます。
2×2 行列の行列式(手計算との対応)
2×2 の場合の公式
2×2 行列
の行列式は、次の式で計算されます。
Excel で A1:B2 に
A1:a、B1:b
A2:c、B2:d
と入っているなら、MDETERM での計算は次のようになります。
=MDETERM(A1:B2)
これは内部的には
= A1*B2 - B1*A2
を計算しているのと同じです。
具体例(2×2)
例えば、次の 2×2 行列を考えます。
A1:3 B1:6
A2:1 B2:1
この行列の行列式は、手計算では
[ 3\cdot1 – 6\cdot1 = 3 – 6 = -3 ]
となります。
Excel では、次の式で同じ結果が得られます。
=MDETERM(A1:B2)
結果は -3 です。
3×3 行列の行列式(MDETERM に任せる)
3×3 の手計算は複雑
3×3 行列
の行列式は、展開するとかなり長い式になります。
Excel の公式例では、A1:C3 の行列に対して次のような形で表されています。
これを毎回手で書くのは現実的ではないので、MDETERM を使うと一瞬で済みます。
具体例(3×3)
例えば、A1:C3 に次のような 3×3 行列があるとします。
A1:3 B1:6 C1:1
A2:1 B2:1 C2:0
A3:3 B3:10 C3:2
この行列の行列式は、Excel では次の式で求められます。
=MDETERM(A1:C3)
または、配列定数を直接書いても同じです。
=MDETERM({3,6,1;1,1,0;3,10,2})
どちらも結果は 1 になります。
手計算だとかなり面倒な式になりますが、MDETERM なら 1 行で完結します。
エラーと注意点
正方行列でないと #VALUE! エラー
MDETERM の引数 array は、必ず「行数=列数」の正方行列でなければなりません。
行数と列数が異なる範囲を指定すると、#VALUE! エラーになります。
また、配列内に文字列や空白が含まれている場合も #VALUE! エラーになります。
特異行列と数値誤差
行列式が理論上 0 になる「特異な行列」の場合、本来は 0 が返るべきですが、
計算精度の都合で 0 ではなく 1E-16 のような非常に小さい値になることがあります。
これは MDETERM が約 16 桁の精度で計算しているために起こる丸め誤差です。
逆行列が存在するかどうかを判定したいときは、「絶対値がごく小さいかどうか」で判断することもあります。
コードテンプレート集
2×2 行列の行列式
A1:B2 に 2×2 行列が入っている場合:
=MDETERM(A1:B2)
これは
= A1*B2 - B1*A2
と同じ意味です。
3×3 行列の行列式
A1:C3 に 3×3 行列が入っている場合:
=MDETERM(A1:C3)
配列定数を直接書く場合:
=MDETERM({3,6,1;1,1,0;3,10,2})
どちらも、指定した 3×3 行列の行列式を 1 つの数値として返します。
行列が逆行列を持つかのチェック
A1:C3 に行列 A が入っているとして、「逆行列があるかどうか」をざっくり判定するには、次のようにします。
=MDETERM(A1:C3)
結果が 0(またはほぼ 0)なら、逆行列は存在しません。
0 でなければ、MINVERSE で逆行列を求めることができます。
例題
問題1
A1:B2 に次の 2×2 行列が入っています。
A1:3 B1:6
A2:1 B2:1
この行列の行列式を MDETERM で求める式を書いてください。
また、手計算での結果(3×1 − 6×1)もあわせて答えてください。
問題2
A1:C3 に 3×3 の行列が入っています。
この行列の行列式を求める式を、MDETERM を使って書いてください。
さらに、MDETERM を使わずに行列式を展開しようとすると、どのように複雑になるか(イメージだけで構いません)を説明してみてください。
問題3
次の式は何を計算しているか、日本語で説明してください。
=MDETERM({3,6,1;1,1,0;3,10,2})
どのような行列の行列式を求めていて、その結果がどんな意味を持つかを、自分の言葉で説明してみてください。
問題4
A1:D5 に 4 行 5 列の範囲があり、そこに数値が入っています。
この範囲に対して =MDETERM(A1:D5) と入力すると、どのようなエラーになるか、理由とともに答えてください。
ヒント:行列式が定義されるのはどんな行列かを思い出してみてください。
問題5
ある 3×3 行列 A に対して、=MDETERM(A1:C3) の結果が 0 に非常に近い値(例えば 1E-16)になりました。
このとき、「逆行列が存在するかどうか」をどう判断すべきか、数値誤差の話も含めて説明してみてください。
