「Excelで行列式を求めたいけど、どの関数を使えばいいの?」「行列式が0かどうかで逆行列が存在するか判定したい」と思ったことはありませんか。
行列式の手計算は3×3以上になると工程が増えて、計算ミスが起きやすいですよね。
MDETERM関数を使えば、正方行列の行列式をワンステップで算出できます。さらにMINVERSE関数と組み合わせれば、逆行列が存在するかどうかの事前チェックにも活用できます。この記事では基本の使い方から実務的な応用まで、順を追って解説していきます。
MDETERM関数とは?
MDETERM関数は、指定した正方行列(行数と列数が同じ行列)の行列式(determinant)を返す関数です。
- 読み方: マトリックス・ディターミナント(Matrix Determinant)
- 語源: 「M」はMatrix(行列)、「DETERM」はDeterminant(行列式)の略です
- 対応バージョン: Excel 2003以降 / Microsoft 365
行列式とは、正方行列から計算される1つの数値のことです。行列式が0でなければ逆行列が存在し、0であれば逆行列は存在しません(このような行列を「特異行列」と呼びます)。
行列式は数学・工学・統計の分野で幅広く使われていますが、Excelでの主な用途は次の2つです。
- 逆行列が存在するか(=連立方程式に解があるか)の判定
- 行列に関する各種計算の中間ステップ
MDETERM関数の書き方(構文と引数)
基本構文
=MDETERM(配列)
MDETERM関数の引数は1つだけなので、とてもシンプルです。
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 配列 | 必須 | 行数と列数が等しい数値配列(正方行列)を指定します |
配列に指定できるもの:
- セル範囲(例: B2:C3、B2:D4)
- 配列定数(例:
{1,2;3,4})
注意点:
- 行数と列数が異なる範囲を指定すると
#VALUE!エラーになります - 空白セルや文字列が含まれていると
#VALUE!エラーになります - 結果は1つの数値(スカラー値)なので、配列数式として入力する必要はありません
基本的な使い方
2×2行列の行列式を求める
まずは最もシンプルな2×2行列で試してみましょう。
セルB2:C3に以下のような行列が入力されているとします。
| B | C | |
|---|---|---|
| 2 | 4 | 7 |
| 3 | 2 | 6 |
行列式を求めるには、結果を表示したいセル(例: E2)に次の数式を入力します。
=MDETERM(B2:C3)
結果は 10 になります。
2×2行列の行列式は「ad – bc」の公式で手計算できます。上の例では 4×6 - 7×2 = 24 - 14 = 10 となり、MDETERM関数の結果と一致していますね。
行列式が0でないので、この行列には逆行列が存在することもわかります。
3×3行列の行列式を求める
3×3行列でも使い方は同じです。
セルB2:D4に以下の行列が入力されている場合を考えます。
| B | C | D | |
|---|---|---|---|
| 2 | 3 | 6 | 1 |
| 3 | 1 | 1 | 0 |
| 4 | 3 | 10 | 2 |
次の数式を入力します。
=MDETERM(B2:D4)
結果は 1 になります。
3×3以上の行列式の手計算は複雑になりますが、MDETERM関数なら一瞬で結果が出ます。手計算での検算方法を知りたい方のために補足すると、3×3行列では「サラスの公式」を使って次のように展開します。
行列式 = a(ei-fh) - b(di-fg) + c(dh-eg)
上の例に当てはめると 3(1×2-0×10) - 6(1×2-0×3) + 1(1×10-1×3) = 6 - 12 + 7 = 1 となります。
配列定数を直接指定する
セル範囲を使わず、数式の中に配列定数を直接書くこともできます。
=MDETERM({3,6;1,1})
結果は -3 になります(3×1 – 6×1 = -3)。
配列定数では、列の区切りにカンマ(,)、行の区切りにセミコロン(;)を使います。ちょっとした計算の確認には便利ですが、行列が大きくなるとセル範囲で指定する方が見やすくなります。
実務で役立つ活用例
逆行列の存在確認に使う
MDETERM関数の最も実務的な使い道は、MINVERSE関数で逆行列を求める前の事前チェックです。
逆行列が存在するのは、行列式が0でない場合だけです。行列式が0の行列(特異行列)にMINVERSE関数を使うと #NUM! エラーになってしまいます。事前にMDETERM関数で確認しておくとスムーズです。
手順は次のとおりです。
- MDETERM関数で行列式を求める
=MDETERM(B2:D4)
- 結果が0でなければ、MINVERSE関数で逆行列を求める
=MINVERSE(B2:D4)
- 結果が0なら、その行列には逆行列が存在しないとわかる
IF関数と組み合わせて自動判定する方法もあります。
=IF(MDETERM(B2:D4)=0,"逆行列なし","逆行列あり")
このようにMDETERM関数を使えば、エラーを出す前に逆行列の有無を判定できます。
連立方程式の解の有無を判定する
連立方程式を行列で表現したとき、係数行列の行列式が0でなければ「ただ1つの解がある」と判定できます。
たとえば、次の連立方程式を考えます。
2x + 3y = 8
4x + 1y = 10
係数行列は {2,3;4,1} です。MDETERM関数で行列式を求めます。
=MDETERM({2,3;4,1})
結果は -10(0ではない)なので、この連立方程式にはただ1つの解が存在します。
解が存在することを確認できたら、MINVERSE関数とMMULT関数を組み合わせて実際の解を求められます。
=MMULT(MINVERSE(B2:C3),E2:E3)
行列式が0の場合は「解なし」または「無数の解がある」ことを意味するので、連立方程式の立て方を見直す必要があります。
計算結果の検算に使う
MINVERSE関数で求めた逆行列が正しいかどうかを検算するのにも、MDETERM関数が役立ちます。
正方行列Aの行列式と、その逆行列A^(-1)の行列式の間には次の関係があります。
det(A) × det(A^(-1)) = 1
つまり、元の行列と逆行列の行列式を掛け合わせた結果が1(またはほぼ1)になれば、逆行列の計算が正しいと確認できます。
=MDETERM(B2:C3) * MDETERM(MINVERSE(B2:C3))
結果が1であれば計算は正確です。浮動小数点の関係で 0.9999999999999998 のような値になることがありますが、これは誤差の範囲内なので問題ありません。
よくあるエラーと対処法
MDETERM関数で発生しやすいエラーと、その原因・対処法をまとめました。
| エラー | 原因 | 対処法 |
|---|---|---|
#VALUE! | 行数と列数が異なる範囲を指定した | 正方行列(2×2、3×3など)になっているか確認する |
#VALUE! | 配列内に空白セルや文字列が含まれている | すべてのセルに数値が入力されているか確認する |
結果が 1E-16 のような極小値 | 浮動小数点演算の誤差(本来0になるべき計算) | ROUND関数で丸める(例: =ROUND(MDETERM(B2:C3),10)) |
#VALUE! エラーが出たときは、まず指定した範囲が正方形になっているかを確認してください。たとえば2行3列の範囲を指定していないか、途中に空白や文字が混じっていないかをチェックするのがポイントです。
浮動小数点の誤差については補足が必要です。MDETERM関数は約16桁の精度で計算を行うため、本来0になるはずの行列式が 1E-16(0.0000000000000001)のような極小の値になることがあります。この値を「0ではない」と判断してしまうと、存在しない逆行列を求めようとしてしまいます。
実務では、行列式の絶対値が非常に小さい場合(たとえば 1E-10 以下)は「実質的に0」として扱うのが安全です。
=IF(ABS(MDETERM(B2:D4))<1E-10,"特異行列(逆行列なし)","逆行列あり")
まとめ
MDETERM関数は、Excelで正方行列の行列式を求めるための関数です。
この記事のポイントをおさらいしましょう。
- MDETERM関数の引数は「配列」の1つだけ。正方行列を指定する
- 行列式が0でなければ逆行列が存在し、0なら逆行列は存在しない(特異行列)
- MINVERSE関数で逆行列を求める前の事前チェックに活用できる
- 連立方程式の解の有無の判定にも使える
- 浮動小数点誤差で
1E-16のような極小値が出ることがあるので、ROUND関数やABS関数で対処する
行列式の計算は手作業だと3×3以上で煩雑になりますが、MDETERM関数を使えば正確に素早く結果を得られます。MINVERSE関数と合わせて、行列計算の業務効率化にぜひ活用してみてください。
関連する行列関数との使い分け
| 関数名 | 機能 | 入力 | 出力 |
|---|---|---|---|
| MDETERM | 行列式を求める | 正方行列 | 数値(スカラー) |
| MINVERSE | 逆行列を求める | 正方行列 | 逆行列(配列) |
| MMULT | 行列の積を求める | 2つの行列 | 積の行列(配列) |
| TRANSPOSE | 行と列を入れ替える | 任意の配列 | 転置行列(配列) |
- 逆行列が存在するか事前にチェックしたい → MDETERM
- 逆行列を実際に求めたい → MINVERSE(事前にMDETERMで確認がおすすめ)
- 連立方程式を解きたい → MINVERSE + MMULT
- 行と列を入れ替えたい → TRANSPOSE
