ちょぴん先生の数学部屋

数学の楽しさを、現役メーカーエンジニアが伝授するぞ!

連立1次方程式を解き明かそう ~逆行列・ガウスの消去法・クラメールの公式~

皆さん、こんにちは。

 

今回から「線形代数」に関するネタを取り上げていきたいと思います。

最初に「逆行列」「連立1次方程式の解法」について紹介します。

 

※行列の定義、足し算・掛け算の計算方法、単位行列は既知のものとして説明していきます。20年前の学習指導要領までは、ここまでは数Cで習う内容だったのですが・・・

1. 2×2行列の逆行列

 

1-1. 連立方程式を中学数学で解く

次のようなxとyに関する連立1次方程式を解いてみましょう。

係数こそ文字ですが、中学数学の知識で十分解くことができます。

 

まずxを消すことを考えると、②×a-①×cで実現できます。

あとはad-bcで両辺を割ってしまえばyが求まることになるわけですが、そうするには、

でなければなりません。0になってしまう場合は後で考えることにして、とりあえずはこの数が0にならない場合について考えていきます。

 

そのときは、前述の通り③を両辺ad-bcで割れば、

yが求まります。このyの値を元の方程式に代入すればxが求まります。

 

(※xの計算過程では途中a≠0としてaで割り算してますが、最終的に求まった結果⑤の形はa=0でも成立していることが分かります。)

 

このように、

であれば、xとyはただ一組求まります。

 

では、もし

だったらどうなるか?

 

このときは、先ほど出てきたyの式

左辺が「yがどんな値であろうとも」0になりますね。

 

だとすると、右辺の値に注目すれば

・右辺の値が0 →③を満たすyは何でもいい

・右辺の値が0でない→③自体が矛盾した式になる→③を満たすyは存在しない

 

ということになりますね。

 

前者の場合は、yを一つ決めれば対応するxが元の方程式から決まるので、結局連立方程式の解が無数にあることになります。

一方後者の場合は、yが存在しえないのでxも存在しません。つまり連立方程式の解が存在しないことになります。

 

このように、ad-bcの値が0になるか否かで、連立方程式の解がただ一つ求まるか、無数にあるor存在しない、という計3パターンが存在することになります。

 

1-2. 連立方程式を行列の形で解く

 

ここまで連立方程式を中学数学の知識だけで解いてきましたが、同じことを今度は「行列」の形でやってみます。つまり、

 

ここで、x,y以外の係数部分だけ抜き出すとこのようになります。

こうして抜き出した行列に対して、

行ごとの値を定数倍したり、行の各成分を足す

といった動作を繰り返していきます。この操作を「行基本変形」と呼びます。

 

言葉だけでは分かりにくいと思うので、具体的な計算でみていくことにします。

 

まず、最初の状態で、2行目をa倍し、そこから1行目をc倍したものを引きます。

この操作は、実は上で行った「②×a-①×cを行って③を導出する」と全く同じ動作になっています。左4成分にx,yをくっつければ、1行目は①に、2行目は③になってますよね。

ここで、先ほど同様ad-bcが0か否かで場合分けが発生します。

 

先に0でない場合で変形を進めます。

この場合は、2行目を一律ad-bcで割ることができて、

2行目の左側が、1成分だけ1, 残りが0という形になりました。これはちょうど③を両辺ad-bcで割ってyの式を求めた操作と同じであり、2行目の右側が求まったyの値そのものになっています。

 

2行目はy=の形にできたのでそのまま放置し、あとは1行目を操作していきます。

 

2行目をb倍したものを1行目から引けば、

のように、1行目の左側も1成分だけ0でない値、残りの値が0の形になりました。最後に1行目をaで割れば、

1行目の左側が「1成分だけ1、残りの値が0」の形になり、1行目の右側が上で求まったxの値そのものになっています。

 

これで1行目もx=の形になって連立方程式が解けたことになります。

このとき、行列の左側が「対角成分が1、残りが0」という行列、つまり「単位行列」になっていることに注目です。

 

