1. システム制御における線形代数の基礎

線形代数の基礎事項に関しては、線形代数入門のサイトに良くまとまっているので参考にして欲しい。ここでは、システム制御論(現代制御理論)で良く使われる事項をまとめる。また、実践的にはPCのプログラムで処理することが多いので、一例としてScilabでの行列演算に関するコマンド例を示す。

行列の基本事項

行列\(\boldsymbol {A}\)のサイズが\(n \times l\)のとき、\( \boldsymbol{A} ( n \times l ) \)と書くことにする。従って、正方行列(行と列が同じサイズの行列)は\(\boldsymbol {A} ( n \times n )\)である。

1)対角行列:正方行列で対角要素以外の要素が全て\(0\)の行列 $$\boldsymbol{D} =\left[ \begin{array}{ccc}d_{11} & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & d_{nn} \end{array} \right]$$
2)単位行列:対角要素が全て\(1\)の対角行列 $$\boldsymbol{ I} =\left[ \begin{array}{ccc} 1 & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & 1 \end{array} \right]$$

行列の和算、乗算

3)行列の和算:2つの行列の和算は、両者が同一サイズのときに限って可能。 $$\boldsymbol{A} ( n \times n ) + \boldsymbol{B} ( n \times n ) = \boldsymbol{C} ( n \times n )$$ 第\(i\)行、第\(j\)列の各要素を加算する。

4)行列の乗算:乗算は\(\bf A\)の列の数と\(\bf B\)の行の数が等しい時に限って可能。$$\boldsymbol{A}( n \times l ) \boldsymbol{B}( l \times m ) = \boldsymbol{C}( n \times m )$$ となり、各要素\(c_{ij}\)は$$c_{ij} = \sum_{k=1}^{l} a_{ik} b_{kj}$$で計算できる。
一方がスカラのときには、\(\alpha \boldsymbol{A} \)で\(\boldsymbol{A}\)の全要素が\(\alpha\)倍される。

5)行列の乗算は、一般的に非可換(乗算の順番を入れ換えられない)である。\(\boldsymbol{AB} \ne \boldsymbol{BA}\)
\(\boldsymbol{AB = BA}\)となる場合は、\(\boldsymbol{A,B}\)は互いに可換であるという。

Scilabでの行列計算

Scilabコンソール上でのコマンド入力と実行結果の例を示す。
1)対角行列の生成
--> diag([1,2])
ans =1. 0.
  0. 2.

2)単位行列の生成
--> eye(3,3)
ans =1. 0. 0.
   0. 1. 0.
   0. 0. 1.

3)行列の和算
--> A=[1 2 ; 3 4]
A =1. 2.
 3. 4.
--> B=[5 6 ; 7 8]
B = 5. 6.
  7. 8.
--> A+B
ans = 6. 8.
   7. 12.

4)行列の乗算
--> A=[1 2 3; 2 3 4]
A =1. 2. 3.
  2. 3. 4.
--> B=[1 2; 2 3; 3 4]
B =1. 2.
 2. 3.
 3. 4.
--> A*B
ans =14. 20.
  15. 29.

5)行列の乗算は非可換\(\boldsymbol{AB} \ne \boldsymbol{BA}\)
--> B*A
ans =5. 8. 11.
  8. 13. 18.
   11. 18. 25.

行列式

行列式は正方行列だけに定義され、\(\left|\boldsymbol{A}\right|\)と書きスカラ量となる
\(\boldsymbol{A} ( n \times n ) \)の行列式は、次の式によって計算される。( \(n\)が4以上となると手計算では大変なので、このアルゴリズムに従ってプログラムを書いて計算すれば良い。)$$\left| \boldsymbol{A} \right| = \sum_{j=1}^{n} (-1)^{i+j} a_{ij}M_{ij}$$
※\(M_{kl}\)は\(\boldsymbol{A}\)の第\(k\)行と第\(l\)列を省いてできた\(\{n-1\} \times \{n-1\} \)次元の行列の行列式(小行列式)である。\(n-1\)次元の小行列式は\(n\)個できるので、さらに小行列式を計算する手順を繰り返す。

行列式の計算:(det関数を使用する。)
--> A=[1 2 3; 3 2 1; 2 3 1]
A =1. 2. 3.
  3. 2. 1.
 2. 3. 1.
--> det(A)
ans =
  12.

逆行列/転置行列

*逆行列
\(\boldsymbol{AX = I}\)を満たす正方行列\(\boldsymbol{X}\)を\(\boldsymbol{ A}\)の逆行列といい、\(\boldsymbol{A}^{-1}\)と書く。正方行列で行列式が0でない行列にだけ定義できる。
$$\boldsymbol{Ax=b}$$の代数方程式の解は、\(\boldsymbol{A}^{-1}\)が存在するとき$$\boldsymbol{ x=A}^{-1}\boldsymbol{b}$$と求まる。
元の式の両辺に\(\boldsymbol{A}^{-1}\)をかけることで、\(\boldsymbol{ A^{-1}Ax=A^{-1}b}\)となり、\(\boldsymbol{ I x=A^{-1}b}\)  よって、\(\boldsymbol{x=A^{-1}b}\)となる。
また、\(\boldsymbol{A^{-1}}\)が存在するとは、\(\left|\boldsymbol{A}\right| \ne 0\)ということである。
また、$$\boldsymbol{A} ^{-1} = \frac{adj (\boldsymbol{A})}{\left| \boldsymbol{ A} \right|}$$ \(adj(\boldsymbol{A})\)を\(\boldsymbol{A}\)の余因子行列(adj: adjoint)という。\(adj(\boldsymbol{A})\)の第\(i\)行\(j\)列目の要素を\(A_{ij}\)とすると、$$A_{ij} =(-1)^{i+j} M_{ji}$$ となる。
【例】\(\boldsymbol{A} ( 2 \times 2 ) \)のとき、$$adj(\boldsymbol{A}) = \left[ \begin{array}{cc}a_{22} & -a_ {12} \\ -a_{21} & a_{11} \end{array} \right]$$ となる。
※主な逆行列の性質
1)\(\boldsymbol{A} ( n \times n ) \),\(\boldsymbol{B} ( n \times n ) \)で、\(\left|\boldsymbol{A} \right| \ne 0\),\(\left|\boldsymbol{B} \right| \ne 0\)のとき、\(\boldsymbol{(AB)^{-1} = B^{-1}A^{-1}}\)である。
2)\(a\)がスカラのとき、\((a \boldsymbol{A} )^{-1} = \boldsymbol{A}^{-1} / a\)となる。
3)\(\left| \boldsymbol{A}^{-1 } \right| = 1/\left|\boldsymbol{A} \right| \)である。

