数学のdiagとは?|対角行列の意味と使い方を徹底解説

数学

数学の教科書やプログラミングで「diag」という記号や関数を見たことはありませんか?

「diag(A)」や「diag(1, 2, 3)」といった表記は、線形代数やデータ分析でよく登場します。でも、初めて見ると「これって何?」と戸惑いますよね。

この記事では、diagの基本的な意味から、対角行列の性質、プログラミングでの使い方まで、分かりやすく解説していきます!

スポンサーリンク

diagとは?【基本的な意味】

diagの語源

「diag」は英語の「diagonal(ダイアゴナル)」の略です。日本語では「対角」という意味になります。

数学では、主に次の2つの意味で使われます:

  1. 対角行列を作る関数
  2. 行列の対角成分を取り出す関数

対角とは?

対角とは、行列の左上から右下に向かう斜めのラインのことです。

例えば、3×3の行列の場合:

[a  b  c]

[g h i]

この中で、a、e、iが「対角成分」または「対角要素」と呼ばれます。左上から右下へ斜めに並んでいますね。

対角行列とは?【diagで作られる行列】

対角行列の定義

対角行列とは、対角成分以外がすべて0の行列のことです。英語では「diagonal matrix」といいます。

対角行列の例:

[2  0  0]
[0  5  0]
[0  0  3]

この行列では、2、5、3だけが値を持っていて、それ以外はすべて0です。

対角行列の特徴

対角行列には便利な性質がたくさんあります:

特徴1:計算が簡単

対角行列同士の掛け算は、対角成分同士を掛けるだけでOK。

[a  0  0]   [d  0  0]   [ad  0   0 ]
[0  b  0] × [0  e  0] = [0   be  0 ]
[0  0  c]   [0  0  f]   [0   0   cf]

特徴2:逆行列が簡単に求まる

対角成分をそれぞれ逆数にするだけです(0でない場合)。

[2  0  0]の逆行列は [1/2  0    0  ]
[0  3  0]          [0    1/3  0  ]
[0  0  4]          [0    0    1/4]

特徴3:固有値が一目で分かる

対角行列の固有値は、対角成分そのものになります。

diag関数の使い方【2つの役割】

diag関数には、入力によって異なる2つの使い方があります。

使い方1:ベクトルから対角行列を作る

数値のリストやベクトルを入力すると、それを対角成分とする対角行列を作ってくれます。

入力: [1, 2, 3]

出力:

[1  0  0]
[0  2  0]
[0  0  3]

これは「1、2、3を対角成分に持つ3×3の対角行列を作りなさい」という意味です。

使い方2:行列から対角成分を取り出す

行列を入力すると、その対角成分をベクトルとして取り出してくれます。

入力:

[4  5  6]
[7  8  9]
[1  2  3]

出力: [4, 8, 3]

対角成分だけを抜き出しているわけですね。

プログラミング言語でのdiag関数

数学のソフトウェアやプログラミング言語では、diag関数が標準で用意されていることが多いです。

MATLABでのdiag

MATLABは数値計算ソフトウェアで、行列操作が得意です。

ベクトルから対角行列を作る:

v = [1, 2, 3];
D = diag(v)

結果:

D = 
1  0  0
0  2  0
0  0  3

行列から対角成分を取り出す:

A = [4 5 6; 7 8 9; 1 2 3];
d = diag(A)

結果:

d = 
4
8
3

Pythonでのdiag(NumPy)

PythonのNumPyライブラリでもdiag関数が使えます。

ベクトルから対角行列を作る:

import numpy as np

v = [1, 2, 3]
D = np.diag(v)
print(D)

結果:

[[1 0 0]
 [0 2 0]
 [0 0 3]]

行列から対角成分を取り出す:

A = np.array([[4, 5, 6], 
              [7, 8, 9], 
              [1, 2, 3]])
d = np.diag(A)
print(d)

結果:

[4 8 3]

Rでのdiag

統計解析言語Rでもdiag関数が使えます。

ベクトルから対角行列を作る:

v <- c(1, 2, 3)
D <- diag(v)
print(D)

結果:

     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    2    0
[3,]    0    0    3

対角行列の記号表記

数学の論文や教科書では、対角行列を記号で表すことがあります。

一般的な記号

diag(a₁, a₂, …, aₙ)

これは次のような対角行列を表します:

[a₁  0   0  ...  0 ]
[0   a₂  0  ...  0 ]
[0   0   a₃ ...  0 ]
[⋮   ⋮   ⋮   ⋱   ⋮ ]
[0   0   0  ...  aₙ]

具体例

diag(2, 5, 3)は:

[2  0  0]
[0  5  0]
[0  0  3]

diag(1, 1, 1)は:

[1  0  0]
[0  1  0]
[0  0  1]

これは単位行列と呼ばれる特別な対角行列です。

対角化とdiagの関係

線形代数では「対角化」という重要な概念があります。

対角化とは?

一般的な行列Aを、対角行列Dに変換することです。

式で表すと:

A = PDP⁻¹

P:固有ベクトルを並べた行列
D:固有値を対角成分に持つ対角行列
P⁻¹:Pの逆行列

