スプレッドシートで逆行列を手計算するのは大変ですよね。2×2行列でも4つの要素を入れ替えたり符号を変えたりと手間がかかります。3×3以上になると、計算ミスのリスクもぐっと高まります。
MINVERSE関数を使えば、正方行列の逆行列をセル範囲の指定だけで求められます。MMULT関数と組み合わせれば、連立方程式を解くこともできますよ。
この記事では、スプレッドシートのMINVERSE関数の基本から、連立方程式の解法まで解説します。
スプレッドシートのMINVERSE関数とは?
MINVERSE関数は、正方行列(行数と列数が等しい行列)の逆行列(inverse matrix)を返す関数です。
読み方は「マトリックス インバース」です。「Matrix」は行列、「Inverse」は逆を意味します。
逆行列とは、元の行列にかけると単位行列(対角線が1、それ以外が0の行列)になる行列のことです。数学的には A × A⁻¹ = I(単位行列)という関係が成り立ちます。
行列計算に使う関数ではありますが、使い方自体はシンプルです。セル範囲を指定するだけで結果が返ってきますよ。
MINVERSE関数の書き方
基本構文
=MINVERSE(正方行列)
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 正方行列 | 必須 | 逆行列を求める、行数と列数が等しい配列またはセル範囲 |
引数は1つだけなので、覚えやすいですね。
セル範囲(例: A1:B2)のほか、配列定数(例: {1,2;3,4})も指定できます。配列定数では、カンマが列区切り、セミコロンが行区切りです。
MINVERSE関数は結果を配列(N×N行列)として返します。Googleスプレッドシートでは、出力先のセル範囲に自動的に展開されますよ。
MINVERSE関数の基本的な使い方
2×2行列の逆行列を求める
まずは最もシンプルな2×2行列から試してみましょう。
セルA1:B2に以下のデータが入っているとします。
| A | B | |
|---|---|---|
| 1 | 4 | 7 |
| 2 | 2 | 6 |
任意のセル(例: D1)に次の数式を入力します。
=MINVERSE(A1:B2)
D1:E2に以下の逆行列が表示されます。
| D | E | |
|---|---|---|
| 1 | 0.6 | -0.7 |
| 2 | -0.2 | 0.4 |
2×2行列の逆行列は手計算でも確認できます。行列式 ad - bc を分母にして、要素を入れ替える公式を使います。
行列式 = 4×6 - 7×2 = 24 - 14 = 10
逆行列 = (1/10) × [[6, -7], [-2, 4]]
= [[0.6, -0.7], [-0.2, 0.4]]
関数の結果と一致しましたね。
配列定数を使って直接入力する方法もあります。
=MINVERSE({4,7;2,6})
こちらも同じ結果が返ります。
3×3行列の逆行列を求める
次に3×3行列の例を見てみましょう。
セルA1:C3に以下のデータが入っているとします。
| A | B | C | |
|---|---|---|---|
| 1 | 3 | 6 | 1 |
| 2 | 1 | 1 | 0 |
| 3 | 3 | 10 | 2 |
=MINVERSE(A1:C3)
結果は以下の3×3行列になります。
| D | E | F | |
|---|---|---|---|
| 1 | 2 | -2 | -1 |
| 2 | -2 | 3 | 1 |
| 3 | 7 | -12 | -3 |
この行列の行列式はMDETERM関数で確認すると 1 です。行列式が0以外なので、逆行列が存在します。
3×3以上の逆行列を手計算で求めるのはかなり手間がかかります。MINVERSE関数に任せるのが安心ですよ。
実践的な使い方・応用例
MDETERM関数で特異行列かどうか事前チェックする
逆行列が存在しない行列を「特異行列」と呼びます。特異行列にMINVERSE関数を使うと #NUM! エラーになります。
事前にMDETERM関数で行列式を確認しておくと、エラーを未然に防げますよ。
たとえば、以下のような行列を考えてみましょう。
| A | B | |
|---|---|---|
| 1 | 2 | 4 |
| 2 | 1 | 2 |
この行列の行列式は 2×2 – 4×1 = 0 です。2行目が1行目のちょうど半分なので、特異行列ですね。
IF関数と組み合わせれば、安全に逆行列を求められます。
=IF(MDETERM(A1:B2)<>0, MINVERSE(A1:B2), "逆行列なし")
行列式が0でなければ逆行列を計算し、0なら「逆行列なし」と表示します。
MMULT関数と組み合わせて連立方程式を解く
MINVERSE関数の実践的な活用例として、連立方程式の解法があります。
連立方程式は行列で表すと Ax = b の形になります。両辺に A の逆行列をかけると x = A⁻¹b で解が求まります。
次の連立方程式を解いてみましょう。
3x + 6y + z = 11
x + y = 2
3x + 10y + 2z = 17
まず、係数行列AをセルA1:C3に、定数ベクトルbをセルE1:E3に入力します。
係数行列A
| A | B | C | |
|---|---|---|---|
| 1 | 3 | 6 | 1 |
| 2 | 1 | 1 | 0 |
| 3 | 3 | 10 | 2 |
定数ベクトルb
| E | |
|---|---|
| 1 | 11 |
| 2 | 2 |
| 3 | 17 |
任意のセル(例: G1)に次の数式を入力します。
=MMULT(MINVERSE(A1:C3), E1:E3)
MMULT関数は行列の積を計算する関数です。MINVERSE関数で逆行列を求め、それと定数ベクトルの積を計算することで、解が得られます。
結果は以下のとおりです。
| G | |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
つまり x=1, y=1, z=2 が解です。
検算してみましょう。1つ目の式に代入すると 3×1 + 6×1 + 1×2 = 11 で正しいですね。
TIP
連立方程式を解く前に、MDETERM関数で係数行列の行列式が0でないことを確認しましょう。行列式が0の場合、一意の解は存在しません。
よくあるエラーと対処法
#NUM! エラー
#NUM! エラーは、行列式が0の行列(特異行列)を指定した場合に発生します。
=MINVERSE({2,4;1,2}) → #NUM!
MDETERM関数で行列式を確認し、0でない行列に対してのみ使用してください。
#VALUE! エラー
#VALUE! エラーが出る原因は主に2つあります。
原因1: 正方行列でない
行数と列数が異なるセル範囲を指定するとエラーになります。
=MINVERSE(A1:C2) → #VALUE!(2行3列は正方行列でない)
指定するセル範囲が正方形(2×2、3×3など)になっているか確認してください。
原因2: 数値以外のセルが含まれている
セル範囲に空白セルや文字列が含まれている場合もエラーになります。すべてのセルに数値が入力されているかチェックしましょう。
| エラー | 主な原因 | 対処法 |
|---|---|---|
#NUM! | 行列式が0(特異行列) | MDETERM関数で事前に行列式を確認する |
#VALUE! | 行数と列数が不一致 | 正方行列(N×N)のセル範囲を指定する |
#VALUE! | 空白・文字列を含む | すべてのセルに数値を入力する |
関連する行列関数との使い分け
スプレッドシートには、MINVERSE関数以外にも行列計算に使える関数があります。
| 関数 | 機能 | 用途 |
|---|---|---|
| MINVERSE | 逆行列を返す | 連立方程式を解く、変換行列の逆変換 |
| MDETERM | 行列式を返す | 逆行列の存在判定、連立方程式の解の判定 |
| MMULT | 行列の積を返す | 座標変換、重み付き合計の一括計算 |
| TRANSPOSE | 行と列を入れ替える | 表の縦横変換、データ整形 |
行列計算の基本的な流れは、まずMDETERM関数で行列式を確認します。0でなければMINVERSE関数で逆行列を求めましょう。MMULT関数と組み合わせれば、連立方程式もスプレッドシート上で解けますよ。
まとめ
MINVERSE関数は、正方行列の逆行列を求める関数です。
- 構文は
=MINVERSE(正方行列)で、引数は1つだけ - 結果はN×N行列として自動展開される
- 行列式が0の特異行列には
#NUM!エラーが返る - MDETERM関数で事前に行列式を確認すると安全
- MMULT関数と組み合わせれば、連立方程式の解も求められる
数学的な関数ではありますが、使い方自体はセル範囲を指定するだけなので難しくありません。連立方程式を解きたいときに、ぜひ活用してみてください。
