【固有値編】正方行列の三角化とは?方法と計算例も紹介

こんにちは、おぐえもん(@oguemon_com)です。

前回の記事では、行列の対角化の中でも、対称行列の対角化にフォーカスを当てた解説を行いました。

ところで、行列の対角化は全ての行列でできる訳ではありません。対角化は、ある条件を満たした行列のみに適用できる特別な操作なのです。

一方で、全ての正方行列に許されている操作があります。それが今回学習する三角化です。

三角化ってなに?

三角行列について

まずは三角行列から説明しましょう。三角行列とは、対角成分よりも左下または右上の成分が全て 0 の行列のことを言います。

例えばこんなん ↓

P1AP=[1640712003]P^{-1}AP = \left[ \begin{array}{cccc} 1 & 6 & 4 \\ 0 & 7 & 12 \\ 0 & 0 & 3 \end{array} \right]

特に、左下が全部 0 の行列は上三角行列、右上が全部 0 の行列は下三角行列と呼ばれます。ちなみに上の例は上三角行列です。

三角行列は、ご覧の通り成分のほぼ半分がゼロで構成されています。そのため三角行列を含む式は計算がラクで、線形代数を実用する上で重要な役割を果たしています。

行列の三角化

全ての正方行列は、ある適当な正則行列PPを用意することで、積P1APP^{-1}APを三角行列(上三角行列)にすることができます。このようにして三角行列を作ることを三角化と呼びます。

行列の三角化

任意の正方行列AAに対して、次の式が成立する適当な正則行列PPが存在する。

P1AP=[a11a12a1n0a22a2n00ann]P^{-1}AP= \left[ \begin{array}{cccc} a_{11} & a_{12} & \ldots & a_{1n} \\ 0 & a_{22} & \ldots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \ldots & a_{nn} \end{array} \right]

ただし、対角成分a11,a22,,anna_{11},a_{22},\ldots,a_{nn}は、AAの固有値である。

こうして三角行列(上三角行列)を作ることを三角化という。

対角化の話の中には対角化できることを表す対角化可能という言葉がありました。一方で、三角化は正方行列である限り絶対にできるので、三角化可能という言葉はありません(笑)

また三角化そのものは、下三角行列を作ることも指します。が、上半分行列を作ろうが下半分行列を作ろうが本質的に大きな違いはないので、線形代数の授業の中では簡単のため上半分行列を作ることに限定する場合がほとんどです。

全ての正方行列で三角化できることは、数学的帰納法を用いることで証明が可能です。が、話が長くなるのでここでは割愛します(教科書を読んでください)。

直交行列を用いた三角化

任意の正方行列は、ある正則行列を用いて三角化できるわけですが、特に、正方行列の固有値が全て実数である場合は、直交行列(転置が逆行列になる正則行列のこと)で三角化できます

ちなみに、正方行列の固有値の中に複素数が含まれる場合、ユニタリ行列と呼ばれる行列を用いることで三角化できます。ユニタリ行列とは、言ってみれば複素数版の直交行列みたいな存在です。具体的には、ある行列を転置して、全ての成分を共伴な複素数(虚数部分の符号を入れ替えた複素数)に置き換えてできた行列(随伴行列と言います)が、ある行列の逆行列をなす行列のことです。

三角化の具体的な方法

実際に三角化するのは超面倒です。しかも、実用においては、三角行列よりもさらに簡単で便利なジョルダン標準形という形を作ることの方が多いので、実際に三角化を行う場面は多くありません。

レポートで謎に三角化を強いられたあなたのために、三角化の方法を一応載せます(笑)

三角化の方法はだいたい次の通り。

  1. 固有値&固有ベクトルを求める
  2. ある固有ベクトルと直交なベクトルを集める
  3. ベクトルの大きさを1にして並べる
  4. 右上を除く一回り小さい行列に同じことをする
  5. 全てのPPを掛け合わせる

ここでは、次の行列を例にして三角化していきますよ!

A=[022112112]A = \left[ \begin{array}{ccc} 0 & -2 & -2 \\ -1 & 1 & 2 \\ -1 & -1 & 2 \end{array} \right]

この行列は、次数が 3 なのに対して固有ベクトルが 2 つしかないので、対角化することはできません

固有値と固有ベクトルを求める

何にしてもこれが始まり。ちまちまと計算して両者を求めましょう。ここでは計算の過程は省略します。

AA固有値は 2 と-1で、それぞれに対応する固有ベクトルの 1 つは以下に掲げる通りです(左は 2、右は-1 に対応)。

[110][813]\left[ \begin{array}{c} 1 \\ -1 \\ 0 \end{array} \right] \text{と} \left[ \begin{array}{c} 8 \\ 1 \\ 3 \end{array} \right]

ある固有ベクトルと直交なベクトルを集める

固有ベクトルの中から好きなものを 1 つ選びます。そして、選んだ固有ベクトルを含み、かつ互いに直交な次数個のベクトルを用意します。ここでは 3 次元の行列を扱っているので 3 本のベクトルの組を用意します。直交するベクトルは適当に探しましょう。もちろん、簡単な固有ベクトルを選んだ方が有利ですよ。

ここでは、上式の左の固有ベクトルを選んで、互いに直交する 3 本のベクトルの組を作りました。

[110][110][001]\left[ \begin{array}{c} 1 \\ -1 \\ 0 \end{array} \right] \text{と} \left[ \begin{array}{c} 1 \\ 1 \\ 0 \end{array} \right] \text{と} \left[ \begin{array}{c} 0 \\ 0 \\ 1 \end{array} \right]

