見出し画像

第4回 これだけ!掃き出し法で逆行列を求めよう(線形代数)

 前回は2次行列の逆行列の求め方について解説しました。

今回は3次行列の逆行列の求め方と、逆行列の工学分野での活用例を学びましょう。

1.その前に…行列の基本変形を学ぼう

 話の腰を折るようですが、行列の変形方法を知らないと掃き出し法が使えないので、まずは行列の変形方法を知りましょう。
 行列の基本変形には以下の3つの操作があります。

①2つの行を入れかえる
②1つの行にスカラー倍
③1つの行に別の行をスカラー倍して加算or減算

 何を言ってるんだ?となるかもしれませんが、実は皆さんすでにやり方を知っています。それを今から解説します。まず例として次の連立方程式を考えます。

$$
\begin{cases}
x+2y+3z=10\\
4x+5y+6z=20\\
7x+8y+9z=30
\end{cases}
$$

これを行列で表すと次のようになりますね。

$$
\begin{bmatrix}
1&2&3\\
4&5&6\\
7&8&9
\end{bmatrix}
\begin{bmatrix}
x\\y\\z
\end{bmatrix}
=
\begin{bmatrix}
10\\20\\30
\end{bmatrix}
$$

今回はこの行列をいじりましょうか。

①2つの行を入れかえる

 例えば1行目と3行目を入れ替えるとこうなります。

$$
\begin{bmatrix}
7&8&9\\
4&5&6\\
1&2&3
\end{bmatrix}
\begin{bmatrix}
x\\y\\z
\end{bmatrix}
=
\begin{bmatrix}
30\\20\\10
\end{bmatrix}
$$

右辺と左辺の行がそれぞれ入れ替わってますね。そんなことできるの?!と思うかもしれませんが、連立方程式に置き換えると下のような連立式と同じなんです。

$$
\begin{cases}
7x+8y+9z=30\\
4x+5y+6z=20\\
x+2y+3z=10
\end{cases}
$$

はい。式の1個目と3個目を入れ替えただけです。これとまったく同じことをしています。これなら、なんだ当たり前じゃん、ってなりますよね?

②1つの行にスカラー倍

 例えば2行目の要素を2倍してみましょう。こうなります。

$$
\begin{bmatrix}
1&2&3\\
2・4&2・5&2・6\\
7&8&9
\end{bmatrix}
\begin{bmatrix}
x\\y\\z
\end{bmatrix}
=
\begin{bmatrix}
10\\2・20\\30
\end{bmatrix}
$$

これは連立方程式でいうところの下の式と同じことをやっています。

$$
\begin{cases}
x+2y+3z=10\\
2・4x+2・5y+2・6z=2・20\\
7x+8y+9z=30
\end{cases}
$$

2つ目の式を2倍しているだけですね。

③1つの行に別の行をスカラー倍して加算or減算

 本命はこの動作です。例として、1行目を7倍して、3行目から引いてみましょう。こうなります。

$$
\begin{bmatrix}
1&2&3\\
4&5&6\\
7-1・7&8-2・7&9-3・7
\end{bmatrix}
\begin{bmatrix}
x\\y\\z
\end{bmatrix}
=
\begin{bmatrix}
10\\20\\30-10・7
\end{bmatrix}
$$

計算すると、

$$
\begin{bmatrix}
1&2&3\\
4&5&6\\
0&-6&-12
\end{bmatrix}
\begin{bmatrix}
x\\y\\z
\end{bmatrix}
=
\begin{bmatrix}
10\\20\\-40
\end{bmatrix}
$$

となります。これを連立方程式に直すと、下の式のように、1つ目の式を7倍して、3つ目の式に代入する動作と同じになりますね。

$$
\begin{cases}
x+2y+3z=10\\
4x+5y+6z=20\\
(7-1・7)x+(8-2・7)y+(9-3・7)z=30-10・7
\end{cases}
$$

 以上で3つの基本変形をマスターしたわけですが、注意すべきこととしては、
