ここでは,大学で習う線形代数についての基本を説明していきます.また,対象は特に問いません.数学が苦手な方でも理解しやすいような例を利用しているので安心して読み進めてください.なお,当サイトの線形代数の進め方について知りたい方は以下をクリック.
この回では,連立一次方程式をクラメルの公式を使って解く方法について説明していきます.
キーワード:余因子展開、余因子行列、クロネッカーのデルタ、クラメルの公式
本題の前に
クラメルの公式には,余因子展開に関係する考え方を使います.なので,余因子展開なんて知るかよという方は先に以下を読むことをおすすめします.
余因子行列
余因子行列とは,以下の行列のことを指します.
Aをn次正方行列,\(D_{ij}\)をAの(i, j)余因子,iとjはそれぞれ行と列の番号とする.このとき(i, j)余因子のiとjを入れ替えた以下の行列を定義する.
\[ adjA = \begin{pmatrix} D_{11} & D_{21} & D_{31} & ・・・& D_{n1} \\ D_{12} & D_{22} & D_{32} & ・・・& D_{n2} \\ ・ & ・ & ・ & ・・・ & ・ \\ D_{1n} & D_{2n} & D_{3n} & ・・・& D_{nn} \end{pmatrix} \]
上のadjはadjugateつまり余因子行列の略です.
重要なのは,各余因子の行と列が逆になっている要素で構成されている点です.
具体例で見ていきましょう.以下の例を使います.
\[ \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{pmatrix} \]
まず、各小行列式を求めます.
\[ det(\tilde{A_{11}}) = \begin{vmatrix} 5 & 6 \\ 8 & 9 \end{vmatrix} = -3 det(\tilde{A_{12}}) = \begin{vmatrix} 4 & 6 \\ 7 & 9 \end{vmatrix} = -6 det(\tilde{A_{13}}) = \begin{vmatrix} 4 & 5 \\ 7 & 8 \end{vmatrix} = -3 \]
\[ det(\tilde{A_{21}}) = \begin{vmatrix} 2 & 3 \\ 8 & 9 \end{vmatrix} = -6 det(\tilde{A_{22}}) = \begin{vmatrix} 1 & 3 \\ 7 & 9 \end{vmatrix} = -12 det(\tilde{A_{23}}) = \begin{vmatrix} 1 & 2 \\ 7 & 8 \end{vmatrix} = -6 \]
\[ det(\tilde{A_{31}}) = \begin{vmatrix} 2 & 3 \\ 5 & 6 \end{vmatrix} = -3 det(\tilde{A_{32}}) = \begin{vmatrix} 1 & 3 \\ 4 & 6 \end{vmatrix} = -6 det(\tilde{A_{33}}) = \begin{vmatrix} 1 & 2 \\ 4 & 5 \end{vmatrix} = -3 \]
次に各余因子を求めます.
\(D_{11} = (-1)^{1+1}det(\tilde{A_{11}}) = -3 D_{12} = (-1)^{1+2}det(\tilde{A_{12}}) = 6 D_{13} = (-1)^{1+3}det(\tilde{A_{13}}) = -3 \)
\(D_{21} = (-1)^{2+1}det(\tilde{A_{21}}) = 6 D_{22} = (-1)^{2+2}det(\tilde{A_{22}}) = -12 D_{23} = (-1)^{2+3}det(\tilde{A_{23}}) = 6 \)
\(D_{31} = (-1)^{3+1}det(\tilde{A_{31}}) = -3 D_{32} = (-1)^{3+2}det(\tilde{A_{32}}) = 6 D_{33} = (-1)^{3+3}det(\tilde{A_{33}}) = -3 \)
練習のために各符号 \(((-1)^{i+j})\) を数式に含めた状態で計算していますが,この符号は,i=j=1のときは必ず1になるということさえ覚えておけば,後は-1,1,-1と繰り返すだけなので意識して覚える必要はなくなります.
これで余因子行列の準備は整ったので,実際に行列を作っていきましょう.ここでもう一度注意点ですが,各余因子の行と列が逆になっている要素で構成されている点に気を付けましょう.
つまり,(1, 2)成分には\(D_{21}\)が,(3, 2)成分には\(D_{23}\)が使われるということです.
\[ adjA = \begin{pmatrix} D_{11} & D_{21} & D_{31} \\ D_{12} & D_{22} & D_{32} \\ D_{13} & D_{23} & D_{33} \end{pmatrix} = \begin{pmatrix} -3 & 6 & -3 \\ 6 & -12 & 6 \\ -3 & 6 & -3 \end{pmatrix} \]
以上が余因子行列です.何だかクラメルの公式の計算が面倒な匂いがしますね…
余因子行列と逆行列の関係
余因子行列と行列式を使って以下の式が成り立ちます.
Aは正則行列とする.
\(A^{-1} = \frac{adjA}{det(A)} \)
上の式をさくっと証明してみましょう.
まず式の意味は,Aが正則であれば余因子行列÷行列式はAの逆行列になるということですね.
ここで,余因子展開から派生する以下の式を定義します.
Aはn次正方行列,aをAの各要素,Dを各余因子とする.
1.\(a_{i1}D_{j1} + a_{i2}D_{j2} + ・・・+a_{in}D_{jn} = δ_{ij}det(A)\)
2.\(a_{1i}D_{1j} + a_{2i}D_{2j} + ・・・+a_{ni}D_{nj} = δ_{ij}det(A)\)
上のδ(デルタ)はクロネッカーのデルタと呼ばれるもので以下のように定義されます.
\[ δ_{ij} = \left \{ \begin{array}{} 1 (i=j) \\ 0 (i≠j) \end{array} \right . \]
この派生式について少し考えてみましょう.
例えば,1番目の式においてi = jつまり,行と列の番号が等しいときは,右辺はクロネッカーのデルタ部分が1になるので,det(A)になります.このとき,第i行に関する余因子展開と同じ式になります.
\(a_{i1}D_{i1} + a_{i2}D_{i2} + ・・・+a_{in}D_{in} = det(A)\)
2番目の式も同様で,i=jのときは,第j列に関する余因子展開と同じ式になります.
\(a_{1j}D_{1j} + a_{2j}D_{2j} + ・・・+a_{nj}D_{nj} = det(A)\)
逆にi≠jのときは,1,2番目の両方の式の右辺は,クロネッカーのデルタ部分が0となるので0になります.
これらの事実を頭に入れて証明に入ります.
以下の式を考えます.つまり,n次正方行列Aとその余因子行列との積です.
\[ AadjA = \begin{pmatrix} a_{11} & a_{12} & ・・・& a_{1n} \\ a_{21} & a_{22} & ・・・& a_{2n} \\ ・&・&・・・&・ \\ a_{n1} & a_{n2} & ・・・& a_{nn} \end{pmatrix} \begin{pmatrix} D_{11} & D_{21} & ・・・ & D_{n1} \\ D_{12} & D_{22} & ・・・ & D_{n2} \\ ・&・&・・・&・ \\ D_{1n} & D_{2n} & ・・・& D_{nn}\end{pmatrix} \]
上の積を実際に計算してみましょう.例えば,Aの第一行と余因子行列の各列との積をとると,
\( AadjA(1, 1) = a_{11}D_{11}+a_{12}D_{12}+・・・+a_{1n}D_{1n}\)
\( AadjA(1, 2) = a_{11}D_{21}+a_{12}D_{22}+・・・+a_{1n}D_{2n}\)
・・・
\( AadjA(1, n) = a_{11}D_{n1}+a_{12}D_{n2}+・・・ +a_{1n}D_{nn} \)
となりますが,先ほどの派生式をここで利用すると,(1, 1)成分は第一行に関する余因子展開となるのでdet(A)になります.では,それ以降の成分はどうでしょうか?これらは全て行(i)と列(j)の数が異なるので0になります.つまり,これらは以下のようになります.
\(AadjA(1, 1) = det(A),AadjA(1, 2) = 0,・・・,AadjA(1, n) = 0\)
同様に第二行,三行と積をとっていくと,
\[ AadjA = \begin{pmatrix} a_{11} & a_{12} & ・・・& a_{1n} \\ a_{21} & a_{22} & ・・・& a_{2n} \\ ・&・&・・・&・ \\ a_{n1} & a_{n2} & ・・・& a_{nn} \end{pmatrix} \begin{pmatrix} D_{11} & D_{21} & ・・・ & D_{n1} \\ D_{12} & D_{22} & ・・・ & D_{n2} \\ ・&・&・・・&・ \\ D_{1n} & D_{2n} & ・・・& D_{nn}\end{pmatrix} = \begin{pmatrix} det(A) & 0 & ・・・& 0 \\ 0 & det(A) & ・・・& 0 \\ ・&・&・・・&・ \\ 0 & 0 & ・・・& det(A) \end{pmatrix} \]
となり,対角成分のみがdet(A)でそれ以外が0になります.
つまり,
\( AadjA = det(A)I \)
が成り立ちました.ここで,両辺をdet(A)で割ると(Aは正則なのでdet(A)≠0),
\( A\frac{adjA}{det(A)} = I・・・(i)\)
同様な方法で,(adjA)Aと掛ける順番を逆にすると(計算過程は上の導出を参考)
\( \frac{adjA}{det(A)}A = I・・・(ii)\)
が成り立ちます.(i)と(ii)から以下の式が成り立ちます.
\( A\frac{adjA}{det(A)} = \frac{adjA}{det(A)}A = I \)
これは馴染みのある正則条件ですね.つまり,Aの逆行列は以下であることを指しています.
\( A^{-1} = \frac{adjA}{det(A)} \)
これで証明完了です.証明自体は特に暗記する必要はないですが,ロジックの流れは簡単で良いので理解しましょう.クラメルの公式では,この式を使うことになります.
クラメルの公式
ようやく本題に入っていきます.
まず,Aをあるn次正方行列,bを連立一次方程式の各方程式の右辺の列ベクトル,xを未知数の列ベクトルとすると,連立一次方程式は以下で表現できましたね.
Ax = b
このときAが正則であるとすると,この式の両辺にAの逆行列を掛けて,
\(A^{-1}Ax = A^{-1}b \)
\(A^{-1}A = I\)より,
\(x = A^{-1}b\)
ここで,先ほどの式\(A^{-1} = \frac{adjA}{det(A)} \)を代入できます.
\(x = \frac{adjA}{det(A)}b \)
この式を変形すると以下のクラメルの公式を定義できます.
Aは正則であるとする.
\(x_{j} = \frac{1}{det(A)}\begin{vmatrix} a_{11} & a_{12} & ・・・ & b_{1} & ・・・& a_{1n} \\ a_{21} & a_{22} & ・・・ & b_{2} & ・・・& a_{2n} \\ ・&・&・・・&・&・・・&・ \\ a_{n1} & a_{n2} & ・・・& b_{n} &・・・& a_{nn} \end{vmatrix} (j=1,2,・・・,n)\)
ただし,jは列ベクトルがある列の番号とする.
上の式の意味は,各連立一次方程式の解は,det(A)の各列に,順に列ベクトルbを入れていった行列式を元のdet(A)で割ると求まるということです.
この式がなぜ成り立つのか簡単に説明します.
まず, 元の式\(x = \frac{adjA}{det(A)}b \)を少し展開してみると,
\[ x = \frac{adjA}{det(A)}b = \frac{1}{det(A)}\begin{pmatrix} D_{11} & D_{21} & ・・・& D_{n1} \\ D_{12} & D_{22} & ・・・ & D_{n2} \\ ・&・&・・・&・\\ D_{1n} & D_{2n} & ・・・ & D_{nn} \end{pmatrix} \begin{pmatrix} b_{1} \\ b_{2} \\ ・ \\ b_{n} \end{pmatrix}\]
\[= \frac{1}{det(A)}\begin{pmatrix} b_{1}D_{11} + b_{2}D_{21}+・・・+b_{n}D_{n1} \\ b_{1}D_{12} +b_{2}D_{22}+ ・・・ +b_{n}D_{n2} \\ ・ \\ b_{1}D_{1n}+b_{2}D_{2n}+・・・+ b_{n}D_{nn} \end{pmatrix} \]
ここで上式にある行列部分(det(A)は含まない)の各成分の行をiとすると,その成分はdet(A)のi=jである列jを,列ベクトルbに置き換えた行列式の値と等しいです.
ここに関して実際に具体例で見ていきましょう.以下の連立一次方程式を考えます.
\[ \left \{ \begin{array}{} x_{1} + 2x_{2} = 1 \\ 3x_{1} + 4x_{2} = 1 \end{array} \right . \]
係数行列Aと,bは以下です.
\[ A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix},b = \begin{pmatrix} 1 \\ 1 \end{pmatrix}\]
ちなみに,det(A) = 4-6 = -2 ≠ 0なので,Aは正則です.クラメルの公式を使うにはAが必ず正則である必要があります.
また余因子行列は
\[ adjA = \begin{pmatrix} D_{11} & D_{21} \\ D_{12} & D_{22} \end{pmatrix} = \begin{pmatrix} 4 & -2 \\ -3 & 1 \end{pmatrix}\]
ここで(adjA)bを計算すると
\[ adjAb = \begin{pmatrix} 4 & -2 \\ -3 & 1 \end{pmatrix} \begin{pmatrix} 1 \\ 1 \end{pmatrix} = \begin{pmatrix} 2 \\ -2 \end{pmatrix}\]
となります.そしてこの各成分は,det(A)の各列を列ベクトルbで入れ替えた行列式の値に等しいはずです.計算してみると
det(A)の第1列を列ベクトルbと入れ替える(このとき,adjAbの成分は第1行).
\[ adjAb(1,1) = \begin{vmatrix} 1 & 2 \\ 1 & 4 \end{vmatrix} = 2 \]
det(A)の第2列を列ベクトルbと入れ替える(このとき,adjAbの成分は第2行).
\[ adjAb(2,1) = \begin{vmatrix} 1 & 1 \\ 3 & 1 \end{vmatrix} = -2 \]
確かに値が等しいです.
以上がクラメルの公式の説明です.
アルゴリズム
クラメルの公式が分かったところで,これを利用して連立一次方程式を解くためのアルゴリズムを以下に示します.
1.係数行列Aが正則であるかどうか,行列式を使って調べる.値が0の場合,クラメルの公式は使えない.0でない場合,2へ進む.
2.以下のクラメルの公式を適用する.つまり,det(A)を列ごとに見て,順に列ベクトルbで入れ替えていき,その行列式を元のdet(A)で割る.なお,det(A)は1で既に計算している.
\(x_{j} = \frac{1}{det(A)}\begin{vmatrix} a_{11} & a_{12} & ・・・ & b_{1} & ・・・& a_{1n} \\ a_{21} & a_{22} & ・・・ & b_{2} & ・・・& a_{2n} \\ ・&・&・・・&・&・・・&・ \\ a_{n1} & a_{n2} & ・・・& b_{n} &・・・& a_{nn} \end{vmatrix} \)
ただし,jは列ベクトルがある列の番号とする.
では,クラメルの公式を使い,以下の連立一次方程式を解いてみます.
\[ \left \{ \begin{array}{} x_{1} + x_{2} + x_{3} = 3 \\ 2x_{1} + x_{2} + 2x_{3} = 5 \\ 4x_{1} + 2x_{2} + 6x_{3} = 12 \end{array} \right . \]
係数行列Aは以下です.
\[A = \begin{pmatrix} 1 & 1 & 1 \\ 2 & 1 & 2 \\ 4 & 2 & 6 \end{pmatrix} \]
この行列式の値を求めます.サラスの方法を適用します.
\[det(A) = \begin{vmatrix} 1 & 1 & 1 \\ 2 & 1 & 2 \\ 4 & 2 & 6 \end{vmatrix} = 6+4+8 – (4+12+4) = 18 – 20 = -2 ≠ 0\]
よって正則なので,クラメルの公式を利用できます.また,列ベクトルbは
\[b = \begin{pmatrix} 3 \\ 5 \\ 12 \end{pmatrix} \]
なので,各解を求めていくと
\[x_{1} = \frac{1}{det(A)}\begin{vmatrix} 3 & 1 & 1 \\ 5 & 1 & 2 \\ 12 & 2 & 6 \end{vmatrix} = -\frac{1}{2}\{18+10+24-(12+30+12)\} = -\frac{1}{2}(52-54)=1\]
\[x_{2} = \frac{1}{det(A)}\begin{vmatrix} 1 & 3 & 1 \\ 2 & 5 & 2 \\ 4 & 12 & 6 \end{vmatrix} = -\frac{1}{2}\{30+24+24-(20+36+24)\} = -\frac{1}{2}(78-80)=1\]
\[x_{3} = \frac{1}{det(A)}\begin{vmatrix} 1 & 1 & 3 \\ 2 & 1 & 5 \\ 4 & 2 & 12 \end{vmatrix} = -\frac{1}{2}\{12+12+20-(12+10+24)\} = -\frac{1}{2}(44-46)=1\]
となり,無事解が求まりました.
実際はクラメルの公式はこのように計算が面倒なので,一般的に連立一次方程式を解くときは掃き出し法を使った方が良いです.
ですが,クラメルの公式は線形代数の教科書に載っているので,理論の部分は理解しておくようにしましょう.
まとめ
1.クラメルの公式を利用して連立一次方程式を解く方法は以下である.
(i) 係数行列Aが正則であるかどうか,行列式を使って調べる.値が0の場合,クラメルの公式は使えない.0でない場合,2へ進む.
(ii) 以下のクラメルの公式を適用する.なお,det(A)は(i)で既に計算している.
\(x_{j} = \frac{1}{det(A)}\begin{vmatrix} a_{11} & a_{12} & ・・・ & b_{1} & ・・・& a_{1n} \\ a_{21} & a_{22} & ・・・ & b_{2} & ・・・& a_{2n} \\ ・&・&・・・&・&・・・&・ \\ a_{n1} & a_{n2} & ・・・& b_{n} &・・・& a_{nn} \end{vmatrix} \)
ただし,jは列ベクトルがある列の番号とする.
練習問題
1.以下の連立一次方程式をクラメルの公式によって解け.
\[ \left \{ \begin{array}{} x_{1} + x_{2} + x_{3} = 4 \\ 2x_{1} + x_{2} + x_{3} = 6 \\ x_{1} -x_{2} + 2x_{3} = 3 \end{array} \right . \]
解答はこちら → 練習問題解答
コメント