なぜ対角化するの?

対角行列は計算がとても簡単だからです。

例:行列のn乗を求める

Aのn乗を直接計算するのは大変ですが、対角化すると:

Aⁿ = (PDP⁻¹)ⁿ = PDⁿP⁻¹

Dは対角行列なので、Dⁿは各対角成分をn乗するだけでOK!

もしD = [2  0  0]なら、D³ = [8   0   0 ]
       [0  3  0]           [0   27  0 ]
       [0  0  5]           [0   0   125]

対角成分以外のdiag応用

diagには対角成分以外を扱う拡張機能もあります。

上側の対角線(super-diagonal)

対角線の1つ上のラインです。

例:

[0  a  0  0]
[0  0  b  0]
[0  0  0  c]
[0  0  0  0]

MATLABでは:

D = diag([1, 2, 3], 1)

「1」は「1つ上の対角線」という意味です。

下側の対角線(sub-diagonal)

対角線の1つ下のラインです。

例:

[0  0  0  0]

[0 b 0 0] [0 0 c 0]

MATLABでは:

D = diag([1, 2, 3], -1)

「-1」は「1つ下の対角線」という意味です。

対角行列の実用例

対角行列は理論だけでなく、実際の問題でもよく使われます。

データのスケール変換

データ分析では、各変数のスケールを変えるために対角行列を使います。

例:

元のデータ: [x₁, x₂, x₃]
スケール行列: diag(2, 0.5, 3)
変換後: [2x₁, 0.5x₂, 3x₃]

物理学での慣性モーメント

物体の回転に関する慣性モーメントテンソルは、適切な座標系では対角行列になります。

量子力学での演算子

量子力学のオブザーバブル(観測可能な量)を表す演算子は、固有状態の基底で対角化されます。

経済学での入出力分析

産業連関表の分析で、対角行列が使われます。

単位行列と零行列

対角行列の中でも特別なものを紹介します。

単位行列(Identity Matrix)

すべての対角成分が1の対角行列です。

記号: I または Eₙ(n×nの場合)

例(3×3の場合):

I = [1  0  0]
    [0  1  0]
    [0  0  1]

性質:

どんな行列Aに対しても:

AI = IA = A

単位行列は掛け算の「1」のような役割をします。

零行列(Zero Matrix)

すべての成分が0の行列です。

記号: O または 0

例(3×3の場合):

O = [0  0  0]
    [0  0  0]
    [0  0  0]

性質:

どんな行列Aに対しても:

A + O = A
AO = OA = O

diagを使った練習問題

理解を深めるために、いくつか問題を解いてみましょう。

問題1

diag(4, 7, 2)で表される対角行列を書きなさい。

解答:

[4  0  0]
[0  7  0]
[0  0  2]

問題2

次の行列の対角成分を求めなさい。

[5  2  8]
[1  3  6]
[9  4  7]

解答:

対角成分は[5, 3, 7]

問題3

diag(2, 2, 2)の逆行列を求めなさい。

解答:

各対角成分の逆数を取ればよいので:

[1/2  0    0  ]
[0    1/2  0  ]
[0    0    1/2]

または diag(0.5, 0.5, 0.5)

対角行列の判定方法

ある行列が対角行列かどうかを判定する方法です。

定義による判定

すべての非対角成分(i≠jのときのaᵢⱼ)が0かどうか確認します。

プログラムでの判定

Pythonの例:

import numpy as np

def is_diagonal(A):
    # 行列と、その対角成分だけの行列を比較
    return np.allclose(A, np.diag(np.diag(A)))

A = np.array([[2, 0, 0], 
              [0, 5, 0], 
              [0, 0, 3]])

print(is_diagonal(A))  # True

よくある疑問

Q1: 長方形の行列でもdiagは使える?

はい、使えます。ただし、取り出せる対角成分の数は、行数と列数の小さい方になります。

例(2×3行列):

[1  2  3]
[4  5  6]

対角成分は[1, 5]だけです。

Q2: diagの読み方は?

「ダイアグ」または「ディアグ」と読みます。「diagonal」の略なので、「ダイアゴナル」と読む人もいます。

Q3: 対角行列の行列式は?

対角成分の積になります。

例:

det(diag(2, 3, 5)) = 2 × 3 × 5 = 30

Q4: すべての行列は対角化できる?

いいえ、対角化できない行列も存在します。対角化できる条件は、行列が「固有ベクトルを十分に持つこと」です。

まとめ

diagは線形代数で頻繁に使う重要な概念です。

この記事のポイント

  • diagは「diagonal(対角)」の略
  • 主に2つの使い方がある:対角行列を作る、対角成分を取り出す
  • 対角行列は計算が簡単で、多くの便利な性質を持つ
  • MATLAB、Python、Rなどのプログラミング言語で標準的に使える
  • 単位行列はすべての対角成分が1の特別な対角行列
  • 対角化は複雑な行列計算を簡単にする強力な手法

線形代数やデータ分析を学ぶ上で、diagと対角行列の理解は欠かせません。最初は記号に戸惑うかもしれませんが、実際に使ってみると、その便利さが実感できますよ!

タイトルとURLをコピーしました