線形代数I/連立一次方程式 のバックアップ差分(No.5)

更新


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#contents

* 連立一次方程式 [#q942c267]
** 連立一次方程式とは [#i953febc]

どういう意味か?

:連立|複数ある
:一次方程式|項の次数が最大で一次の方程式

「項」とは?

:項|+やーで繋がれたもの~
&math(3x-2ay+(c+d)); なら &math(3x); や &math(-2ay); の他、&math((c+d)); を項と呼ぶことも
:因子|積や商で繋がれたもの~
&math(ax); なら &math(a); や &math(x);

「次数」とは?

   項を構成する因子に「変数が」何個含まれているか

「一次」とは?

:0次| &math(3,\ -\sqrt{5},\ a,\ 3b,\ \cdots);
:一次| &math(x,\ -2y, 5z,\ w/\sqrt{2},\ \cdots ); ← 変数が1つ含まれたこういうやつ
:二次| &math(-2x^2,\ ay^2,\ 5xy\, \cdots);
:三次| &math(2x^3,\ xy^2,\ \pi xyz,\ \cdots);
:……|

∴「項の次数が0次か一次の方程式が複数ある」=「連立一次方程式」

** 連立一次方程式の例 [#qa2db057]

たとえば、
&math(\left\{\begin{array}{l} x+2y=-1 \\ 3x+y=2 \end{array}\right .); 
を解くと、
&math(\left\{\begin{array}{l} x=1 \\ y=-1 \end{array}\right .);

** うまく解けない場合もある [#q01d398b]

- 解がたくさん出てくる
- 解が1つもない

*** 解がたくさん出てくる [#oa5d8bb5]

&math(\left\{\begin{array}{l} x+2y=-1 \\ 2x+4y=-2 \end{array}\right .); 
を解くと、
&math(\left\{\begin{array}{l} x=-2a-1 \\ y=a \end{array}\right .);~
任意の &math(a); について解になる。

(下の式が上の式のちょうど2倍になっているため、
実効的には式が1つしかないのと同じ事になっている)

*** 解が1つもない [#xb5593b1]

&math(\left\{\begin{array}{l} x+2y=-1 \\ 2x+4y=-3 \end{array}\right .); 

下の式から上の式の2倍を引くと次式を得る。

&math(0=-1);~

どんな &math(x,y); を持ってきてもこの式を満たすことはできない。

したがって「解無し」

** 連立一次方程式の一般形 [#nb322acb]

変数の数も、式の数も、いくつでも良い。

&math(\left\{\begin{array}{c@{}c@{}c@{}c@{}c@{}c@{}c} a_{11}x_1&+&a_{12}x_2&+\cdots+&a_{1n}x_n&=&b_1 \\ a_{21}x_1&+&a_{22}x_2&+\cdots+&a_{2n}x_n&=&b_2 \\ \vdots&&\vdots&&\vdots&&\vdots\\ a_{m1}x_1&+&a_{m2}x_2&+\cdots+&a_{mn}x_n&=&b_m \\ \end{array}\right .);

&math(x_1,x_2,\cdots,x_n); が変数~
&math(a_{11},\cdots,a_{mn}); が定数(係数)~
&math(b_1,b_2,\cdots,b_m); も定数

変数に使う文字:~
変数が3つまでであれば、&math(x,y,z); が使われ、~
変数が4つまでであれば、&math(x,y,z,w); が使われる事が多い。

それ以上の時は、&math(x_i); の形で表すとよい。

** ベクトル方程式として表す [#n192d560]

係数行列、変数ベクトル、定数ベクトル、をそれぞれ

&math(A=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\vdots&\vdots&\ddots&\vdots\\a_{m1}&a_{m2}&\cdots&a_{mn}\end{bmatrix});、
&math(\bm x = \begin{bmatrix}x_1\\x_2\\\vdots\\x_n\end{bmatrix});、
&math(\bm b = \begin{bmatrix}b_1\\b_2\\\vdots\\b_m\end{bmatrix});~

と置くと、連立一次方程式は次のベクトル方程式の形に書ける。

&math(A\bm x=\bm b);

** 方程式の分類 [#f5014358]

先の例と同様に、

- 1つだけに決まる
- たくさんある
- 1つもない

のいずれかに分類できる。

&math(A\bm x=\bm b); なら &math(\bm x=A^{-1}\bm b); 
だから、解は必ず1つだけ求まるんじゃないの?~
というのはちょっと甘い。

- &math(A); が正則でない場合もあるし
- そもそも &math(A); が正方行列にならない場合も考えないと

** 本章の目的 [#x0a1ce96]

物理学やその他のシミュレーションでは、
何万、何十万の変数を持つ連立一次方程式を解かなければならない。

- 大きな次数の計算は「行き当たりばったり」では困るので、
「必ず解ける解法」を知りたい
- 方程式の性質を行列を使って理解したい

というのが、以降で扱う内容。

(計算機で必要になる「本当に効率の良い計算方法」はやらないけど)

** 連立一次方程式を解く(普通に) [#l59c1a6b]

&math(\left\{\!\begin{array}{r@{\,}c@{\,}r@{\,}c@{\,}r@{\,}c@{\,}r@{\ \ \ \ \ \ \ }c}x&-&2y&+&3z&=&1&\MARU{1}\\3x&+&y&-&5z&=&-4&\MARU{2} \\-2x&+&6y&-&9z&=&-2&\MARU{3}\end{array}\right .);

を解こう。

&math(\begin{array}{r@{\,}c@{\,}r@{\,}c@{\,}r@{\,}c@{\,}r@{\ \ \ \ \ \ \ }ll}\phantom{-2x}&\phantom{-}&7y&-&14z&=&-7&\MARU{2}-3\times\MARU{1}&=\MARU{4}\\&&2y&-&3z&=&0&\MARU{3}+2\times\MARU{1}&=\MARU{5} \\&&y&-&2z&=&-1&\MARU{4}/7&=\MARU{6}\\x&&&-&z&=&-1&\MARU{1}+2\times\MARU{6}&=\MARU{7}\\&&&&z&=&2&\MARU{5}-2\times\MARU{6}&=\MARU{8}\\x&&&&&=&1&\MARU{7}+\MARU{8}&=\MARU{9}\\&&y&&&=&3&\MARU{6}+2\times\MARU{8}&=\MARU{10}\\\end{array});

∴&math(\MARU{9}\MARU{10}\MARU{8});より &math(x=1,\ y=3,\ z=2);

あるいは、

&math(\begin{bmatrix}x\\y\\z\end{bmatrix}=\begin{bmatrix}1\\3\\2\end{bmatrix});

が解となる。

** どうやったか? [#e099220e]

連立方程式の解を変化させずに以下の式変形が可能:
- ある式を定数倍(&math(\neq 0);)する
- ある式を定数倍して別の式に加える
- (ある式を別の式を入れ替える) ←必要なら

与えられた式に上記の操作を繰り返して、最終的に

&math(\left\{\begin{array}{c@{\ }c@{\ }c@{\ }c@{\ }c}x&&&=&?\\&y&&=&?\\&&z&=&?\end{array}\right .);

の形にできれば、解けたことになる。

** 係数だけ取り出して考える [#gd31968b]

&math(\left\{\!\begin{array}{r@{\,}c@{\,}r@{\,}c@{\,}r@{\,}c@{\,}r}x&-&2y&+&3z&=&1\\3x&+&y&-&5z&=&-4 \\-2x&+&6y&-&9z&=&-2\end{array}\right .);

のような連立一次方程式に対して、係数行列と定数ベクトルを並べて

&math(A^*=[\,A\ \bm b\,]=\begin{bmatrix}1&-2&3&1\\3&1&-5&-4\\-2&6&-9&-2\end{bmatrix});~
を「拡大係数行列」と呼ぶ。

これに、
- ある行を定数倍(&math(\neq 0);)する
- ある行を定数倍して別の行に加える
- ある行を別の式を入れ替える

を行っても、対応する方程式の解は変わらない。~
→ これら3つは「(行に対する)基本変形」と呼ばれる

したがって、拡大係数行列に基本変形を繰り返すことで、

&math(\left[\begin{array}{ccccl}1&0&\cdots&0&b_1^\prime\\0&1&&\vdots&\vdots\\\vdots&&\ddots&0&b_{m-1}^\prime\\0&\cdots&0&1&b_m^\prime\end{array}\right]=[\,I\ \bm b^\prime\,]);

のように 「単位行列と(始めと異なる)定数ベクトルが並ぶ形」 にできれば、
これは、

&math(\left\{\begin{array}{c@{\ }c@{\ }c@{\ }c@{\ }c}x&&&=&b_1^\prime\\&y&&=&b_2^\prime\\&&z&=&b_3^\prime\end{array}\right .);

のような式に対応し、

&math(\bm x=\bm b^\prime);

が解となる。

(必ずこううまく行くとは限らないけど、うまく行った=解けた、である)

** 実際にやってみる → ガウスの消去法(掃出し法) [#i2e196a4]

先の問題を、拡大係数行列を変形する方法で解いてみる。

ここで採用する方法は「ガウスの消去法」あるいは「掃出し法」と呼ばれる。

&math(\left\{\!\begin{array}{r@{\,}c@{\,}r@{\,}c@{\,}r@{\,}c@{\,}r}x&-&2y&+&3z&=&1\\3x&+&y&-&5z&=&-4 \\-2x&+&6y&-&9z&=&-2\end{array}\right .);

より、拡大係数行列は

&math([\,A\ \bm b\,]=\begin{bmatrix}1&-2&3&1\\3&1&-5&-4\\-2&6&-9&-2\end{bmatrix});

まず、1列目を目的の形(単位行列)と一致させたい。

そこで、(1, 1) 要素を軸にして1列目を掃き出す
(この「軸にする」「掃き出す」は専門用語)。

具体的には、(1, 1) 要素が1なので、3倍を2行目から引き、2倍を3行目に足せば、(2, 1)要素と(3, 1)要素をゼロにできる。

&math(\sim \begin{bmatrix}1&-2&3&1\\0&7&-14&-7\\0&2&-3&0\end{bmatrix}\begin{array}{l}\bm r_1\\\bm r_2-3\bm r_1\\\bm r_3+2\bm r_1\\\end{array});

行列の右側に出てくる &math(\bm r_1); などは、教科書と同じ書き方で、直前の行列の &math(i); 行目の行ベクトルを &math(\bm r_i); と書いている。あくまでメモ代わりだが、書いておくと計算間違いなどを防ぎやすい。

これで1列目を目的の形にできた。次は2列目。

(2, 2) 要素を軸に掃き出したいが、他の行が7で割り切れないので、まずは2行目に 1/7 を掛けて (2, 2) 要素を1にしておく。

&math(\sim \begin{bmatrix}1&-2&3&1\\0&1&-2&-1\\0&2&-3&0\end{bmatrix}\begin{array}{l}\bm r_1\\\bm r_2/7\\\bm r_3\\\end{array});

そして、(2, 2) 要素を軸に2列目を掃き出す。ここでは1行目に2行目の2倍を、3行目に2行目の−2倍を加えればよい。

&math(\sim \begin{bmatrix}1&0&-1&-1\\0&1&-2&-1\\0&0&1&2\end{bmatrix}\begin{array}{l}\bm r_1+2\bm r_2\\\bm r_2\\\bm r_3-2\bm r_2\\\end{array});

(3, 3) 要素は1なので、そのまま軸にして3列目を掃き出す。1行目に3行目をそのまま、2行目には2倍して加えればよい。

&math(\sim \begin{bmatrix}1&0&0&1\\0&1&0&3\\0&0&1&2\end{bmatrix}\begin{array}{l}\bm r_1+\bm r_3\\\bm r_2+2\bm r_3\\\bm r_3\\\end{array});

この形が求める物であり、

&math(\left\{\begin{array}{c@{\ }c@{\ }c@{\ }c@{\ }c}x&&&=&1\\&y&&=&3\\&&z&=&2\end{array}\right .);

という方程式に対応する。

「式の解を変えない変形」でこの結果を得たのであるから、これは元の式の解でもある。

すなわち、&math(x=1,\ y=3,\ z=2); あるいは、
&math(\begin{bmatrix}x\\y\\z\end{bmatrix}=\begin{bmatrix}1\\3\\2\end{bmatrix}); が与式の解となる。

*** 解答の書き方 [#r3f50ad8]

問:

&math(\left\{\!\begin{array}{r@{\,}c@{\,}r@{\,}c@{\,}r@{\,}c@{\,}r}x&-&2y&+&3z&=&1\\3x&+&y&-&5z&=&-4 \\-2x&+&6y&-&9z&=&-2\end{array}\right .);

を解け。

解答:

拡大係数行列を求め基本変形する。

&math([\,A\ \bm b\,]=\begin{bmatrix}1&-2&3&1\\3&1&-5&-4\\-2&6&-9&-2\end{bmatrix});

&math(\sim \begin{bmatrix}1&-2&3&1\\0&7&-14&-7\\0&2&-3&0\end{bmatrix}\begin{array}{l}\bm r_1\\\bm r_2-3\bm r_1\\\bm r_3+2\bm r_1\\\end{array});

&math(\sim \begin{bmatrix}1&-2&3&1\\0&1&-2&-1\\0&2&-3&0\end{bmatrix}\begin{array}{l}\bm r_1\\\bm r_2/7\\\bm r_3\\\end{array});

&math(\sim \begin{bmatrix}1&0&-1&-1\\0&1&-2&-1\\0&0&1&2\end{bmatrix}\begin{array}{l}\bm r_1+2\bm r_2\\\bm r_2\\\bm r_3-2\bm r_2\\\end{array});

&math(\sim \begin{bmatrix}1&0&0&1\\0&1&0&3\\0&0&1&2\end{bmatrix}\begin{array}{l}\bm r_1+\bm r_3\\\bm r_2+2\bm r_3\\\bm r_3\\\end{array});

したがって、

&math(\left\{\begin{array}{c@{\ }c@{\ }c@{\ }c@{\ }c}x&&&=&1\\&y&&=&3\\&&z&=&2\end{array}\right .);

より、解は

&math(\begin{bmatrix}x\\y\\z\end{bmatrix}=\begin{bmatrix}1\\3\\2\end{bmatrix});

*** 注意点 [#p7584dcf]

上記では基本変形を表すのに "〜" を使っている。

ここでの "〜" は、同じ解を持つ連立方程式を表す行列であることを表す「同値関係」(これは専門用語なので余力があれば各自調べること)

基本変形の前後で行列同士が等しいわけではないため "=" で繋いではならない。

** ガウスの消去法:復習 [#h0fcb226]

上で使った方針は、

- 左側の列から順に、対角成分を軸にして掃き出す
- 最後が &math([\,I\ \bm b^\prime\,]); の形になれば解けたことになる

この方法は、任意の大きさの連立一次方程式に適用可能。

しかし、これだけではうまく行かないケースがある。

** うまく行かないケース(1):行の入れ替えが必要 [#kef3e707]

基本変形による計算途中で、以下のように軸に取るべき要素がゼロになってしまう場合がある。

&math([\,A\ \bm b\,] = \begin{bmatrix}2&1&1&2\\4&2&3&1\\-2&-2&0&-1\end{bmatrix});

&math(\sim \begin{bmatrix}2&1&1&2\\0&0&1&-3\\0&-1&1&1\end{bmatrix}\begin{array}{l}\bm r_1\\\bm r_2+2\bm r_1\\\bm r_3+\bm r_1\\\end{array});

次に (2, 2) を軸に掃出しをしたいが、(2, 2) がゼロなので掃出しができない。

ここでは、他の行と入れ替えることで掃出しが行える。(2行目と3行目を入れ替える)

&math(\sim \begin{bmatrix}2&1&1&2\\0&-1&1&1\\0&0&1&-3\end{bmatrix}\begin{array}{l}\bm r_1\\\bm r_3\\\bm r_2\\\end{array});

&math(\sim \begin{bmatrix}2&1&1&2\\0&1&-1&-1\\0&0&1&-3\end{bmatrix}\begin{array}{l}\bm r_1\\-\bm r_2\\\bm r_3\\\end{array});

&math(\sim \begin{bmatrix}2&0&2&3\\0&1&-1&-1\\0&0&1&-3\end{bmatrix}\begin{array}{l}\bm r_1-\bm r_2\\\bm r_2\\\bm r_3\\\end{array});

&math(\sim \begin{bmatrix}2&0&0&9\\0&1&0&-4\\0&0&1&-3\end{bmatrix}\begin{array}{l}\bm r_1-2\bm r_3\\\bm r_2+\bm r_3\\\bm r_3\\\end{array});

&math(\sim \begin{bmatrix}1&0&0&9/2\\0&1&0&-4\\0&0&1&-3\end{bmatrix}\begin{array}{l}\bm r_1/2\\\bm r_2\\\bm r_3\\\end{array});

&math(\therefore \begin{bmatrix}x\\y\\z\end{bmatrix}=\begin{bmatrix}9/2\\-4\\-3\end{bmatrix});

** うまく行かないケース(2):軸に取るべき要素がない [#rce7a4e0]

入れ替えようとしてもできない場合がある。

たとえば、計算途中で次のようになった場合、2列目を掃き出せない~
→ (2, 2) 要素がゼロだし、それより下にも要素がない

&math(\begin{bmatrix}1&2&-2&-3\\0&0&2&2\\0&0&3&3\end{bmatrix});

その場合には、仕方がないのでその列は飛ばして、次列以降の掃き出しを続ける。

&math(\sim \begin{bmatrix}1&2&-2&-3\\0&0&1&1\\0&0&3&3\end{bmatrix}\begin{array}{l}\bm r_1\\\bm r_2/2\\\bm r_3\\\end{array});

&math(\sim \begin{bmatrix}1&2&0&-1\\0&0&1&1\\0&0&0&0\end{bmatrix}\begin{array}{l}\bm r_1+2\bm r_2\\\bm r_2\\\bm r_3-3\bm r_2\\\end{array});

&math(\sim \begin{bmatrix}1&2&0&-1\\0&0&1&1\\0&0&0&0\end{bmatrix}\begin{array}{l}\bm r_1+2\bm r_2\\\bm r_2\\\bm r_3-3\bm r_2\\\end{array});

4列目も掃き出せないのでこれで終了。

- 1,3列目:掃き出せた = ある行に1を残して残りは全て0になっている
- 2,4列目:掃き出せなかった = ごちゃごちゃなまま

これに対応する方程式は、

&math(\left\{ \begin{array}{l}x+2y\phantom{+z}=-1\\\phantom{x+2y+}z=\phantom{-}1\\\phantom{x+2y+}0=\phantom{-}0\end{array} \right .);

このような場合、「掃出しのできなかった列に対応する変数をパラメータに置く」のが良い~
→ ここでは2列目 = &math(y);

&math(y=a); ただし &math(a); は任意の実数とすると、

&math(\left\{ \begin{array}{l}x=-2a-1\\y=a\\z=1\end{array} \right .);

とすれば全ての式を満たす。すなわち、

&math(\begin{bmatrix}x\\y\\z\end{bmatrix}=a\begin{bmatrix}-2\\1\\0\end{bmatrix}+\begin{bmatrix}-1\\0\\1\end{bmatrix});

が一般解となる。

「一般解」とは?
:一般解|すべての解がこの形に表せることを保証できる形
:特殊解|その値自体は解になるが、他にも解があることを否定しない形

*** 行数が足りない場合も同様 [#s9f2a158]

&math(\left\{\begin{array}{l}x+2y-z+3w=-3\\x+y+z+w=1\end{array});

に対して、1列目、2列目を掃き出した結果は次のようになる。~
→ 掃き出せた列は軸とした列に1があり、残りは0になっている

&math(\sim \begin{bmatrix}1&0&3&-1&5\\0&1&-2&2&-4\end{bmatrix});

3列目、4列目はこれ以上掃き出せない。対応する方程式は、

&math(\left\{ \begin{array}{l}x\phantom{+y}+3z-\phantom{2}w=\phantom{-}5\\\phantom{x+}y-2z+2w=-4\end{array}\right .);

掃出しのできなかった列に対応する変数を &math(z=a,\ w=b); と置けば、

&math(\left\{ \begin{array}{l}x=-3a+b+5\\y+2a-2b-4\\z=a\\w=b\end{array} \right .);

すなわち、

&math(\begin{bmatrix}x\\y\\z\\w\end{bmatrix}=a\begin{bmatrix}-3\\2\\1\\0\end{bmatrix}+b\begin{bmatrix}1\\-2\\0\\1\end{bmatrix}+\begin{bmatrix}5\\-4\\0\\0\end{bmatrix});

が一般解となる。

** うまく行かないケース(3):定数項まで掃き出せてしまう [#rce7a4e0]

&math(\begin{bmatrix}1&2&-2&-3\\0&0&2&2\\0&0&3&4\end{bmatrix});

について掃出しを進めると、

&math(\sim \begin{bmatrix}1&2&-2&-3\\0&0&1&1\\0&0&3&4\end{bmatrix}\begin{array}{l}\bm r_1\\\bm r_2/2\\\bm r_3\end{array});

&math(\sim \begin{bmatrix}1&2&0&-1\\0&0&1&1\\0&0&0&1\end{bmatrix}\begin{array}{l}\bm r_1+2\bm r_2\\\bm r_2\\\bm r_3-3\bm r_2\end{array});

ここまででおかしな事になっているのだけれど、形式的には4列目も掃き出せてしまう。

&math(\sim \begin{bmatrix}1&2&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}\begin{array}{l}\bm r_1+\bm r_3\\\bm r_2-\bm r_3\\\bm r_3\end{array});

対応する方程式は、

&math(\left\{\begin{array}{l}x+2y\phantom{+z}=0\\\phantom{x+2y+}z=0\\\phantom{x+2y+}0=1\end{array} \right .);

この連立方程式(特に3番目の式)は、どんな &math(x,\ y,\ z); に対しても成り立たないため、
「解無し」が結論になる。

本来なら、係数部分がすべてゼロで、定数部分が非ゼロの行ベクトルが現れた時点で「解無し」を結論できる。

** 連立一次方程式の解法 [#h5f54f81]

+ 掃出しにより &math([\,A\ \bm b\,]\sim[\,I\ \bm b^\prime\,]); とできれば、解は &math(\bm x=\bm b^\prime);
+ 掃き出せない列があれば、飛ばして計算を続け、最後にその列をパラメータに置く
+ 定数項(&math(\ne 0);)を残して他がゼロの行が現れたら「解無し」

により、どんな連立一次方程式も解ける(任意の次数でOK)

注)「解ける」=「一般解が求まる」 or 「解無しを結論する」

* コメント [#q5588fba]

#article_kcaptcha


Counter: 311828 (from 2010/06/03), today: 64, yesterday: 0