・列を入れ替えたり、列をスカラー倍することはできない
・変形は左辺と右辺でそれぞれ連動して行う
ということですね。頭がこんがらがったら連立方程式の形を想像してみましょう。

何を目指して変形をすればいいの?

 今回例に出したのは下の式のように書き換えられると思います。

$$
\bold A \bold X=\bold B
$$

この連立方程式において私たちが求めたいのは$${\bold X}$$ですよね?$${\bold X}$$を求めたいならば、その隣にある行列$${\bold A}$$が$${\bold I}$$になるように変形していきましょう。なぜなら、変形していった結果下のような式になるとき、

$$
\bold I \bold X=\bold C
$$

ここで左辺を計算すると、

$$
 \bold X=\bold C
$$

となるため行列$${\bold A}$$が$${\bold I}$$になるように必死こいて変形した結果、行列$${\bold B}$$の成れの果てである行列$${\bold C}$$が求めていた答えにいつの間にかなっているのです。このように行列の基本変形を用いて連立方程式の解を求める方法を掃き出し法といいます。
 とにかく$${\bold I \bold X=\bold C}$$の形を目指して変形しましょう!
 上の式でなぜ単位行列$${\bold I}$$が消えるのかわからない方は、ついでに第二回の内容を復習しておきましょう。


2.掃き出し法を使って逆行列を求めよう

①前置き

 逆行列$${\bold A^{-1}}$$を求めたいときも上の節で述べた掃き出し法の考え方がそのまま適用できます。逆行列の定義の式から、

$$
\bold A \bold A^{-1}=\bold I
$$

ここで左辺の$${\bold A}$$が単位行列になるように変形した結果、右辺の単位行列が$${\bold C}$$になったとすると、

$$
\bold I \bold A^{-1}=\bold A^{-1}=\bold C
$$

となり、単位行列を変形した結果生まれた行列$${\bold C}$$が逆行列となるのです。このように掃き出し法を用いて逆行列を求めるわけです。

②掃き出し法の計算方法

 例題とともに説明します。以下の行列$${A}$$の逆行列を求めたいとします。

$$
\bold A=
\begin{bmatrix}
1&2&1\\
2&1&0\\
1&1&2
\end{bmatrix}
$$

この時、行列$${A}$$と単位行列を下のように左右に並べます。

$$
\Bigg\lbrack
\begin{array}{ccc|ccc}
1&2&1&1&0&0\\
2&1&0&0&1&0\\
1&1&2&0&0&1
\end{array}
\Bigg\rbrack
$$

ここから行列の変形をしていきます。まずは3行目を[0,0,1]にするところから始めましょう。

(1)3行目から1行目を引く
引くと次のように表せます。

$$
\Bigg\lbrack
\begin{array}{ccc|ccc}
1&2&1&1&0&0\\
2&1&0&0&1&0\\
1-1&1-2&2-1&0-1&0-0&1-0
\end{array}
\Bigg\rbrack
$$

計算して、

$$
\Bigg\lbrack
\begin{array}{ccc|ccc}
1&2&1&1&0&0\\
2&1&0&0&1&0\\
0&-1&1&-1&0&1
\end{array}
\Bigg\rbrack
$$

ですね。

(2)1行目を2倍して2行目から引く

$$
\Bigg\lbrack
\begin{array}{ccc|ccc}
1&2&1&1&0&0\\
2-1・2&1-2・2&0-1・2&0-1・2&1-0・2&0-0・2\\
0&-1&1&-1&0&1
\end{array}
\Bigg\rbrack
$$

これを計算すると、

$$
\Bigg\lbrack
\begin{array}{ccc|ccc}
1&2&1&1&0&0\\
0&-3&-2&-2&1&0\\
0&-1&1&-1&0&1
\end{array}
\Bigg\rbrack
$$