ベクトルの大きさを1にして並べる

ベクトルの組み合わせは長さがバラバラだと思います。適当にスカラー倍して長さを 1 に揃えましょう。

[12120][12120][001]\left[ \begin{array}{c} \frac{1}{\sqrt{2}} \\ \frac{-1}{\sqrt{2}} \\ 0 \end{array} \right] \text{と} \left[ \begin{array}{c} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \\ 0 \end{array} \right] \text{と} \left[ \begin{array}{c} 0 \\ 0 \\ 1 \end{array} \right]

勘が良い皆さんならお気付きですが、要は選んだ固有ベクトルに基づいて正規直交基底を作っているわけですね。

さて、正規直交基底ができたら、これらを並べて、これらを列ベクトルとする行列を作りましょう。

P1=[1212012120001]P_1 = \left[ \begin{array}{ccc} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 \\ \frac{-1}{\sqrt{2}} &\frac{1}{\sqrt{2}} & 0 \\ 0 & 0 & 1 \end{array} \right]

ひとまず、これがP1APP^{-1}APPP候補となります

一回り小さい行列に対して繰り返す

まずは、上で求めたP1P_1を使って、P11AP1P_1^{-1}AP_1を計算してみます。計算が鬼面倒なので、逆行列の導出も含め途中計算は省略しました。

A1=P11AP1=[2122010022]A_1 = P_1^{-1}AP_1 = \left[ \begin{array}{ccc} 2 & -1 & -2\sqrt{2} \\ 0 & -1 & 0 \\ 0 & -\sqrt{2} & 2 \end{array} \right]

実は、運が良ければこの時点で上三角行列が完成することがあります。今回は運が悪いみたいですね。

まあ、いかなる場合であれ、少なくとも左端の列は左上を除いて全部 0 になるので安心してください(笑)

この時点で三角化が完了していなければ、次はA1A_1の上端行と左端列を外した一回り小さい行列に対して、先ほどと同様のことを繰り返します。つまりターゲットは、上の行列の右下のブロックを抽出したコイツ ↓ です。

A2=[1022]A_2 = \left[ \begin{array}{cc} -1 & 0 \\ -\sqrt{2} & 2 \end{array} \right]

この行列の固有値は、最初の行列の固有値から、選んだ固有ベクトルに対応する固有値を除いたものになります。最初の行列の固有値は、2 と-1 でしたが、2 は重複度 2 の重解だったので、固有値は 2,2,-1 の 3 つあったようなもので、そこから 2 を 1 つだけ除いて残った 2 と-1 がA2A_2の固有値になります。(実際にA2A_2の固有方程式を解けば確かめられます)

ここでは、固有値 2 に対応する固有ベクトルの 1 つである

[01]\left[ \begin{array}{c} 0 \\ 1 \end{array} \right]

を用いて、今後は行列A2A_2に対するPPの候補

P2=[0110]P_2 = \left[ \begin{array}{cc} 0 & 1 \\ 1 & 0 \end{array} \right]

を作りました。

これを用いて、P21A2P2P_2^{-1}A_2P_2を計算すると、次の行列が得られます。

P21A2P2=[2201]P_2^{-1}A_2P_2 = \left[ \begin{array}{cc} 2 & -\sqrt{2} \\ 0 & -1 \end{array} \right]

やったね!三角化が成功しました!次数が多いと、2 回目でも三角化が完了しないことがほとんど。そんな時は、三角行列が得られるまで、一回り小さい行列に対して同様のことを繰り返してください

全てのP候補を掛け合わせる

三角化が成功した時点で、P1P_1P2P_2という 2 つのPP候補が登場しました(次数が多いとP3P_3以降も続きます…)。最後に、これらを掛け合わせて、PPそのものを作りましょう。

しかし、P1,P2,P_1,P_2,\ldotsと次元がどんどん小さくなりますので、単純に掛け合わせることはできません。掛け合わせる時は、PiP_iを下の式のような補完方法で無理やりAAの次元に合わせてください。

Pi=[10001000Pi]P_i' = \left[ \begin{array}{cccc} 1 & 0 & \cdots & 0 \\ 0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & P_i \end{array} \right]

簡単に言えば、PP候補を右下に詰めて、残りは単位行列みたいな感じにして補います。今回のP2P_2は次のように補えます。

P2=[100001010]P_2' = \left[ \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \end{array} \right]

最後にこれを右から古い順にガンガン掛け合わせていけば完成!

P=P1P2P=P_1P_2'

ちなみに、今回のAAに対するPPは以下の通りになります。

P=[1201212012010]P = \left[ \begin{array}{ccc} \frac{1}{\sqrt{2}} & 0 & \frac{1}{\sqrt{2}} \\ \frac{-1}{\sqrt{2}} & 0 & \frac{1}{\sqrt{2}} \\ 0 & 1 & 0 \end{array} \right]

これを使えば、P1APP^{-1}APは上三角行列になります。

P1AP=[2221022001]P^{-1}AP = \left[ \begin{array}{ccc} 2 & -2\sqrt{2} & -1 \\ 0 & 2 & -\sqrt{2} \\ 0 & 0 & -1 \end{array} \right]

これで終わりです。3 次の行列ですらこんなに面倒臭いのに、多次元行列でこれやるのとかしんどすぎワロタって感じですね。

おわりに

今回は行列の三角化について扱いました。

次回は、行列の三角化を用いて示せる定理の 1 つ「ケーリー・ハミルトンの定理」について扱います。

>>ケーリー・ハミルトンの定理って何?間違いやすい点を含めながら解説

▲ トップへ戻る