このように、係数行列の左側が単位行列になるまで行基本変形を繰り返して連立方程式を解く方法は、「ガウスの消去法」と呼ばれます。

 

ここまで係数部分だけ抜き出して処理したので、元の方程式の形に戻してあげれば、

左辺は(x,y)=の形になり、右辺は係数だけで書けている行列の積の形になります。

 

さて、ここでスタートの式⑥とゴールの式⑦を見比べると、

 

⑥に、左から行列

をかけてあげれば、いきなり⑦が求まってしまいますよね。

 

この行列こそが「逆行列」と呼ばれるもので、分母に登場しているad-bcは「行列式」と呼ばれます。

逆行列を「-1乗」と表記する理由は、Aとその逆行列A^(-1)の積が単位行列になるからです。単位行列は、普通のスカラーの世界における「1」と同じものです。

 

(※一般に行列の積は順番を入れ替えると違う結果になる(AB≠BA)わけですが、逆行列についてはA×A^(-1)もA^(-1)×Aも結果は単位行列になります。)

 

また、行列式|A|=ad-bcが0でなければ問題なく逆行列A^(-1)を計算できることがわかります。

 

では、行列式が0の場合はどうなるか?実際に係数行列の形で見てみると、

となり、2行目の左側の成分が全部0になっちゃいましたね。この0はxとyの係数なので、結局xについての情報もyについての情報も殺されてしまった状態です。

ここで⑦'の2つ目の式に注目すると、もし右辺の値が0であれば0=0でもはや意味のない式に、右辺の値が0でなければ矛盾が起こってしまうことになります。

 

前者の場合、⑦'で意味のある式は1つ目だけになり、この式は直線の式です。よって、連立方程式の解はこの直線上の点全てです。つまり解が無数に存在します。

 

一方後者の場合は2行目が矛盾するので、当然1行目と2行目が同時に成り立つx,yも存在しない、すなわち連立方程式の解は存在しないことになります。

 

まとめるとこういうことです。

 

今回は2本の1次連立方程式について見てきましたが、この解が何個あるかという議論は、3本だろうが4本だろうが考え方は一緒です。

 

2. 3×3行列の逆行列

 

これまで2×2行列の逆行列について見てきましたので、今度は3×3行列の逆行列について紹介します。

2×2行列の時のように、係数行列の左側が単位行列になるまで行基本変形を繰り返すガウスの消去法」でも逆行列は導出可能なのですが、それ以外の導出方法をここでは紹介します。

 

2-1. サラスの方法

 

3×3行列の行列を手っ取り早く調べる方法に、「サラスの方法」があります。

 

まず、3×3行列の右側に1列目と2列目をコピペします。

この状態で、右下に向かって成分を掛け算した結果を足していき、左下に向かって積分を掛け算した結果を引いていった結果が、行列式になります。

 

4×4以上の行列についても行列式を求める公式が存在するものの、このサラスの方法ほど分かりやすく計算できるアルゴリズムがありません。

 

公式には「互換」「置換」といった純粋数学チックな「代数学」の知識がバンバン登場し、初学者には難解な上に実用的でない(おまけにこの後の「線形代数」ネタの記事でも全く登場しない話題です)ので、紹介は割愛させて下さい。興味のある方は線形代数の専門書を参照下さい。割と序盤の方に記載があるはずです。

 

(「線形代数」は理系学生なら大学1年の教養課程では必修科目になっているわけですが、序盤の「行列式の公式の導出」までは正直非常に退屈です。後半に登場する「固有値固有ベクトル、対角化」が非常に美味しいネタなだけに、前半のつまらない部分を延々と聞かされて線形代数が嫌いになってしまうのは勿体ないと感じます。微分積分学の授業で、いきなりε-δ論法ε-δ論法とは? ~大学数学でみんなが挫折する悪魔の論法~ - ちょぴん先生の数学部屋 (hatenablog.com)をぶつけられて出鼻をくじかれるのと似たような現象です笑)

 

2-2. 余因子

 

サラスの方法で行列式が求まったので、あとは逆行列の各成分を求められればOKです。

 

