math.luma.dev
検索
/linear-algebra/basics/matrix

行列の定義

行列(matrix)

行列とは要素(element)を縦横に格子状に並べたもの、というのが素朴な定義。要素行列とは一般にはなにか、という話が発展して議論されることになる。
それまでは、要素は特に断りがなければ実数(real)とする。一部、複素数(complex)とする場合もあるが、そのときは明記する。

行列の表記

A=(a0,0a0,1a0,m1a1,0a1,1a1,m1an1,0an1,1an1,m1)

括弧は丸括弧()ではなく角括弧[]が使われることもある。上記のような行列n×m行列 と書く。

n(row)数、m(column)数と呼ぶ。

添字(index)そえじは基本的に1から始める事が多いと思うが、このサイトでは0で始めることにする。

1×1行列(a)は単なるaと表記する。これは、基本的に1×1行列スカラー(scalar)をしても、各種の性質が成立するからである。

A=(ai,j)とも書く。この表記は形式的な議論をする際に有用となる。また、i,jをデフォルトの添字用の変数(variable)とし、A=(ai,k)i,kなどのように特別に明示することにする。つまり、(ai,j)=(ai,j)i,j=(as,t)s,tとする。

今後は、A=(ai,j),B=(bi,j),A=(ai,j)などのアルファベットに対応するものを自然な定義として、特別の断りなしに用いる。

行列の例

2×2行列

(1234)

3×2行列

(0.100.2π0.30)

余談: 行列全体の集合(set)

このサイトでは、行列全体の集合Rn×mと書くことにする。
根拠としては、集合論(set theory)では自然数(natural)0{},1{0}, 2{0,1},というふうに集合論の言語に翻訳する技法があるのだが、これを利用していると考える。
まず、YXというのはf:XYなる写像(mapping)fすべてを表す集合として定義される。
これらの定義は冪集合(power set)の表記法のひとつである2SP(S)における2{0,1}とみなした場合の整合性も取れている。
つまり、n×m={0,1,,n1}×{0,1,,m1}ということになり、添字(i,j)n×mからRへの写像行列ということだ。

なお、他にもMn,m(R)と書くような流儀もある。

こうすると、0×0行列も考えられる。これはつまり、何も入っていない行列のみがある、ということだ。R0×0={}(何も写さない写像のみを含む集合)ということになる。

スカラー

要素(field)たいを、行列と区別してスカラーと呼ぶ。
今後、行列同士の演算(operation)や、行列スカラー演算が定義されることになる。

ベクトル(vector)

ベクトルスカラー値の有限列(finite sequence)である。以下のように表記する。

v=(v0v1vn1)

nのことをサイズと呼ぶことにする。

n×1行列列ベクトル(column vector)1×n行列行ベクトル(row vector)と呼ぶ。

これ以降、ベクトル列ベクトルとを同一視(identify)する。

また、n×m行列をサイズnベクトルm個を用いて以下のようにも記述する。

A=(v0v1vm1)

ベクトルの例

v=(1234) e2=(0010)

行ベクトルの例

e1=(0100)

の覚え方

は以下のような暗記法がよく紹介される。

RowColumn

添字の順番の覚え方

ai,jijのことを添字と呼ぶ。

覚え方1. 座標系の軸に対応させてYXと覚える

一般的な二次元(dimension)のデカルト座標系の軸は、おそらく横方向にx,縦方向にyが取られることが多いと思われる。それを基準に、y,xの順にインデックスを指定する、と覚える。

覚え方2. プログラムの二次元配列(array)と対応させて覚える

後述の行列の定義にある、二次元配列に対応させ、そのインデックス指定順と同一であると考える。

プログラムにおける行列

プログラムにおいては、しばしば二次元配列で表現される。

Python

a = [[0 for j in range(3)] for i in range(3)]
print(a)
[
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]

Rust

fn main() {
let a: Vec<Vec<i32>> = (0..3)
.into_iter()
.map(|_| (0..3).map(|_| 0).collect())
.collect();
println!("{:?}", a)
}
[
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]

余談: 一般化に備えて

前述の通り、要素などの代数的構造(algebraic structure)が何なのか、という話はのちに一般化される。基本的には実数 R複素数 C として議論するが、すべて、としての性質のみを用いることに着目するとよい。つまり、 Kに一般化されることになる。

以下に、公理(axiom)を予備知識の必要ない簡単な形式で書く。

集合Kと二項演算 (加算(addition))+:K×KK,(乗算(multiplication))×:K×KK(tuple)(K,+,×)であって、

  1. 加算単位元(identity)0の存在:  0 [0+a=a+0=a]
  2. 加算逆元(inverse)の存在:  bK [a+b=0b+a=0]
    このようなbは他の公理により一意に存在することがわかる。それを a と表記する。
  3. 加算の交換律: a+b=b+a
  4. 加算の結合律: a+(b+c)=(a+b)+c
  5. 乗算単位元1の存在:  1 [1×a=a×1=a]
  6. 乗算逆元の存在: a(K{0})について、 bK [a×b=1b×a=1]
    このようなbは他の公理により一意に存在することがわかる。それをa1と表記する。
  7. 乗算の交換律: a×b=b×a
  8. 乗算の結合律: a×(b×c)=(a×b)×c
  9. 加算乗算の分配律: a(b+c)=ab+ac

なお、乗算演算は省略することがある。

これからの議論が上記の性質しか使っていないと確認できることが重要。
例えば、実数特有の性質は使わないということだ。さらに具体的には、例えば以下のようなことが守られるということ。

  1. 有理数(rational)無理数(irrational)で場合分けするといったことをしない。
  2. 2.2などの0,1以外の特殊な値を定義に使用しない。

行列はさらにその後、線形空間(linear space)対象(object)として一般化される。そして、定義のいくつかの部分は無限(infinite)へと拡張される。