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

行列同士の積の定義

行列の積(matrix multiplication)

行列(matrix)An×mとBm×lの行列の積A⋅Bを行列Cn×lとして定義する。ただし、

(ai,j)i,jn×m⋅(bj,k)j,km×l=def(∑1≤j≤mai,j×bj,k)i,kn×l

とする。

ところで、行列の行(row)と列(column)に関する定義は基本的には対称的で、どちらが横向きでもいいのだが、そうでない定義(片方で定義したものが特に意味を持つ定義)というのが今後登場する。この章にもそうした定義が登場する。その非対称性は、この行列の積の定義の、行と列の非対称性に由来する。

A⋅Bは省略してABとも書く。

行列の積の計算方法

TODO

行列の積の意味

TODO

多変数(multiple variable)線形方程式(system of linear equations)を行列の積で表す

{3x+y+2z=3x+(−1)y+z=4

を

(3121−11)(xyz)=(34)

と表すことができる。

より一般に、n変数(variable)、m個の方程式(equation)が連立しているとき、係数(coefficient)を表す行列An×m、変数を表すベクトル(vector)x=(x0,x1,⋯ ,xn−1)、そして定数部を表すベクトルb=(b0,b1,⋯ ,bm−1)を用いて、

Ax=b

と表せる。これを線型方程式と呼ぶ。また、b=0であるとき、線形方程式は斉次(homogeneous)(さいじ)であるといい、斉次方程式(homogeneous system)(さいじほうていしき)と呼ぶ。

行列の積の性質

1. 結合律: (AB)C=A(BC)

証明

TODO

■

2. 行列の和(matrix addition)との分配則(distributivity): A(B+C)=AB+AC

証明略。

3. スカラー倍(scaling)との結合律: (kA)B=k(AB)

証明略。

4. t(AB)=tBtA

証明

X≔(左辺)とする。tX=ABとなる。

txi,k=∑1≤j≤mai,j×bj,k()

上記のiとkを入れ替えることで転置(transpose)となる。

xi,k=∑1≤j≤mak,j×bj,i

Y≔(右辺)とする。

yi,j=∑1≤j≤mtbi,j×taj,k()=∑1≤j≤mbj,i×ak,j(の定義より、それぞれの添字を入れ替える)=∑1≤j≤mak,j×bj,i(のに関する)

以上より∀ i,j [xi,j=yi,j]であることがわかった。つまり、X=Yとなる。

■

逆行列(inverse)

行列Aに対して、AB=IかつBA=Iとなる行列Bを逆行列と呼ぶ。

注意: このようなAは正方行列(square matrix)しかありえないが、証明するまでは循環論法を避けるためにこれらの性質は使わない。

正則行列(invertible)

正則行列とは、逆行列が存在する行列のことである。

定理: 正則行列Aの逆行列は一意である

正則行列Aの逆行列をA−1と書く。

証明

BとCを正則行列Aの逆行列とする。

AB=I  ⟹CAB=C(左からCを乗じた)  ⟺  (CA)B=C(の)  ⟺  IB=C(の定義よりCA=I)  ⟺  B=C(の性質より)
■

正則行列の性質

正則行列に0のみの行や列は含まれない。

0のみの行や列のことを零(zero)行や零列と呼ぶことにする。

証明

AB=I

行列同士の積の定義を見てもらうとわかるように、Aの行iが0のみのなら、Iの行iも0のみと言うことになるが、Iには零行はないので矛盾。
BA=Iに対して同様の議論を行うことで、零列も含まれない。

■

主成分(leading entry)

主成分とは、行列内の要素(element)であって、0を除いたもののうち、各行ごとに、最も左にある要素のこと。
各行ごとに、高々1個の主成分が存在する。

なお、この主成分が行に関して定義されていることがまさに、上記で述べた行と列の非対称性の一つになる。

行階段形(row echelon form)

行階段形とは、以下の条件をすべて満たす行列のこと。

✔主成分が右肩下がりである。
✔0だけの行より、そうでない行がすべて上にくる

行簡約階段形(reduce row echelon form)

行簡約階段形とは、以下の条件をすべて満たす行列のこと。

行標準形とも。

✔行階段形である
✔すべての主成分は1
✔主成分のある列は、主成分以外は0

解(solution)を求めた多変数線形方程式を行列で表現すると行簡約階段形

詳しい求め方は、後述する(TODO)で説明する。

{x+2y+3z=4x+y+2z=3  ⟺  {x+2y+3z=4−1y+2z=−1(下の式から上の式を引く)  ⟺  {x+2y+3z=4y+(−2)z=1(下の式を両辺−1倍する)  ⟺  {x+7z=−2y+(−2)z=3(上の式から下の式を2倍して引く)

より解をパラメータ表示(parametrization)する。
a∈Rをパラメータ(parameter)として、z=aとすれば、

{x=−2−7ay=3+2az=a

となる。

ここで、最後の式変形後の方程式を行列で表現すると、

(10701−2)(xyz)=(−23)

ここで左辺の行列を見ると、これは行簡約階段形だ。

行基本変形(elementary row operation)

ここで、上記のような多変数一次線形方程式に対して行えた操作をまとめて行基本変形と呼ぶ。

行基本変形とは、以下の3つの行列に対する操作である。

1. 行iと行jを入れ替える。

例えば、i=2, j=3を選択して、

(11121314212223243132333441424344)→(11121314313233342122232441424344)

これは一般に、行列An×mに対して、以下の行列を左から掛けることと同義である。

Pi,jn×n=def(1⋱10———1———|1||⋱||1|1———0———||1||⋱||1)←i←j↑↑ij

2. 行iをλ倍する。(λ∈R,λ≠0)

例えば、i=2, λ=10を選択して、

(11121314212223243132333441424344)→(111213142102202302403132333441424344)

これは一般に、An×mに対して、以下の行列を左から掛けることと同義である。

Pi(λ)n×n=def(1⋱1λ———|1|⋱|1)←i↑i

3. 行iに行jをλ倍したものを加える。(λ∈R,λ≠0)

例えば、i=3, j=2, λ=100を選択して、

(11121314212223243132333441424344)→(1112131421222324213122322333243441424344)

これは一般に、行列An×mに対して、以下の行列を左から掛けることと同義である。

Pi,j(λ)n×n=def(1⋱λ——1|1|1|⋱|1)←i↑j

基本行列(elementary matrix)

基本行列とは、上記で定義したPi,jとPi(λ)、そしてPi,j(λ)のこと。
行基本行列と呼ばないのは、仮に列基本行列を同様に定義したとしてもまったく同様の行列になるからだ。

系: 線形方程式を解くことは、行列を行基本変形を任意の回数行って行簡約階段形に変形することである

線形方程式の行列での表現を行うと、各列がそれぞれ一つの変数xjに対応することになる。ここで、主成分の存在しない列をパラメータとすれば解が求まる。

基本行列の逆行列

基本行列Pに対して、P−1が次のように存在する。

Pi(λ)−1=defPi(λ−1)Pi,j−1=defPi,jPi,j(λ)−1=defPi,j(−λ)

これらはすべて、行基本変形をもとに戻す行基本変形に対応する。そのことから、以下のような性質を持つことがすぐにわかる。

  • PP−1=I
  • P−1P=I
  • (P−1)−1=P

行基本変形による同値関係(equivalence relation)の定義

行列Aに行基本変形を何回か行ってBが得られるとき、A∼Bという二項関係(binary relation)を定義すると、これは同値関係になる。

言い換えると、基本行列のSEQ(P0,P1,⋯ ,Pn−1)であって、B=P0P1⋯Pn−1Aであるものが存在するとき、かつそのときに限りA∼Bであると定義する。

証明

a. 反射律(reflexivity): A∼A

空列(null sequence)が対応する。A=Aであるため、A∼A

b. 対称律(symmetricity): A∼B  ⟺  B∼A
AからBにする際の行基本変形の列を、反転(reverse)させてから、各操作を逆操作(基本行列の逆行列)に換えると、BからAへの行基本変形の列になる。

基本行列で言い換えると、

  • B=P0P1⋯Pp−1A

としたとき、

  • A=Pp−1−1⋯P1−1P0−1B

なので、B∼Aとなる。

c. 推移律(transitivity): A∼B∧B∼C⟹A∼C
AからB、BからCへの操作列をそのまま連結するとAからCへの操作列になる。

基本行列で言い換えると、

  • B=P0P1⋯Pp−1A
  • C=Q0Q1⋯Qq−1B

としたとき、

C=Q0Q1⋯Qq−1(P0P1⋯Pp−1A)=(Q0Q1⋯Qq−1P0P1⋯Pp−1)A(の)

(Q0,Q1,⋯ ,Qq−1,P0,P1,⋯ ,Pp−1) は基本行列の列であるから、A∼C

■

簡約化(matrix reduction)

簡約化とは、行列を行基本変形によって行簡約階段形に変形することだ。もう少し形式的に言うなら、与えられた行列Aに対して、B=P0P1⋯Pp−1Aであるような基本行列の列Pと行簡約階段形Bの組(tuple)を提示すること、ということ。

「Aを簡約化する」というのを、「基本行列の列P0,P1,⋯Pp−1であって、P≔P0P1⋯Pp−1と定義して、PA=Xなるものを選ぶ」を意味するものとする。変数P,pはQ,qであったりする場合もある。また、Pp−1−1⋯P1P0⋯を考えると、これはP−1である。

Pi−1はTODOより常に存在する。

また、同様の用語として、上三角行列(upper triangular matrix)を目指すことを上三角化(upper triangularization)と呼ぶことにする。

ガウスの消去法(Gaussian elimination)

ガウスの消去法は、任意の行列を簡約化するアルゴリズム(algorithm)だ。

前進消去(forward elimination)と後退代入(back substitution)の2つのパートからなる。

ここではそれぞれの概要を説明する。厳密なアルゴリズムに関しては、以下のアニメーションを、数値を変えながら試してほしい。

前進消去

前進消去では、上三角行列かつ、主成分が1であることを目指す。同時に、枢軸選択(pivotting)(すうじくせんたく)という、見ている要素が0であった場合に別の行と交換する (Pi,jに対応する) をすることによって、零行が自動的に下に行く。

前進消去の終了時点で得られた主成分は、最終的に得られる行簡約階段形の主成分となる。

後退代入

後退代入では、前進消去で決定した主成分をすべてを、上向きに探索する。そして、それぞれについて、前進消去と同じように、打ち消すように Pi,j(λ)を行う。やっていることはほぼ同じである。

後退代入を行う理由について

後退代入を行う理由、もしくは、前進消去と上三角行列を分ける理由について。単に行簡約階段形を得るだけなら、前進消去の時点で、後ろ向きにも削除を行えば、アルゴリズムはシンプルになる。ガウス・ジョルダンの消去法(Gauss-Jordan elimination)は、そのような実装のバリエーションを指すことがある。

しかし、わざわざ後退代入として分けるのは、計算回数を抑えるためだ。実際、アニメーションを見てもらうと、後退代入の際には、これまで調べた主成分に関しては0だとわかっているので、処理をしなくてすむ。

ガウスの消去法の計算量(computation complexitiy)

加算(addition)・乗算(multiplication)の回数がどれくらい起こるか、という計算量を考える。n×mの行列に対してガウスの消去法を行うとする。それぞれのn,mについて最悪でどれくらいになるかを考える。
これは最悪Θ(min⁡{n,m}nm)=Θ((n+m)nm)になる。

例

A=(1224231520−58)

上記の行列に対してガウスの消去法を行う、以下の例を見る。

(1224231520−58)∼(12240−1−3−320−58)(P1,2(−2))∼(12240−1−3−30−4−90)(P1,3(−2))∼(122401330−4−90)(P2(−1))∼(1224013300312)(P2,3(4))∼(122401330014)(P3(13))∼(120−401330014)(P3,1(−2))∼(120−4010−90014)(P3,2(−3))∼(10014010−90014)(P2,1(−2))

以上より、

P2,1(−2)P3,2(−3)P3,1(−2)P3(13)P2,3(4)P2(−1)P1,3(−2)P1,2(−2)A=(10014010−90014)

左辺の基本行列の列の行列の積を計算すると、

(5−10343−43−12−4313)

定理: 任意の行列は、行基本変形によって行簡約階段形に変形することが可能。

ガウスの消去法がそのまま構築による証明となる。

ガウス・ジョルダンの消去法

ガウスの消去法の中でも少しだけ触れたが、ガウス・ジョルダンの消去法の定義はいくつかの文献でゆらぎがある。ただ、かんたんにまとめると、ガウス・ジョルダンの消去法はガウスの消去法のアルゴリズムの方針を利用して、行基本変形や列基本変形(elementary column operation)によって行簡約階段形や上三角行列に変形すること、もしくはそのアイデアのことを指す。

そのアイデアというのはつまり、左上から順に主成分を決定していくことである。

定理: 任意の行列について、行基本変形によって得られる行簡約階段形は一意である。

この定理に明確に言及しているのを見かける機会は少ないかもしれないが、今後の各種定義がwell-defined(well-defined)であるかどうかはこの定理による部分が多い。

証明

行列Aが異なる基本行列の列によって簡約化されたとする。

  • P0P1⋯Pp−1A=K
  • Q0Q1⋯Qq−1A=K′

ということになる。K=K′を示せばよい。

まず、

  • A=Pp−1−1⋯P1−1P0−1K
  • A=Qq−1−1⋯Q1−1Q0−1K′

と変形できる。つまり、Pp−1−1⋯P1−1P0−1K=Qq−1−1⋯Q1−1Q0−1K′となるが、更に変形して、

K=P0P1⋯Pp−1Qq−1−1⋯Q1−1Q0−1K′

となる。F=P0P1⋯Pp−1Qq−1−1⋯Q1−1Q0−1と置く。K=FK′

F(Q0Q1⋯Qq−1Pp−1−1⋯P1−1P0−1)=Iであるから、Fは正則行列だ。つまり、零行がない。この性質をこのあと用いる。

さて、ここからは、行列同士の積の定義と同様の表記法をして、K′のみからFとKが決定できることを示す。

K′=FKの掛け算を以下のように表す。

K′FK

決定されていない場所を?、任意の値がありうる場所を∗で表記したのが以下だ。

(01∗0∗0∗0001∗0∗000001∗0000000)=K′F=(????????????????)(????????????????????????????)=K

3個の主成分である場合を例示している。なお、K′の左側と下側の零行・列は0個以上の任意の数がそれぞれあり得る。また、∗(アスタリスク)のある列も同様に0個以上の任意の数だ。

Kを左の列から決定していく。

1ブロック目 (最初に0列以上続く零列)

まずは零列なので、Kの1列目も0のみである。Fについては何も決定しない。

(01∗0∗0∗0001∗0∗000001∗0000000)=K′F=(????????????????)(0??????0??????0??????0??????)=K

2ブロック目 (最初の主成分を含む列)

(01∗0∗0∗0001∗0∗000001∗0000000)=K′F=(????????????????)(0!?????0??????0??????0??????)=K

!で表した要素について、この値は1のみがありうる。
まず、0だとしたら、Fの1行目がすべて0となってしまう。
そして、行簡約階段形の条件より1と決定できる。行簡約階段形であるため、その下も0だと決定できる。


(01∗0∗0∗0001∗0∗000001∗0000000)=K′F=(!???????????????)(01?????00?????00?????00?????)=K

!で表したFの要素について、1×!+0×?+0×?+0×?=1を満たす必要がある。
よって、この値は1のみがありうる。


(01∗0∗0∗0001∗0∗000001∗0000000)=K′F=(1???!???!???!???)(01?????00?????00?????00?????)=K

!で表したFのすべての要素について、1×!+0×?+0×?+0×?=0を満たす必要がある。
よって、この値は0のみがありうる。


(01∗0∗0∗0001∗0∗000001∗0000000)=K′F=(1???0???0???0???)(01?????00?????00?????00?????)=K

3ブロック目 (0列以上続く、1行目まで任意の値を含む列)

このブロックは、一般化すると、1ブロック目と同一だと捉えらる。

(01∗0∗0∗0001∗0∗000001∗0000000)=K′F=(1???0???0???0???)(01∗????000????000????000????)=K

Fの1列目が決定しているため、K′と同一の列であると決定する。
K側の∗は、K′と同様の値であるとする。

4ブロック目 (2個目の主成分を含む列)

このブロックは、一般化すると、2ブロック目と同一だと捉えらる。

(01∗0∗0∗0001∗0∗000001∗0000000)=K′F=(1???0???0???0???)(01∗0???0001???0000???0000???)=K

2ブロック目と同様に、Fの2行目がすべて0になってはいけないこと、行列の積による等式から1であることが決定し、行簡約階段形であることから、他の要素が0であることが決定する。


(01∗0∗0∗0001∗0∗000001∗0000000)=K′F=(10??01??00??00??)(01∗0???0001???0000???0000???)=K

Fについても、同様に2行目とそれ以外でそれぞれ立式すると、1と0に決定する。

終了時

のこりは同様に、ということになる。

(01∗0∗0∗0001∗0∗000001∗0000000)=K′F=(100?010?001?000?)(01∗0∗0∗0001∗0∗000001∗0000000)=K

これにより、F=F′が示された。

■

上記は具体的なものしか取り扱っていないが、形式的な議論が見える範囲で記述するように心がけた。

なお、Fは上記のように決定しないこともある。行数より主成分が少ない場合がそうだ。これは、下の零行に関して行基本変形を追加でいくらやっても良い、その自由度(degree of freedom)から来ている。なお、この決定されない行数はそのまま自由度の定義として使える。

定理: 正則行列ならば正方行列である。

証明

An×m⋅Bm×n=InBm×n⋅An×m=Im

としておく。

Aを簡約化してPn×n⋅An×m=Xn×m、両辺に右からBを乗じてPAB=XB、PAB=P(AB)=PI=Pより、P=XBとなる。
PP−1=Iであるので、Pは零行を含まない。
ここで、もしXが零行を含むと、Pも零行を持つことになるが、上記に矛盾するので、Xは零行を含まない。
零行を含まない行簡約階段形は対角成分(main diagonal)が1で、それ以外が0のもので、Xn×mは横長か正方行列(n≤m)である。

また、Bを簡約化してQm×m⋅Bm×n=Ym×nとする。
QB=Y、両辺に右からAを乗じてQ=YAとなる。Qも同様の議論で零行を含まないので、Ym×nも含まない。よって、Yは横長か正方行列(m≤n)である。

よってn=m。

■

系: 正則行列を基本行列すると単位行列(identity matrix)となる。

正方行列かつ行簡約階段形であって、零行を含まないものは単位行列のみであるから。

系: 任意の正則行列は基本行列の行列の積で表わせる。

Aを正則行列とする。

証明

BA=IなるBが存在する。Bを簡約化してPB=Iとなる。両辺に右からAをかけると、P(BA)=A、よってP=A。A=P0P1⋯Pp−1となる。

■

行列と実数(real)の性質の相違

  1. 一般にAB≠BA。AB=BAならAとBは可換(commutative)である、という。
    例えば対称行列(symmetrix matrix)同士は常に可換である。
  2. A≠O,B≠OであってもAB=Oとなりうる。このとき、AとBを零因子(zero divisor)という。例:
(1122)(11−1−1)=(0000)
  1. A≠OであってもA−1が存在する(正則行列である)とは限らない。

行列のランク

任意の行列Aに関する行列のランクを、Aを簡約化してPA=Xになるとして、Xの主成分の数として定義する。

この定義はTODOによってwell-definedである。(Pのとり方によらない)

行列のランクをrank⁡Aと書く。

定理: Pが基本行列なら、rank⁡PB=rank⁡B

証明

PBの簡約化QPB=Xを考えると、QPがそのままBの簡約化になっている。
よって、PBとBの行列のランクはどちらもXの零でない行の個数として一致する。

■

系: Aが正則行列なら、rank⁡AB=rank⁡B

証明

TODOよりA=P0P1⋯Pp−1と表せるから、
rank⁡AB=rank⁡P0P1⋯Pp−1B、TODOをp回適用して、rank⁡AB=rank⁡B

■

定理: A∈Rn×nについて。Aが正則行列  ⟺  rank⁡A=n

証明

⟹はTODOによりすぐ。

⟸について。
rank⁡A=nなのでAを簡約化するとPA=Iとなる。PがA−1である。

■

定理: k個の零行を含む行列An×mについて、rank⁡A≤n−k

証明

ガウスの消去法を考えると、零行はそのまま簡約化しても残ることになる。
よって、行簡約階段形には、k個は少なくとも零行が含まれることになる。

■

定理: Aが正則行列でなければ、ABも正則行列ではない。

今後に議論するより多くの行列のランクの性質からすぐにわかることなのだが、ここでは一応別の方法で示す。

証明

Aを簡約化してPA=Xとする。A=P−1Xとなる。

rank⁡AB=rank⁡P−1XB(A=P−1Xを代入)=rank⁡XB(TODOより)

ここで、Aは正則行列でないから、Xは零行を含む。XBも同様に含む。TODOより、rank⁡XB<n。よって、rank⁡AB<nであるが、TODOよりABは正則行列ではない。

■

線形方程式の求め方

線形方程式とは一次の連立方程式(system of equations)のこと。n変数でm連立であるとすると、変数をx=(x0x1⋯xn−1)として、An×mx=bと書ける。

b=0の場合、その線形方程式は斉次である、という。

線形方程式をガウスの消去法を使って解くことが可能。

まず、(Ab)という行列を考える。これを上記の線形方程式に対する拡大行列(augmented matrix)と呼ぶ。

(Ab)に対する行基本変形は、もとの連立方程式への同値変形と同一視(identify)できる。

そこで、(Ab)をガウスの消去法する。それを、(Ab)∼(A′b′)とする。たとえば以下のような形をしている。

(1∗0∗∗001∗∗0000∗0000∗)

ここで、もし最右だけ0でない行、つまり、上の例で言う最後の行のアスタリスクが0でない場合は、解がない。

rank⁡A<rank⁡(Ab)なら解なし、ということだ。
ここから、線形方程式の解の存在の必要十分条件は、rank⁡A=rank⁡(Ab)であることがわかる。

逆にそうでない場合は解が必ず存在する。

各列が一つの変数に対応している。
主成分がない列をそれぞれ自由変数を割り当てて、主成分がある行について、主成分以外の項(term)を移すと一般解が得られる。

また、斉次線形方程式の場合は、常に解が存在する。斉次なら常にrank⁡A=rank⁡(Ab)=rank⁡(A0)であるからだ。

自由度

解が存在する線形方程式An×mx=bの自由度を、これを解いた際の、一般解の自由変数の(最小)数として定義する。

イメージとしては、自由度0なら点、1なら線、2なら平面のようになる。TODO

自由度は、Aを簡約化した際の零でない行の数、つまりm−rank⁡Aと等しくなる。