ここで余因子という概念を導入します。

 

元の3×3行列から、i行目とj行目を取り除いてサイズを小さくした2×2行列の行列式の事です。

 

具体的には次のようなイメージです。

 

この余因子と行列式を使うと、3×3行列の逆行列は次のように書けます。

基本的には、「余因子を各成分に当てはめ、全体を行列式で割る」という形になっていますが、余因子の入れ方に注意が必要で行と列が入れ替わっています

 

例えば、逆行列1行目2列目の成分は、2行目1列目について考えた余因子になる、ということ。

 

この逆行列の式を使って実際にA×A^(-1)もA^(-1)×Aも単位行列になることを実際に手計算で確かめることができます。計算が煩雑になるだけなのでここではやりませんが。

 

このように「余因子を各成分に当てはめ、全体を行列式で割る」という方法は4×4以上のサイズであっても有効な逆行列の導出方法になります。(何なら、実は最初に紹介した2×2行列の逆行列もこの形になっています)

 

3. 3元連立1次方程式を解く

 

それでは、実際に3つの未知数を持つ連立1次方程式を解いてみましょう。

この問題は、1997年の九州大学の過去問(第5問選択問題(a) )を行列の形に書き直したものです。

平成の九大理系数学 -1997年- - ちょぴん先生の数学部屋 (hatenablog.com)

 

この連立方程式を3通りの方法で解いてみたいと思います。

 

3-1. ガウスの消去法

 

まずは、行基本変形を繰り返す「ガウスの消去法」で解いてみます。

 

係数部分だけ抜き出して、行基本変形を繰り返していきます。

 

先ほどガウスの消去法について「係数行列の左側が単位行列になるまで行基本変形を繰り返す」と説明しましたが、実は①の形のように「係数行列の左側が上三角行列対角成分より下側が全て0)になるまで行基本変形を繰り返す」操作もガウスの消去法と呼ばれます。

 

単位行列まで変形していく途中経過の部分ではあるものの、実用上は上三角行列にまで変形していれば連立方程式を解くことができます。

 

ここで一つ注釈を入れます。

①に至るまでの行基本変形で、ある行に「0」をかけるという操作があると巻き戻しが出来なくなってしまう恐れがあるので、途中文字式で倍率掛けした部分は0でないとしておきます。今回の場合は、

としています。a=0や3a-4=0の場合は例外扱いとして後で個別に検討します。

 

話を戻します。

 

①の3行目を元の式に直すとzだけの方程式になっていて、

a-1で全体を括ることができます。

 

このa-1が0か否かで話が変わりそうなので場合分けを行います。

 

まずa=1の場合について。

このときはzの値が何だろうと③が成立するので、zは何でもOKです。なので、zは任意定数tと置いてしまいます。

この結果を①の2行目に代入するとyがtの式で求まります。

yの結果も①の1行目に代入するとxもtの式で求まります。

よってa=1の場合の連立方程式の解は次のように無数に存在します。

 

次にa≠1の場合について。

この場合は③からa-1が約分出来て、

となりますが、今度は2a-5が0か否かの場合分けが発生します。

 

2a-5=0の場合は、③'が0-28=0となってしまい矛盾します。つまり③'を満たすz、ひいては連立方程式の解は存在しません。

2a-5≠0の場合は、③'からzが一意に定まり、あとは残りの2式を使ってx,yを求めることができます。

 

(※yを求める際に、最初の②で3a-4=0の場合を除外した効果が表れていますね)

 

よって、連立方程式の解は⑦~⑨です。

 

②で除外したa=0と3a-4=0の場合は、個別に行基本変形して解を求めます。

いずれの場合も、結果論ですが⑦~⑨に含めてしまって構わないことが分かります。

 

以上から、連立方程式の解は次のようにまとめられます。

 

3-2. 逆行列を求めて解く

 

次に、3×3の逆行列を直接導出する形で解いてみます。

 

元の行列をAとすると、行列式|A|はサラスの方法から、

と計算できます。

 