と計算できます。次回以降は途中式は省きますね。

(3)2行目を$${-\frac{1}{3}}$$倍する

$$
\Bigg\lbrack
\begin{array}{ccc|ccc}
1&2&1&1&0&0\\
0&1&\frac{2}{3}&\frac{2}{3}&-\frac{1}{3}&0\\
0&-1&1&-1&0&1
\end{array}
\Bigg\rbrack
$$

(4)3行目に2行目を足す

$$
\Bigg\lbrack
\begin{array}{ccc|ccc}
1&2&1&1&0&0\\
0&1&\frac{2}{3}&\frac{2}{3}&-\frac{1}{3}&0\\
0&0&\frac{5}{3}&-\frac{1}{3}&-\frac{1}{3}&1
\end{array}
\Bigg\rbrack
$$

(5)3行目を$${\frac{3}{5}}$$倍する

$$
\Bigg\lbrack
\begin{array}{ccc|ccc}
1&2&1&1&0&0\\
0&1&\frac{2}{3}&\frac{2}{3}&-\frac{1}{3}&0\\
0&0&1&-\frac{1}{5}&-\frac{1}{5}&\frac{3}{5}
\end{array}
\Bigg\rbrack
$$

これで3行目を整理できました。次は2行目を[0,1,0]にしましょう。

(6)3行目を$${\frac{2}{3}}$$倍して2行目から引く

$$
\Bigg\lbrack
\begin{array}{ccc|ccc}
1&2&1&1&0&0\\
0&1&0&\frac{4}{5}&-\frac{1}{5}&-\frac{2}{5}\\
0&0&1&-\frac{1}{5}&-\frac{1}{5}&\frac{3}{5}
\end{array}
\Bigg\rbrack
$$

(7)3行目と2行目の2倍を1行目から引く

$$
\Bigg\lbrack
\begin{array}{ccc|ccc}
1&0&0&-\frac{2}{5}&\frac{3}{5}&\frac{1}{5}\\
0&1&0&\frac{4}{5}&-\frac{1}{5}&-\frac{2}{5}\\
0&0&1&-\frac{1}{5}&-\frac{1}{5}&\frac{3}{5}
\end{array}
\Bigg\rbrack
$$

これで左側を単位行列にすることができました。この時の右側の行列が求めたかった逆行列$${\bold A^{-1}}$$になります。

$$
\bold A^{-1}=
\begin{bmatrix}
-\frac{2}{5}&\frac{3}{5}&\frac{1}{5}\\
\frac{4}{5}&-\frac{1}{5}&-\frac{2}{5}\\
-\frac{1}{5}&-\frac{1}{5}&\frac{3}{5}
\end{bmatrix}
$$

この方法であれば行列$${A}$$が何次の行列であろうと逆行列を求めることができますね。

3.逆行列って結局何に使うの?

 前回と今回を通じて、逆行列は連立方程式を効率的に解くために有効であることをお伝えしましたが、いうて連立方程式解く意味ある?連立方程式って役に立つの?と思う方もいるかと思います(むしろ積極的に疑問に思ってほしいですが)。安心してください、役に立ちますよ。
 今回は私の仕事に近いトピックを選ぼうと思います。私は機械設計の中でも自動車のボディーの設計に携わっています。その仕事の中で、車に力が加わった時に自分の設計した部品たちがどういった変形をするのかを知りたいときがあります。変形した部品同士がぶつかるのが大変よろしくないのです。(変にこすれて塗装が剥げたり、カチャカチャ異音がするとよろしくないのです。)
 でも実際の部品ができるまでは待ってられない。そういう時に使えるのがコンピュータによる物理シミュレーションです。部品を何らかの法則でモデル化して、そこに外力を設定してモデル通りにシミュレーションすることで部品の2次元的あるいは3次元的な変形を見ることができます。代表的なものに有限要素法、境界要素法などがあります。この有限要素法について少し掘り下げましょう。
 下の絵は、、、地面に置かれた豆腐です。横から見た豆腐です。この豆腐の上の方を指でつつくとどうなるでしょうか?

