tsujimotterのノートブック

日曜数学者 tsujimotter の「趣味で数学」実践ノート

2変数2次関数の極値問題(平方完成と主軸変換の図形的な意味)

前回の記事の続きです(前回の記事を読まなくても、今回の内容は読むことができます):
tsujimotter.hatenablog.com

前回の内容を簡単に振り返ります。「空間内の与えられた2直線  l_1, l_2 に対して、その距離を求めることはできるか?」という問題について考えました。 l_1, l_2 からそれぞれ点  P, Q をとったとき、 P, Q の距離は2変数の2次関数関数  F(x, y) として求められます。 F(x, y) の最小値を求めれば、 l_1, l_2 の距離が求まるという話でした。

ここで「2変数の2次関数の最小値はあるのか?」という部分が一つの焦点だったわけですが、 l_1, l_2 が平行でない場合には最小値が極小値に一致する(最小値は存在する)という結論でした。


上の記事では、 F(x, y) を力技で平方完成して最小値を出していました。ところが、ブログ公開後にTwitter上で @Freufirst さんという方から「2次関数の平方完成は合同変換で出来るよ」という旨のアドバイスをいただきました。教えていただいた方法は「まさに」という方法だったのですが、昨日の時点ではまったく頭にありませんでした。ありがとうございます。


というわけで、せっかくなので行列を使った2変数2次関数の極値問題の解法について、詳しくまとめてみたいと思います。2変数2次関数  F(x, y) が極小値(あるいは極大値など)を持つ条件について考察していきたいと思います。

今回は、行列やベクトルとしての式変形を用いてスマートに求めることを目指します。計算の途中では、いくつかの「行列やベクトルの変換操作」を行っていきますが、それらは単なる機械的な置き換えではなく、実はちゃんと図形的な意味があるものになっています。記事の後半では、そのことについても触れていきたいと思います。

目次:

2変数2次関数の行列を使った表示

2変数2次関数  F(x, y) の一般形を

 \displaystyle F(x, y) = ax^2 + bxy + cy^2 + dx + ey + f \tag{1}

と表しておきます。この関数が極小値を持つか、持つのであればどの点  (x, y) でが極小値を持つのか、というのが知りたい問題でした。


ここで、次のような行列とベクトルをおきます:

 \begin{align} A &= \begin{pmatrix} a & b/2 \\ b/2 & c \end{pmatrix} \\
 \mathbf{x}^T &= (x, y) \\
 \mathbf{b}^T &= (d/2, e/2) \end{align}

添え字の  T は行列の転置(行と列を入れ替える)記号です。基本のベクトルが縦ベクトルになるように、最初から転置記号を当てて定義しています。

このようにすると、2次関数  F(x, y)

 \displaystyle F(x, y) = \mathbf{x}^T A \mathbf{x} + 2\mathbf{b}^T \mathbf{x} + f \tag{2}

とかけることになります。

特に、 \mathbf{x}^T A \mathbf{x} の部分は 2次形式 と呼ばれる部分ですね。


このようにまとめておくことで、式自体がすっきりまとまっていて見通しが良くなります。また、次に述べるように平方完成の計算が著しく簡単になります。

もう一つのメリットとしては、今回の計算をそのまま一般の  n 元2次形式でも実行できるという点ですね。今回はやらないですが。

平方完成

ここで、ベクトル変数  \mathbf{x} の部分が1項目と2項目に別れてしまっているのが気になると思います。これを一つにまとめましょう。これがまさに「平方完成」に相当する計算です。

結論から言ってしまうと、次のような変数の置換を行います:

 \mathbf{x} = \mathbf{y} - A^{-1} \mathbf{b}

ここで、両辺の転置をとると

 \mathbf{x}^T = \mathbf{y}^T - \mathbf{b}^T A^{-1}

となります。

 (A^{-1} \mathbf{b})^T = \mathbf{b}^T A^{-1} の計算ですが、 まず行列の積の転置

 (A^{-1} \mathbf{b})^T = \mathbf{b}^T (A^{-1})^T

