世界の国567435 views
高校倫理1444503 views
教育150077 views
高校国語790013 views
中学社会670081 views
高校物理162509 views
数学講師2913151 views
MathPython501700 views
ヒストリア294981 views
中学数学625176 views
Help
Tools

English

ブロック行列とシューア補元|区分けして積・行列式・逆行列を計算する

行列を縦と横の線で区切り、小さな行列が並んだものとして見た形をブロック行列といいます。区分行列とも呼びます。

区切り方がそろっていれば、ブロックを数のように扱って和や積が計算できます。大きな行列の計算が、小さな行列の計算に分かれます。

行列式・逆行列・階数も、うまく区切れば同じように分かれます。その要になるのがシューア補元です。

HTML
CSS
JavaScript
<svg viewBox="0 0 460 250" width="100%" style="max-width:460px;display:block;margin:0 auto">
	<text x="175" y="44" font-size="11" fill="#9a9a9a" text-anchor="middle">n1 列</text>
	<text x="305" y="44" font-size="11" fill="#9a9a9a" text-anchor="middle">n2 列</text>
	<text x="102" y="96" font-size="11" fill="#9a9a9a" text-anchor="end">m1 行</text>
	<text x="102" y="176" font-size="11" fill="#9a9a9a" text-anchor="end">m2 行</text>
	<rect x="110" y="52" width="130" height="80" fill="#1b81e0" fill-opacity="0.12"></rect>
	<rect x="240" y="52" width="130" height="80" fill="#f5f5f5"></rect>
	<rect x="110" y="132" width="130" height="80" fill="#f5f5f5"></rect>
	<rect x="240" y="132" width="130" height="80" fill="#1b81e0" fill-opacity="0.12"></rect>
	<rect x="110" y="52" width="260" height="160" fill="none" stroke="#c8c8c8" stroke-width="1"></rect>
	<line x1="240" y1="52" x2="240" y2="212" stroke="#1b81e0" stroke-width="1"></line>
	<line x1="110" y1="132" x2="370" y2="132" stroke="#1b81e0" stroke-width="1"></line>
	<text x="175" y="98" font-size="15" fill="#1f1f1f" text-anchor="middle">A</text>
	<text x="305" y="98" font-size="15" fill="#1f1f1f" text-anchor="middle">B</text>
	<text x="175" y="178" font-size="15" fill="#1f1f1f" text-anchor="middle">C</text>
	<text x="305" y="178" font-size="15" fill="#1f1f1f" text-anchor="middle">D</text>
	<text x="230" y="238" font-size="11" fill="#9a9a9a" text-anchor="middle">同じ行のブロックは行数が、同じ列のブロックは列数がそろいます</text>
</svg>

行列を区分けして見る

行列 の行を 、列を と分けます。区切り線を入れると、4 つの小行列が並んだ形になります。

は 、 は 、 は 、 は の行列です。同じ行に並ぶブロックは行数が、同じ列に並ぶブロックは列数がそろいます。

区切りは 2 分割に限りません。 行 列のブロックに分けたときは と添字で呼びます。以下では 2 分割の場合を中心に見ていきます。

ブロックごとの和と積

和は単純です。区切り方が同じ 2 つの行列なら、同じ位置のブロックどうしを足せば済みます。

積には条件がつきます。 を計算するとき、 の列の分け方と の行の分け方が一致していれば、ブロックを数のように掛けられます。

2 分割どうしなら次の形です。ブロックの積は可換ではないので、左右の順序を崩さないことがすべてです。

例:ブロック三角行列どうしの積

左下が零行列である 2 つの行列を掛けます。ブロックには次の値を入れます。

公式に当てはめると、左上は 、右上は 、右下は になります。左下は で零行列のままです。

これらを並べたものが積です。

4 次の行列として直接掛けても同じ結果が出ます。左下が零行列のままである点も見てください。ブロック三角の形は積で保たれます。

ブロックのまま掛けてよい理由

成分で書いた積の定義 を、 の範囲で区切って足し直しただけです。

を から までと、 から までに分ければ、前半が の成分に、後半が の成分に対応します。

和をまとめる順序を変えているだけなので、区切りが整合していればいつでも成り立ちます。新しい定理というより、和の書き換えです。

ブロック対角行列

対角にだけブロックが並び、ほかがすべて零行列である行列をブロック対角行列といいます。

行列式はブロックごとの行列式の積、トレースは和になります。逆行列も各ブロックの逆行列を並べるだけです。

が正則であることと、すべての が正則であることが同値です。空間をいくつかの部分に分け、それぞれで独立に写像が働いている状況を、行列の言葉にした形にあたります。

数と同じに扱えるところ

和と積の形、ブロック三角行列の行列式、ブロック対角行列の逆行列。区切りさえそろっていれば、そのまま計算できます