この時点でa=1やa=5/2のときは|A|=0となってしまい、Aが逆行列を持たないことが分かります。

というわけで、逆行列がある場合とない場合とで場合分けをします。

 

まず、逆行列がある場合について。

この時は、余因子を使って次のように逆行列が計算できます。

 

この逆行列を、元の方程式に左からかけてしまえば解が一気に求まるんでした。

 

次に逆行列がない場合について。

この場合については個別に行基本変形して調べます。

a=1の場合は、行基本変形の結果3行目の成分が全て0になります。これはもはや方程式として意味を成さないので、方程式として意味があるのは1行目と2行目だけです。

 

未知数が3つに対して方程式が2つしかないので、必ずどれかが任意の値になります。

 

a=5/2の場合は、3行目が0=12となって矛盾するため、解を持ちません。

 

以上から、連立方程式の解は次のようにまとめられ、ガウスの消去法による答えと完全に一致します。

 

3-3. クラメールの公式

 

3つ目に紹介する解法は、「クラメールの公式」による解法です。

 

クラメールの公式とは次のようなものです(証明はしません)。

 

実際にやってみましょう。

 

|A|≠0のとき、連立方程式の1番目の未知数であるxは、Aの1列目を右辺のベクトルで置き換えてできる行列の行列式を|A|で割ったものなので、

2番目の未知数y、3番目の未知数zについても同様にして、

となり、ガウスの消去法、逆行列での解法の結果と完全に一致します。

 

|A|=0となる場合は個別に行基本変形して調べればよく、これは既に逆行列で解く場合で紹介済みなので省略します。

 

3-4. 各手法の計算量

 

ここまで3通りの解法を紹介しましたが如何だったでしょうか?

 

板書の見た目的に、計算量は小さい順に

 

クラメールの公式<逆行列ガウスの消去法

 

と感じるのではないでしょうか?

 

しかし、実際の現場で連立方程式を解く、特にコンピュータに解かせる場合は、ガウスの消去法が断然コスパがいいのです。

 

一般に、n×nのサイズの行列式を計算するのにおよそn^3回の計算が必要になると言われています。

 

ガウスの消去法では、余因子(これ自体も行列式でしたね)を計算することなく行基本変形という単純な四則演算だけで解を求めているため、計算量は行列式を計算する相当のn^3回です。

 

逆行列を直接計算してから方程式にかける方法では、行列式を出す工程に加えて(n-1)×(n-1)サイズの余因子をn^2個分計算する必要があるので、計算量は、

n^3+(n-1)^3×n^2 ~n^5

およそn^5回です。

(※計算量を見積もる時は、nの最高次だけ気にすればOKです。通常nは巨大な数なので、最高次以外の項は最高次に比べればゴミ同然です。また定数倍の係数も不問にします)

 

クラメールの公式では、最初に|A|を計算し、未知数の数n個分だけ分子のn×n行列の行列式を計算する必要があるので、計算量は

n^3+n^3×n ~n^4

およそn^4回です。

 

まとめると

ガウスの消去法→n^3回

逆行列導出→n^5回

クラメールの公式→n^4回

 

となり、確かにガウスの消去法の計算量が一番少ないことが分かります。

 

今回のn=3のような小さいサイズではあまり大きな問題にならないものの、実践で解く連立方程式のサイズはn=10000なんてものはまだまだ少ない方です。要するに実際にはnは超巨大なサイズなのです。

 

ここまでnが大きければ、nの次数が1つ違うだけでも計算量は歴然とした差になります。

 

コンピュータにとっては「逆行列の計算」は天敵中の天敵であり、できる限り逆行列そのものの計算を回避できるようにアルゴリズムを組まないと使い物にならなくなってしまいます。

 

クラメールの公式も、式の形こそ美しいものの、実際の現場ではあまり役に立たない「机上の空論」な公式になってしまっています。

(だからこそ、この公式の証明を省略しました。証明自体も複雑で大変ですし)

 

 

このように、線形代数はコンピュータでの数値計算とも密接に関わる分野なので、今後も詳しく解説していく予定です。