を用いています。また、 (A^{-1})^T = (A^T)^{-1} であり、 A は対称行列(転置をとっても変わらない)なので、 (A^{-1})^T = A^{-1} となります。


これらを2次関数の式  (2) に代入しましょう。すると

 \require{cancel} \displaystyle \begin{align} F(x, y) &= (\mathbf{y}^T - \mathbf{b}^T A^{-1}) A (\mathbf{y} - A^{-1} \mathbf{b}) + 2\mathbf{b}^T (\mathbf{y} - A^{-1} \mathbf{b}) + f \\
&= \mathbf{y}^T A \mathbf{y} - \mathbf{b}^T \cancel{A^{-1}A}\mathbf{y} - \mathbf{y}^T \cancel{A^{-1}A}\mathbf{b}  + \mathbf{b}^T \cancel{A^{-1}A} A^{-1}\mathbf{b} + 2\mathbf{b}^T \mathbf{y} - 2\mathbf{b}^T A^{-1} \mathbf{b} + f \\
&= \mathbf{y}^T A \mathbf{y} - \mathbf{b}^T \mathbf{y} - \mathbf{y}^T \mathbf{b}  + \mathbf{b}^T A^{-1}\mathbf{b} + 2\mathbf{b}^T \mathbf{y} - 2\mathbf{b}^T A^{-1} \mathbf{b} + f \end{align}

ここで、一見異なる二つの式  \mathbf{b}^T \mathbf{y} \mathbf{y}^T \mathbf{b} ですが、結果がスカラーとなり互いに転置の関係にあるので、実は同じ式です。これを使うと

 \require{cancel} \displaystyle \begin{align} F(x, y) &= \mathbf{y}^T A \mathbf{y} - \cancel{\mathbf{b}^T \mathbf{y}} - \cancel{\mathbf{b}^T \mathbf{y}}  + \bcancel{\mathbf{b}^T A^{-1}\mathbf{b}} + \cancel{2\mathbf{b}^T \mathbf{y}} - \bcancel{2}\mathbf{b}^T A^{-1} \mathbf{b} + f \\
&= \mathbf{y}^T A \mathbf{y}  + f - \mathbf{b}^T A^{-1} \mathbf{b} \end{align}

となり、ばっさりと項が消えていきます。結果的に

 F(x, y) = \underset{\text{2次の項}}{\underline{\mathbf{y}^T A \mathbf{y}}}  + \underset{\text{定数項}}{\underline{f - \mathbf{b}^T A^{-1} \mathbf{b}}} \tag{3}

が得られます。

あんなに難しかった平方完成が、こんなに簡単に出来るなんて・・・。中身の値を気にせず行列のまま計算を進めることができるのが嬉しいですね。これが行列計算の良さなのかなと思います。


対角化と主軸変換

そんなわけで「2次の項」と「定数項」にきれいに分離できたわけですが、もう少しだけ変形することができます。

 A としては実対称行列を仮定しています。ここで線形代数の一般論により、 A は直交行列  P を用いて対角化可能です。すなわち

 \displaystyle P^{-1} A P = \begin{pmatrix} \lambda_1 & 0 \\ 0 & \lambda_2 \end{pmatrix}

となります。ここで、 \lambda_1, \lambda_2 は行列  A の固有値です。


そこで、対角化に用いた直交行列  P を用いて変数変換

 \mathbf{y} = P\mathbf{z}

を施すことを考えます。このような変換を「主軸変換」といいますが、その意味は次の節でわかるかと思います。

転置をとると

 \mathbf{y}^T = \mathbf{z}^T P^T

ですが、直交行列の定義より  P^T = P^{-1} が成り立ちます。


したがって、式  (3) に代入すると

 F(x, y) = \mathbf{z}^T (P^{-1} A P) \mathbf{z}  + f - \mathbf{b}^T A^{-1} \mathbf{b} \tag{4}

となります。

これによって、2次形式  \mathbf{z}^T (P^{-1} A P) \mathbf{z} の行列部分  P^{-1} A P が対角行列になりました。これの何が嬉しいのでしょうか。