数と同じには扱えないところ

ブロックの積の順序と、たすきがけの形の公式。可換性を前提にした式は、そのままでは成り立ちません

ブロック三角行列の行列式

右上または左下が零行列で、対角のブロックが正方行列なら、行列式はブロックごとの積になります。

が正則な場合は、3 つの行列の積に分けると見通しがよくなります。

右端は対角成分がすべて の三角行列なので、行列式は です。左の 2 つは余因子展開を繰り返せば と になります。

が正則でないときは、 となる でない を使って の列の一次従属が作れます。両辺とも になり、等式はやはり成り立ちます。

例:ブロック三角行列の行列式を求める

次の 4 次の行列で確かめます。

左下の 2 次ブロックが零行列なので、左上と右下だけを見れば済みます。、 です。

右上のブロックの中身は結果に効きません。4 次の行列式を余因子展開で追うより、はるかに手数が少なくて済みます。

たすきがけの公式は成り立たない

2 次の行列式 の形をまねて としたくなりますが、これは一般には誤りです。

2 次のブロックに区切って から を引きます。

この行列式は ですが、 の行列式は です。値がまるで合いません。

と が可換なら が正しい答を与えます。可換性つきの公式であって、いつでも使える式ではありません。

ブロック消去とシューア補元

連立方程式で使う消去を、ブロックのままやってみます。 が正則なら、第 1 行のブロックに を掛けて第 2 行から引けます。

左下が消え、右下に が残りました。これを に関するシューア補元といい、 と書きます。

HTML
CSS
JavaScript
<svg viewBox="0 0 460 230" width="100%" style="max-width:460px;display:block;margin:0 auto">
	<rect x="40" y="60" width="70" height="55" fill="#1b81e0" fill-opacity="0.12"></rect>
	<rect x="110" y="60" width="70" height="55" fill="#f5f5f5"></rect>
	<rect x="40" y="115" width="70" height="55" fill="#f5f5f5"></rect>
	<rect x="110" y="115" width="70" height="55" fill="#f5f5f5"></rect>
	<rect x="40" y="60" width="140" height="110" fill="none" stroke="#c8c8c8" stroke-width="1"></rect>
	<text x="75" y="94" font-size="14" fill="#1f1f1f" text-anchor="middle">A</text>
	<text x="145" y="94" font-size="14" fill="#1f1f1f" text-anchor="middle">B</text>
	<text x="75" y="149" font-size="14" fill="#1f1f1f" text-anchor="middle">C</text>
	<text x="145" y="149" font-size="14" fill="#1f1f1f" text-anchor="middle">D</text>
	<line x1="200" y1="115" x2="255" y2="115" stroke="#9a9a9a" stroke-width="1"></line>
	<polygon points="255,115 247,111 247,119" fill="#9a9a9a"></polygon>
	<text x="228" y="106" font-size="11" fill="#9a9a9a" text-anchor="middle">ブロック消去</text>
	<rect x="280" y="60" width="70" height="55" fill="#1b81e0" fill-opacity="0.12"></rect>
	<rect x="350" y="60" width="70" height="55" fill="#f5f5f5"></rect>
	<rect x="280" y="115" width="70" height="55" fill="#f5f5f5"></rect>
	<rect x="350" y="115" width="70" height="55" fill="#1b81e0" fill-opacity="0.12"></rect>
	<rect x="280" y="60" width="140" height="110" fill="none" stroke="#c8c8c8" stroke-width="1"></rect>
	<text x="315" y="94" font-size="14" fill="#1f1f1f" text-anchor="middle">A</text>
	<text x="385" y="94" font-size="14" fill="#1f1f1f" text-anchor="middle">B</text>
	<text x="315" y="149" font-size="14" fill="#9a9a9a" text-anchor="middle">O</text>
	<text x="385" y="149" font-size="14" fill="#1b81e0" text-anchor="middle">S</text>
	<text x="230" y="200" font-size="11" fill="#9a9a9a" text-anchor="middle">左下が消え、右下に現れる S がシューア補元です</text>
	<text x="230" y="218" font-size="11" fill="#9a9a9a" text-anchor="middle">元の行列の情報は、A と S の 2 つに分かれます</text>
</svg>

右からも同じ操作をすると、対角だけの形に整います。まとめると次の分解が得られます。

両端は対角成分が の三角行列で、行列式も階数の変化も持ちません。本質的な情報は真ん中に集まります。

行列式はシューア補元で分かれる

さきほどの分解の両辺で行列式を取れば、公式がそのまま出ます。

のほうが正則なら、上下を入れ替えた同じ議論で別の形も得られます。

2 次の行列式 は、 のとき と書き直せます。シューア補元の公式は、この見方をそのままブロックに広げたものです。

例:シューア補元で行列式を求める