下のようにぐにゃっと曲がりますね。

有限要素法でこの豆腐の動きをシミュレーションしたいとなったら、まずは豆腐を小さな要素に分割します。下の画像は豆腐を9つの要素に分割しています。

1個1個の要素(黒い点)は位置のデータ$${u}$$と周囲から受ける力$${F}$$のデータを持っており、要素と要素の間は何かバネのようなものでつながれていると思ってください。このとき2つの変数の間には次式が成り立ちます。

$$
\bold{Ku}=\bold F
$$

これはフックの法則ですね。もうちょい詳しく書くと、

$$
\begin{bmatrix}
k_{11}&k_{12}&\dots &k_{18}&k_{19}\\
k_{21}&k_{22}&\dots &k_{28}&k_{29}\\
\dots &\dots &\dots &\dots &\dots \\
k_{81}&k_{82}&\dots &k_{88}&k_{89}\\
k_{91}&k_{92}&\dots &k_{98}&k_{99}\\
\end{bmatrix}
\begin{bmatrix}
u_{1}\\u_{2}\\\dots\\u_{8}\\u_{9}
\end{bmatrix}
=
\begin{bmatrix}
F_{1}\\F_{2}\\\dots\\F_{8}\\F_{9}
\end{bmatrix}
$$

と書けます。$${F_{i}}$$は要素$${i}$$が受ける力ですし、$${u_{i}}$$は要素$${i}$$の位置情報を示すわけです。$${k_{ij}}$$は要素$${i}$$が要素$${j}$$からどれくらい変形を抑圧されるかを示すパラメータです。$${k_{ij}}$$の集合である$${\bold K}$$を剛性マトリクスと呼びます。
 いま$${\bold F}$$と$${\bold K}$$が分かっているとき、$${\bold u}$$を知りたいです。さて逆行列をどう活用するかもうお分かりですね?$${\bold K}$$の逆行列と$${\bold F}$$をかけ合わせれば、各要素の変形量が分かります。めでたしめでたし。。。
 とはなかなかいきません。下の画像を見てもらえばわかるように、豆腐ってこんなにギザギザに変形しないですよね?

 要素分割の個数が少ないとこのように精度が低い結果が出てしまいます。精度を上げるためには要素の個数を上げる必要があるのですが、例えば要素を9個ではなく、10000個に分割するとしましょう。そうすると剛性マトリクスはどんな行列になるでしょうか?$${10000\times 10000}$$の行列です!そんな膨大な要素数の逆行列を求めたいですか?私は求めたくありません。どうやらコンピュータも同じ意見のようで、コンピュータといえど行列の桁数が増えると逆行列を求めるための計算時間が長くなるようで、逆行列を求めるより効率的な手法がとられるようです。私はその辺の専門ではありませんのであくまで噂ということで。。。
 いずれにせよ、これで逆行列がどのように世の中の役に立っているかなんとなく理解してもらえたと思います。私自身、線形代数はこういった役に立つものの宝庫なんだなあとこのブログを書いていて改めて思い知らされました。

まとめ

 今回は逆行列の便利な計算方法と逆行列の活用法について解説しました。

このブログは理工系として必要最低限の会話ができる知識をお伝えしていますが、書籍と合わせて勉強することでより効率的にそしてさらに深く勉強が進むかと思います。まずこちらの書籍を手に取ってみて、並行して学んでみるのもいいかもしれません。

それから今回紹介した有限要素法ですが、より詳しく知りたい!という方はこちらの書籍を参考にしてみるといいかもしれません。有限要素法ももちろんですし、弾性体の力学的な性質とその数学的な拠り所が詳細に解説されています。(私は大学生のころこの書籍で勉強していました。)

次回は転置行列についてです。次回はこちら↓


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?