*転置行列
\(\boldsymbol{A} = \{a_{ij}\}\)とした時、\(\boldsymbol{A}^{T} = \{a_{ji}\}\)、すなわち、\(\boldsymbol{A}\)の第\(j\)行\(i\)列目の要素を第\(i\)行\(j\)列目の要素とする行列\(\boldsymbol{A}^{T}\)を\(\boldsymbol{A}\)の転置行列という。


*逆行列の計算例

--> A=[1 1 1;1 0 0;1 1 0]
A =1. 1. 1.
  1. 0. 0.
  1. 1. 0.

--> A^-1    /* 逆行列の計算*/
ans =
 0. 1. 0.
 0. -1. 1.
 1. 0. -1

-> inv(A)    /* 逆行列の計算 invを使っても良い*/
ans =
 0. 1. 0.
 0. -1. 1.
 1. 0. -1

--> A*A^(-1)
ans =
 1. 0. 0.
 0. 1. 0.
 0. 0. 1.

*転置行列の計算
--> A=[1 2;3 4;5 6]
A =1. 2.
  3. 4.
  5. 6.

--> A'   /* 転置行列の計算*/
ans =
  1. 3. 5.
  2. 4. 6.

行列のランク

ランクは重要な概念で、システム制御の中でよく表れる。
*ベクトルの線形独立性
\(n\)次元の\(l\)個のベクトル\(\boldsymbol{x_i}\)( \(i=1\sim l\))が線形独立であるとは、スカラの係数\(a_i\)( \(i=1 \sim l\))により、$$a_1 \boldsymbol{x_1} + a_2 \boldsymbol{x_2} + \cdots + a_l \boldsymbol{x_ l} =0 $$を作ったとき、\(a_1 = a_2 =\cdots =a_l =0\)より他に解がないことをいう。そうでないときは、線形従属である。
\(\boldsymbol{x_i}\)( \(i=1\sim l\))が線形従属であると、1つ以上の0でない係数がある。これを\(a_k\)とすると、$$\boldsymbol {x_ k} = -\frac{a_1}{a_k}\boldsymbol{x_ 1} - \cdots \it - \frac{a_{k-1}}{a_k}\boldsymbol{x_{k-1}} $$ $$ - \frac{a_{k+1}}{a_k}\boldsymbol{x_{ k+1}} - \cdots -\frac{a_{l}}{a_k}\boldsymbol{x_l}$$と変形でき、ベクトル\(\boldsymbol{x_ k}\)は他のベクトルの線形結合(他のベクトルのスカラ倍の和)と表せる。
線形独立であるためには、\(n \ge l\)が必要で、\(n\)次元ベクトルにおいては、\(n+1\)本以上のベクトルは線形従属となる。

*行列のランク
行列からいくつかの行と列を除いた残りの要素でつくった、\(r \times r\)次元の正方行列の行列式を\(r\)次元の小行列式という。
\(\boldsymbol{A} (n \times n))\)の\(r+1\)次元の小行列式がすべて0で、かつ、\(r\)次元の小行列式の中に0でないものがあるとき、\(\boldsymbol{A}\)のランクを\(r\)といい、\(rank(\boldsymbol{A} )=\it r\)と書く。
【例】$$\boldsymbol{A} = \left[ \begin{array}{cc} 1 & 2 \\ 2 & 4 \\3 & 6 \end{array} \right]$$ この2次元の小行列式は、3つあるが、\(\left| \begin{array}{cc} 1 & 2 \\2 & 4 \end{array}\right|=0\),\(\left| \begin{array}{cc} 1 & 2 \\3 & 6 \end{array}\right|=0\),\(\left| \begin{array}{cc} 2 & 4 \\3 & 6 \end{array}\right|=0\)と全て0であるが、1次元の小行列式(すなわち各要素)は0でないものがあるので、\(rank(\boldsymbol{A} )=1\)である。
ランクの計算③の場合、3次元の小行列式\(\left|\boldsymbol{A}\right|\)が\(\left|\boldsymbol{A}\right|=-2 \ne 0\)で\(rank(\boldsymbol{A})=3\)とわかる。

※\(\boldsymbol{A} (n \times n)\)のとき、\(rank(\boldsymbol{A})=n\)であるための必要十分条件は、\(\left| \boldsymbol{A} \right| \ne 0\)である。

*ランクの計算

--> A=[1 2; 2 4; 3 6]
A =1. 2.
  2. 4.
  3. 6.
--> rank(A)
ans =
  1.


--> A=[1 1; 2 0; 3 1]
A =1. 1.
  2. 0.
  3. 1.
--> rank(A)
ans =
  2.


--> A=[1 1 0; 2 0 0; 3 1 1]
A =1. 1. 0.
  2. 0. 0.
  3. 1. 1.
--> rank(A)
ans =
  3.
--> det(A)
ans =
-2.0000000