2次形式を改めて展開すると、その良さが実感できるかと思います。 \mathbf{z}^T = (z_1, z_2) とおくと

 \displaystyle \begin{align} F(z_1, z_2) &= (z_1, z_2) \begin{pmatrix} \lambda_1 & 0 \\ 0 & \lambda_2 \end{pmatrix} \begin{pmatrix} z_1 \\ z_2 \end{pmatrix} + f - \mathbf{b}^T A^{-1} \mathbf{b} \\
&= \lambda_1 z_1^2 + \lambda_2 z_2^2  + f - \mathbf{b}^T A^{-1} \mathbf{b} \end{align}

となります。定数項を一旦忘れると  \lambda_1 z_1^2 + \lambda_2 z_2^2 となります。これはもうめちゃめちゃ簡単な式になっていますね。 \lambda_1 > 0, \;\; \lambda_2 > 0 であれば極小値をただ一つ持つことが、見れば明らかです。

 \lambda_1, \lambda_2 は行列  A の固有値でしたが、こんな風に行列の固有値がすべて正になる行列を正定値(positive definite)であるといいます。このときは極小値を持つというわけですね。

 A が正定値  \;\; \Longrightarrow \;\;  F(x, y) は極小値をただ一つ持つ

また、 \lambda_1, \lambda_2 がどちらも負である場合は、負定値(negative definite)といいます。この場合はただ一つの極大値を持つわけですね。

面白いのは、 \lambda_1 > 0, \lambda_2 < 0 のような状況です。この場合は、 z_1 方向には増大していくが、 z_2 方向には減少していくような挙動となります。こういう状況を鞍点(suddle point)といいます。


主な挙動として3通りの状況を図示します。

f:id:tsujimotter:20210217133408p:plain:w600

もちろん、これら以外の状況も存在して、たとえば固有値が   0 になるときは非常にややこしいことになります。

なお、前回の問題に照らしあわせると、2本の直線が平行でない場合は、正定値行列になるので  F(x, y) はただ一つの極小値を持つというわけですね。


これまでの変換の図形的な意味

極小値を求めるにあたって2つの変換を施してきたわけですが、最後にこれらの変換の図形的な意味を説明して終わりたいと思います。

  •  \mathbf{x} = \mathbf{y} - A^{-1}\mathbf{b} ( A は対称行列)
  •  \mathbf{y} = P\mathbf{z}   ( P A を対角化する直交行列)


逆順に進んでいったほうがわかりやすいかと思いますので、変数  \mathbf{z} = (z_1, z_2) からスタートします。 A が正定値のとき、変数  (z_1, z_2) に関する2次関数  F(z_1, z_2) は、原点にただ1つの極小値を持つ関数でした。関数の概形としては「すり鉢状」の形をしているわけですね。

f:id:tsujimotter:20210217130635p:plain:w360

3Dの図形を思い浮かべながら、説明の方では関数の「等高線」を用いて説明したいと思います。

f:id:tsujimotter:20210217132151p:plain:w360

等高線がすべて楕円になっていることがポイントです。楕円の長軸と短軸が  z_1, z_2 のいずれか一方に対応していて、それぞれ軸の長さが  1/\sqrt{\lambda_1}, 1/\sqrt{\lambda_2} に対応しているわけですね。


さて、これに対して、 \mathbf{y} = P\mathbf{z} なる変換を施すとどうなるでしょうか。  P は直交行列でしたが、2次の直交行列の意味するところは「回転」または「鏡映」です。

軸を回転したり鏡映したりする座標変換というわけですね。

f:id:tsujimotter:20210217132212p:plain:w360

先ほどこの変換を「主軸変換」と言いましたが、これで意味はわかったのではないでしょうか。「主軸」を「変換」していますよね。

逆に考えると、元々の  \mathbf{y} 座標においては、「原点を通る2本の軸」に沿って等高線の楕円の「長軸」と「短軸」が伸びていたわけです。これらを「主軸」といいます。これが主軸変換( \mathbf{y} 座標から  \mathbf{z} 座標への変換)によって、直交する横と縦の軸に置き換わったということになりますね。行列の対角化というのは、まさにこういう幾何的な意味があったというわけです。


