スプレッドシートで行列計算をしていると、「単位行列」が必要になる場面がありますよね。MINVERSE関数で求めた逆行列が本当に正しいのか、MMULT関数の検算をしたいときなど、対角線に1を並べた行列を手で作るのは地味に面倒です。
MUNIT関数を使えば、指定した次元の単位行列をワンステップで作成できます。MMULT関数やMINVERSE関数と組み合わせることで、行列演算の検証や連立方程式の解法でも活躍する関数です。
この記事では、スプレッドシートのMUNIT関数の基本から、浮動小数点誤差の対処、Excel版との違いまで、実務で使える形で解説します。
スプレッドシートのMUNIT関数とは?
MUNIT関数は、指定した次元の単位行列(identity matrix)を返す関数です。
読み方は「マトリックス ユニット」です。「Matrix」は行列、「Unit」は単位を意味しており、関数名は「Matrix Unit(行列の単位元)」に由来します。
単位行列とは、対角線上の要素がすべて1で、それ以外の要素がすべて0の正方行列のことです。たとえば3×3の単位行列は次のような形になります。
1 0 0
0 1 0
0 0 1
数学では「I」や「E」と表記されることが多く、掛け算における「1」のような存在です。どんな行列に単位行列をかけても、元の行列がそのまま返ってきます。
なぜ実務で単位行列が必要なのか
「対角線に1を並べた行列なんて何に使うの?」と感じるかもしれません。実務でMUNIT関数が活躍するシーンは、主に次の3つです。
- 逆行列の検証: MINVERSE関数で求めた逆行列が正しいかをチェックする(
A × A⁻¹ = Iの関係) - 連立方程式の解法: ガウス・ジョルダン消去法では拡大係数行列を単位行列の形に変形して解を求める
- 反復計算の初期値: ヤコビ法などの数値計算で初期推定値として使う
特に1つ目の「逆行列の検証」は、財務モデリングや回帰分析、座標変換など、逆行列を多用する場面で重宝します。
MUNIT関数の書式と引数
基本構文
=MUNIT(次元)
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 次元 | 必須 | 単位行列のサイズ(正の整数)。3を指定すると3×3の単位行列を返す |
引数は1つだけなので、覚えやすいですね。
MUNIT関数は結果を配列(N×N行列)として返します。Googleスプレッドシートでは、出力先のセル範囲に自動的に展開(スピル)されますよ。
NOTE
スピル先のセルにすでに値が入っていると
#REF!エラーになります。出力先となる N×N の範囲は事前に空けておきましょう。
MUNIT関数で単位行列を作成する基本手順
2×2の単位行列を作成する
まずは最もシンプルな2×2の単位行列を作ってみましょう。
任意のセル(例: A1)に次の数式を入力します。
=MUNIT(2)
A1:B2に以下の単位行列が表示されます。
| A | B | |
|---|---|---|
| 1 | 1 | 0 |
| 2 | 0 | 1 |
対角線上(左上から右下)が1で、それ以外が0になっていますね。
3×3の単位行列を作成する
次に3×3の単位行列を作成してみましょう。
=MUNIT(3)
結果は以下のとおりです。
| A | B | C | |
|---|---|---|---|
| 1 | 1 | 0 | 0 |
| 2 | 0 | 1 | 0 |
| 3 | 0 | 0 | 1 |
N×Nの単位行列を可変サイズで作成する
サイズを別セルから参照することで、可変サイズの単位行列も作成できます。たとえばセルA1に次元の値を入れて、セルC1に次の数式を入力します。
=MUNIT(A1)
A1の値を変更すれば、自動的に対応するサイズの単位行列が生成されます。シミュレーションや動的なレポートで便利ですよ。
TIP
引数に小数を渡すと
#NUM!エラーになることがあります。可変サイズで運用する場合は=MUNIT(INT(A1))のようにINT関数で整数に丸めておくと安全です。
MUNIT関数の実践的な活用例
A × I = A の性質を検証する(右からかける)
単位行列には「どんな行列にかけても元の行列が変わらない」という性質があります。数式で書くと A × I = A です。
この性質をMMULT関数で確認してみましょう。
セルA1:B2に以下の行列Aが入っているとします。
| A | B | |
|---|---|---|
| 1 | 3 | 5 |
| 2 | 2 | 7 |
セルD1に2×2の単位行列を生成します。
=MUNIT(2)
| D | E | |
|---|---|---|
| 1 | 1 | 0 |
| 2 | 0 | 1 |
行列Aと単位行列の積をMMULT関数で計算します。
=MMULT(A1:B2, D1:E2)
結果は以下のとおりです。
| G | H | |
|---|---|---|
| 1 | 3 | 5 |
| 2 | 2 | 7 |
元の行列Aとまったく同じ結果になりました。単位行列をかけても行列が変わらないことが確認できましたね。
I × A = A の性質も検証する(左からかける)
行列の積は順序が重要ですが、単位行列に限っては左右どちらからかけても結果が変わりません。I × A = A の関係を確認してみましょう。
=MMULT(D1:E2, A1:B2)
結果は以下のとおりです。
| J | K | |
|---|---|---|
| 1 | 3 | 5 |
| 2 | 2 | 7 |
左右どちらからかけても元の行列Aと同じ結果になりました。これが単位行列が「乗算の単位元」と呼ばれる理由です。
MINVERSE関数で求めた逆行列を検証する
MINVERSE関数で求めた逆行列が正しいかどうかを検証できます。元の行列と逆行列の積は、必ず単位行列になるという性質を使います。
数式で書くと A × A⁻¹ = I(単位行列)です。
セルA1:B2に以下の行列Aが入っているとします。
| A | B | |
|---|---|---|
| 1 | 4 | 7 |
| 2 | 2 | 6 |
まず、MINVERSE関数で逆行列を求めます。
=MINVERSE(A1:B2)
| D | E | |
|---|---|---|
| 1 | 0.6 | -0.7 |
| 2 | -0.2 | 0.4 |
次に、元の行列と逆行列の積をMMULT関数で計算します。
=MMULT(A1:B2, D1:E2)
| G | H | |
|---|---|---|
| 1 | 1 | 0 |
| 2 | 0 | 1 |
結果が単位行列になりました。MUNIT(2) の結果と比較すれば、逆行列の計算が正しいことを確認できます。
3×3行列の逆行列を検証する
2×2だけでなく、3×3以上の行列でも同じ手順で検証できます。セルA1:C3に次の行列Aが入っているとします。
| A | B | C | |
|---|---|---|---|
| 1 | 1 | 2 | 3 |
| 2 | 0 | 1 | 4 |
| 3 | 5 | 6 | 0 |
逆行列をMINVERSE関数で求め、元の行列と掛け合わせます。
=MMULT(A1:C3, MINVERSE(A1:C3))
理論上の結果は MUNIT(3) と一致します。実際の出力は次のセクションで触れる浮動小数点誤差の影響で、わずかなズレが出ることがあります。
浮動小数点誤差への対処法
行列計算では、本来0であるべき要素に 2.22E-16 のような極小の数値が表示されることがあります。これは浮動小数点演算の精度限界によるもので、コンピュータの計算では避けられない誤差です。
たとえば、先ほどの3×3の検証結果が次のように表示されることがあります。
| G | H | I | |
|---|---|---|---|
| 1 | 1 | 0 | 4.44E-16 |
| 2 | -2.22E-16 | 1 | 0 |
| 3 | 0 | 8.88E-16 | 1 |
数学的にはすべて0または1ですが、計算過程で生じた微小な誤差が残っています。
ROUND関数で丸める
最もシンプルな対処は、ROUND関数で適切な桁に丸める方法です。
=ROUND(MMULT(A1:C3, MINVERSE(A1:C3)), 10)
第2引数の 10 は「小数点以下10桁で丸める」という意味です。これで 4.44E-16 のような微小値は0として扱われ、見た目もきれいな単位行列になります。
IFERRORと組み合わせる
逆行列が存在しない(行列式が0の)場合は #NUM! エラーが発生します。検証用の数式ではIFERRORでラップしておくと、エラー発生時にもシートが崩れません。
=IFERROR(ROUND(MMULT(A1:C3, MINVERSE(A1:C3)), 10), "逆行列なし")
TIP
MDETERM関数で行列式を確認すれば、逆行列が存在するかを事前にチェックできます。行列式が0でなければ逆行列が存在します。
ExcelのMUNIT関数との違い
MUNIT関数はExcelにも同名の関数があり、基本的な機能は共通です。ただし、動作にはいくつか違いがあります。
| 項目 | Googleスプレッドシート | Excel |
|---|---|---|
| 構文 | =MUNIT(次元) | =MUNIT(次元)(同じ) |
| スピル動作 | 常に自動展開 | Excel 365 / 2021以降は自動展開、2019以前はCtrl+Shift+Enterの配列数式 |
| 上限次元 | 実用上は数百次元まで | 実用上は数百次元まで |
| 戻り値 | N×N配列 | N×N配列(同じ) |
Googleスプレッドシートは常にスピル動作するので、配列数式を意識する必要がありません。Excelから移行してきた人は、Ctrl+Shift+Enterを押さなくても動く点を覚えておくとよいですよ。
ExcelのMUNIT関数の詳細は ExcelのMUNIT関数の使い方 を参照してください。
よくあるエラーと対処法
#VALUE! エラー
#VALUE! エラーは、引数に正の整数以外を指定した場合に発生します。
=MUNIT(0) → #NUM!(0は不可)
=MUNIT(-1) → #NUM!(負の数は不可)
=MUNIT("A") → #VALUE!(文字列は不可)
引数には1以上の整数を指定してください。
#REF! エラー
#REF! エラーは、スピル先のセルにすでに値が入っている場合に発生します。
=MUNIT(3) → 出力先の3×3範囲に値があると #REF!
出力先となる N×N の範囲を事前に空けるか、別の場所に数式を移動してください。
エラーまとめ表
| エラー | 主な原因 | 対処法 |
|---|---|---|
#NUM! | 引数が0または負の数 | 1以上の正の整数を指定する |
#VALUE! | 引数が文字列 | 数値を指定する |
#REF! | スピル先のセルが埋まっている | 出力先のセル範囲を空ける |
関連する行列関数との使い分け
スプレッドシートには、MUNIT関数以外にも行列計算に使える関数があります。
| 関数 | 機能 | 用途 |
|---|---|---|
| MUNIT | 単位行列を返す | 行列演算の検証、初期値の設定 |
| MMULT | 行列の積を返す | 座標変換、重み付き合計の一括計算 |
| MINVERSE | 逆行列を返す | 連立方程式を解く、変換行列の逆変換 |
| MDETERM | 行列式を返す | 逆行列の存在判定、連立方程式の解の判定 |
| TRANSPOSE | 転置行列を返す | 行と列を入れ替える |
MUNIT関数は単独で使うよりも、他の行列関数と組み合わせて活躍する関数です。次のような流れで使い分けると整理しやすいですよ。
- 逆行列を求める前に、MDETERM関数で行列式が0でないか確認
- MINVERSE関数で逆行列を計算
- MMULT関数で元の行列と逆行列の積を取り、MUNIT関数の結果と比較して検証
まとめ
スプレッドシートのMUNIT関数は、指定した次元の単位行列を一発で作成する関数です。
- 構文は
=MUNIT(次元)で、引数は正の整数を1つだけ - 結果はN×N行列として自動でスピル展開される
- 単位行列の性質: どんな行列にかけても元の行列が変わらない(
A × I = I × A = A) - MINVERSE関数の検証:
A × A⁻¹が単位行列になるか確認できる - 浮動小数点誤差はROUND関数で丸めて対処
- 引数に0・負の数・文字列を指定するとエラーになる
行列計算の検証用として、MMULT関数やMINVERSE関数と一緒に覚えておくと、逆行列の確認や連立方程式の解法で大きな武器になります。
