行列式計算のテクニック

こんにちはコーヤです。

このページでは行列式計算のテクニックを5つ勉強します。これで行列式を求めるときの計算量は90%くらい減ります。

テクニック5種類の重要度

テクニックは全部で5つあります。

まずは絶対に覚えておきたい重要テクニック2つです。

  1. 公約数を外に出す
  2. 定数倍して別の場所に加える

次に知っていると便利なテクニック3つです。

  1. 行列の積の行列は行列式も積になる
  2. 成分が和なら分割できる
  3. 場所を入れ替えると符号が反転する

それでは以下の行列を例に、テクニック1とテクニック2の使い方を見ていきましょう。

|246159783|

Tech1. 公約数を外に出す

テクニック1は適当な1行か1列選んで、そこにある成分の公約数を外に出すテクニックです。

1行目に注目します。成分は2,4,6なので2が公約数です。すると行列式は

|246159783|=2|123159783|

このように変形できます。これで1行目の公約数2が外に出ました。

続いて3列目、今度は3を外に出します。

2|123159783|=23|121153781|

行列の外に出ている部分は普通にかけ算できます。

|246159783|=6|121153781|

になります。こんな感じで公約数を外に出していき、行列の成分を計算しやすいように調整します。

このテクニックは単品だと計算量を減らせませんが、次に紹介する定数倍して別の場所に加えるテクニックを使うための布石になります。

Tech2. 定数倍して別の場所に加える

このテクニックが行列式計算で一番重要なテクニックです。使えるようになればほとんどの行列式計算は楽に済ませられます。

このテクニックは「ある行を定数倍して別の行に加えても行列式の値は変わらない」という行列式の性質を利用したテクニックです。

列でも同じことが成り立ちます。「ある列を定数倍して別の列に加えても行列式の値は変わらない」です。

式を見ると分かりやすいです。

|abcdefxyz|=|a+kxb+kyc+kzdefxyz|

3行目をk倍して1行目に加えました。こんなことを勝手にやっても行列式の値は変わりません。

それではさっきの行列式の続きを求めましょう。

|246159783|=6|121153781|

さっきはここまで変形しました。

1行目を-1倍して2行目に加えましょう。

6|121153781|=6|1211+(1)5+(2)3+(1)781|=6|121032781|

行列の成分に0を作ることができました。

次は1行目を-7倍して3行目に加えます。

6|121032781|=6|121032066|

1列目に0ができました。1列目で余因子展開します。

6|121032066|=6|3266|

2列目の-6を外に出します。

6|3266|=36|3211|

2列目を-1倍したものを1列目に加えて

36|3211|=36|1201|

1列目を-2倍したものを2列目に加えて

36|1201|=36|1001|

単位行列がでてきました。単位行列の行列式は1なので

36|1001|=36

これで行列式求まりました。

  1. 公約数を外に出す
  2. 定数倍して別の場所に加える

この2つのテクニックを駆使して0を作ったら余因子展開する、というのが王道の流れです。

Tech3. 行列の積の行列は行列式も積になる

det(XY)=detXdetY

これが成り立ちます。

Tech4. 成分が和なら分割できる

|a+xb+yc+zdefghi|=|abcdefghi|+|xyzdefghi|

となります。

列でも同じテクニックが使えます。

|a+xbcd+yefg+zhi|=|abcdefghi|+|xbcyefzhi|

です。

Tech5. 場所を入れ替えると符号が反転する

ある行と別の行の場所を入れ替えると、符号が反転します。

|abcdefxyz|=|abcxyzdef|

例では2行目と3行目を入れ替えています。どこの行を選んでもOKです。

列でも同じことが言えます。

行と列を入れ替えるのはダメです。行と行の入れ替え、列と列の入れ替えのどちらかです。

テクニックの使い方の具体例

それでは具体例2つでテクニックを使う練習をしましょう。

具体例1

|1111xx2x3x4yy2y3y4zz2z3z4|

テクニック1を使って2行目からxを、3行目からyを、4行目からzを取り出します。

xyz|11111xx2x31yy2y31zz2z3|

テクニック2を使って1行目を-1倍して2行目、3行目、4行目に加えます。

xyz|11110x1x21x310y1y21y310z1z21z31|

1列目で余因子展開です。

xyz|x1x21x31y1y21y31z1z21z31|

ここで行き止まりになったように見えますが一工夫してテクニックを使っていきます。

2列目と3列目を因数分解すると

xyz|x1(x+1)(x1)(x2+x+1)(x1)y1(y+1)(y1)(y2+y+1)(y1)z1(z+1)(z1)(z2+z+1)(z1)|

するとテクニック1が使えるようになります。

xyz(x1)(y1)(z1)|1x+1x2+x+11y+1y2+y+11z+1z2+z+1|

1行目を-1倍して2行目、3行目に加えます。

xyz(x1)(y1)(z1)|1x+1x2+x+10yxy2+yx2x0zxz2+zx2x|

0ができたので1列目で余因子展開です。

xyz(x1)(y1)(z1)|yxy2+yx2xzxz2+zx2x|

また行き止まりですが、因数分解してみます。

xyz(x1)(y1)(z1)|yx(yx)(y+x+1)zx(zx)(z+x+1)|

テクニック1が使える形になりました。

xyz(x1)(y1)(z1)(yx)(zx)|1y+x+11z+x+1|

ここまでくれば普通に2次の行列式を計算しましょう。

xyz(x1)(y1)(z1)(xy)(yz)(zx)

これで終了です。キレイな形になりましたね。

この行列式はヴァンデルモンドの行列式というかっこいい名前がついています。

具体例2

|35711117537311551137|

2行目を1行目に加え、3行目も1行目に加え、4行目も1行目に加えてみます。

|26262626117537311551137|

これでテクニック1が使えるようになりました。

26|1111117537311551137|

次はテクニック2です。1列目を-1倍して2列目、3列目、4列目に加えます。

26|10001146874425622|

1行目で余因子展開です。

26|468442622|

テクニック1を使ってもいいですが、使わなくても0が作れそうなので使わずに進んでみます。

3行目を4倍して1行目に加え、3行目を1倍して2行目に加えます。

26|20140220622|

3列目で余因子展開して

262|201422|=26268=3536

これで行列式が求まりました。

まとめ

5つのテクニックを紹介しました。

  1. 公約数を外に出す
  2. 定数倍して別の場所に加える
  3. 行列の積の行列は行列式も積になる
  4. 成分が和なら分割できる
  5. 場所を入れ替えると符号が反転する

計算量を激減させる王道は「テクニック1とテクニック2を駆使して0を作ったら余因子展開する」です。

コメント欄