また、この変換の際に  \mathbf{z} 座標での2次形式

 \mathbf{z}^T (P^{-1}AP) \mathbf{z} = \lambda_1 z_1^2 + \lambda_2 z_2^2

から  \mathbf{y} 座標での2次形式

 \mathbf{y}^T A \mathbf{y} = ay_1^2 + b y_1 y_2 + c y_2^2

へと変換が行われています。つまり、行列を対角化することは、2次形式でいうところの真ん中の項( y_1 y_2 の項)を消すことに他ならないというわけですね。


最後に、 \mathbf{x} = \mathbf{y} - A^{-1}\mathbf{b} という変換についてですが、これは簡単ですね。ベクトル  \mathbf{y} にベクトル  -A^{-1}\mathbf{b} を足して新たな座標  \mathbf{x} としているわけです。ただの「平行移動」ですね。

f:id:tsujimotter:20210217132230p:plain:w360

つまり、「平方完成」には極小値を原点に移す「平行移動」の役割があった というわけですね。こうやって聞くと確かに1変数のときの平方完成もそうだったなと思いますね。


そんなわけで、それぞれの変換についての幾何的な意味をまとめると

  • 平方完成: 極値を原点に移す平行移動
  • 主軸変換: 等高線の長軸と短軸(主軸)の向きを変える(直交する軸に変換する)

ということになるかなと思います。「平行移動」と「回転(or鏡映)」の組み合わせなので「合同変換」ということですね。面白いですね!


それでは今日はこの辺で!


おまけ:正定値になる条件

正定値という条件が出てきたので「正定値になる条件」について考えてみましょう。実際、行列が正定値、すなわち「固有値が正である」という条件は、少し直感的ではないですよね。

極小値を持つ条件なので、以降  a > 0, \; c > 0 は仮定しておきます。

ここで、 A = \begin{pmatrix} a & b/2 \\ b/2 & c \end{pmatrix} としておいて、行列  A の固有値を考えます。 A の固有値は、あるベクトル  \mathbf{v} が存在して

 A \mathbf{v} = \lambda \mathbf{v}

を満たすような  \lambda のことでした。 A は実対称行列なので、すべての固有値は実数になることに注意します。

単位行列を  I とすると

 (\lambda I - A) \mathbf{v} = \mathbf{0}

を満たすという  \lambda を求める問題となります。このとき、行列  \lambda I - A は退化していますので、行列式が  0 となります。したがって

 \operatorname{det}(\lambda I - A) = \lambda^2 - \operatorname{Tr}(A) \lambda + \operatorname{det}(A) = 0

が成り立ちます。これは  \lambda についての2次方程式となっていて、左辺を固有多項式といったりしますね。


固有多項式を変形すると

 \lambda (\lambda - \operatorname{Tr}(A)) = -\operatorname{det}(A)

ということになります。

ここで、もし  \operatorname{det}(A) > 0 であれば

  \lambda (\lambda - \operatorname{Tr}(A)) < 0

となります。今、 \operatorname{Tr}(A) = a+c > 0 なので、 \lambda の範囲は

 0 < \lambda < \operatorname{Tr}(A)

ということになります。

f:id:tsujimotter:20210217154449j:plain:w300

すなわち、 \lambda は常に正の値をとるということです。これは行列  A が正定値であることを意味します。


よって、前回と同様の結論が得られることになります。

 a > 0, \; c > 0, \; \operatorname{det}(A) = \frac{4ac - b^2}{4} > 0
 \Longrightarrow \;\; A は正定値
 \Longrightarrow \;\; F(x, y) はただ一つの極小値を持つ


結局、前回やったような「 F(x, y) のヘッセ行列の行列式  4ac - b^2 が正である」という条件がそのまま出てくるわけですね。実際、 F(x, y) のヘッセ行列は、 F を偏微分してみることで

 \displaystyle H(F) = 2A

であることがわかります。なるほどそれはその通りという感じですね。