次の行列を 2 次のブロックに区切ります。

左上のブロックは上三角なので、逆行列がすぐ求まります。

は単位行列で、残りの 2 つは次のとおりです。

を計算して から引くと、シューア補元は対角行列になります。

、 ですから です。4 次の行列式が、2 次の行列式 2 つの積に分かれました。

ブロック逆行列の公式

とシューア補元 がともに正則なら、逆行列は次の形で書けます。

覚えにくい式に見えますが、導き方は簡単です。さきほどの 3 つの積を逆順にして、それぞれの逆行列を取るだけで済みます。三角行列のほうは符号を変えるだけです。

右下に がそのまま現れるところが要点になります。大きな逆行列のうち一部だけが必要なとき、全体を求めずに取り出せます。

例:4 次の逆行列をブロックで求める

さきほどの例から右下のブロックだけを変えます。

、、 は変わらず、 だけが入れ替わっています。

を引くとシューア補元が単位行列になり、公式がとても軽くなります。

を代入すると、分数の出てこない逆行列が求まります。

実際に を計算すると単位行列になります。 ですから、成分がすべて整数になることとも辻褄が合います。

階数もシューア補元で分かれる

が正則なら、階数についても同じ形の式が成り立ちます。

ブロック消去で使った両端の行列が正則だからです。正則な行列を掛けても階数は動かず、ブロック対角の形になった時点で 2 つに分かれます。

が正則であることと が正則であることが同値、という言い方もできます。行列式の公式からも同じ結論に行き着きます。

対称ブロック行列の正定値性

対称行列を、対角のブロックが対称になるように区切ります。このとき正定値かどうかの判定も、シューア補元に分かれます。

が正定値であれば、 が正定値であることと が正定値であることが同値です。大きな行列の判定が、小さな 2 つの判定に落ちます。

正定値行列そのものの性質は、正定値行列と半正定値行列の記事で扱います。ここではシューア補元が判定の道具になる、という点だけを押さえてください。

連立方程式の消去として読む

シューア補元は、変数をまとめて消したあとに残る係数行列です。未知数を 2 組に分けて と を並べた形が にあたります。

第 1 式から を得て、第 2 式に代入します。

左辺の係数行列がシューア補元です。 の正則性が要るのは、 について解く必要があるからだと分かります。

大きな連立方程式を解くとき、この形で片方の変数群を先に消す方法がよく使われます。消したあとの小さな方程式を解き、あとから を復元します。

他の話題とのつながり

逆行列の公式を並べ替えると、ウッドベリーの公式が出てきます。 を と小さな逆行列で書く式で、階数の低い修正を加えたときの計算に使われます。

行列式にも対応する式があります。 という形で、ブロック行列の行列式を 2 通りに計算すれば導けます。

統計では、多変量正規分布の条件つき分散がシューア補元そのものです。共分散行列を 2 つの変数群に区切ると、片方を固定したときの残りのばらつきが の形で現れます。

計算の面でも効きます。大きな積や逆行列をブロックに分けて処理する方法は、並列計算やシュトラッセンの積の土台になっています。

よくある誤り

区切り方がそろっていない行列どうしは、ブロックのまま掛けられません。左の列の分け方と右の行の分け方が一致していることが条件です
ブロックは数ではないので、 と を入れ替えられません。公式を写すときは左右の順序をそのまま保ってください
が使えるのは と が可換な場合に限られます。一般の行列では値が食い違います
シューア補元の式には の正則性が要ります。 が正則でないときは のほうを軸にするか、区切り直して考えます
逆行列の右下に現れるのは ではなく です。 の逆行列がそのまま出てくるわけではありません
ブロック三角行列の行列式が対角ブロックの積になるのは、対角のブロックが正方行列のときだけです
区分けは連続した行と列をまとめて作ります。飛び飛びの行を集めたものは、そのままではブロックになりません
は割り算の記号ではありません。 を消去したあとに残る行列を指す書き方です

参考文献

Block matrix - Wikipedia
Schur complement - Wikipedia
Woodbury matrix identity - Wikipedia
Matrix determinant lemma - Wikipedia
Blockmatrix - Wikipedia(ドイツ語)
Schurkomplement - Wikipedia(ドイツ語)
Matrice par blocs - Wikipédia(フランス語)
Complément de Schur - Wikipédia(フランス語)
分块矩阵 - 维基百科(中国語)
舒尔补 - 维基百科(中国語)
Matriz por bloques - Wikipedia(スペイン語)
行列を縦横に区切って小さな行列の並びと見たものがブロック行列です。ブロックのまま足し引きや積ができる条件、ブロック対角・ブロック三角の行列式、消去して現れるシューア補元、それを使った行列式・逆行列・階数の公式、たすきがけの形が成り立たない反例を、計算例をつけて解説します。