固有値、固有ベクトルの応用例（二次形式）

## はじめに
この記事は[古川研究室 Workout_calendar](https://qiita.com/flab5420/private/aee38a24be700d146817) 13日目の記事です。
本記事は古川研究室の学生が学習の一環として書いたものです。内容が曖昧であったり表現が多少異なったりする場合があります。

また、この記事は全3部作となっており、この記事はいわば中編となっています。
前編:[固有値と固有ベクトルの性質](https://qiita.com/syusyumk2/items/79c08335e90e8d7de036)
中編:固有値と固有ベクトルの応用例(二次形式)←今ここ
後編:[固有値と固有ベクトルの応用例(主成分分析)](https://qiita.com/syusyumk2/items/4aa7615c0c72a33456f8)


前編では固有値、固有ベクトルとは一体どんなものなのかについて簡単な線形変換から以下の性質を持つものであると理解しました。

> - 固有値は線形変換後の各座標の倍率
> - 固有ベクトルは線形変換後も向きが変わらないベクトル

しかし固有値、固有ベクトルが具体的にどう使われているか、どう便利なのかについては前回の記事で言及していませんでした。
そこで今回は固有値、固有ベクトルの数学的な応用例の一つである二次形式を紹介します。
## 二次形式への応用
固有値、固有ベクトルの大事さを体感するために、二次形式という数学的な応用例を試してみましょう。

次のような多項式があるとします($a,b,c$は定数)。

```math
\begin{equation}
ax^2 + 2bxy + cy^2 = 0 \tag{1}
\end{equation}
```
このような式を2変数の2次形式と呼びます。$x^2$も$xy$も$y^2$も全部次数は2ですから、2次形式なんですね。
二次形式は大きく二つに分類されます。「ずっと0以上またはずっと0以下を取るもの」と「正と負両方の値をとるもの」です。また、常に0以上の値を取るものを正値定符号、常に0以下の値を取るものを負値定符号といいます。
問題なのは与えられた二次形式をパッと見たところで、それが正値定符号なのか、負値定符号なのか、はたまたそのどちらでもなく正と負を両方取るのかが分からないんですね。これは悔しい。何とかして求めたいところです。
まあごり押しで調べることもできるっちゃできます。以下にその方法を示します。
例として、以下のような二次形式が与えられたとします。

```math
\begin{equation}
3x^2 + 4xy + 3y^2 = 0 
\end{equation}
```
この二次形式が正値定符号、負値定符号であるかは式変形をすることで分かります。

```math
\begin{equation}
\frac{1}{2}(x-y)^2 +\frac{5}{2}(x+y)^2 = 0 
\end{equation}
```

上式から、この関数が取りうる値は全て正の値であることがわかるので、この二次形式は正値定符号であることがわかりました。


しかしこのように式変形が毎回うまいこと行くとは限りません。ですが行列を使うことで、与えられた二次形式が正値定符号か、負値定符号であるか、そのどちらでもないかが容易に判別できます。
ここから先は数式で追っていきましょう。まず、(1)で示した二次形式の式を行列で以下のように書き換えます。

```math
\begin{equation}
ax^2+2bxy+cy^2 = 
\begin{pmatrix}
x \\
y 
\end{pmatrix}
\cdot
\begin{pmatrix}
a & b \\
b & c 
\end{pmatrix}
\begin{pmatrix}
x \\
y 
\end{pmatrix}
\tag{2}
\end{equation}
```
この式にある(x,y)を固有ベクトル$\mathbf{e}_1$,$\mathbf{e}_2$を用いて線形変換します。

```math
\begin{equation}
\begin{pmatrix}
x \\
y 
\end{pmatrix} = 
\begin{pmatrix}
\mathbf{e}_1 &\mathbf{e}_2 
\end{pmatrix}
\begin{pmatrix}
x' \\
y' 
\end{pmatrix}
\end{equation}
```
これを(2)に代入すると次のようになります。

```math
\begin{equation}
ax^2+2bxy+cy^2 = 
\begin{pmatrix}
\mathbf{e}_1 &\mathbf{e}_2 
\end{pmatrix}
\begin{pmatrix}
x' \\
y' 
\end{pmatrix}
\cdot
\begin{pmatrix}
a & b \\
b & c 
\end{pmatrix}
\begin{pmatrix}
\mathbf{e}_1 &\mathbf{e}_2 
\end{pmatrix}
\begin{pmatrix}
x' \\
y' 
\end{pmatrix}
\tag{3}
\end{equation}
```

$\mbox{行列}A=\begin{pmatrix}
a & b \\\\ 
b & c 
\end{pmatrix}の固有ベクトル\mathbf{e}_1,\mathbf{e}_2は行列Aによって線形変換されても固有値倍されるだけなので以下のように変形できます。$

```math
\begin{equation}
\begin{pmatrix}
a & b \\
b & c 
\end{pmatrix}
\begin{pmatrix}
\mathbf{e}_1 &\mathbf{e}_2 
\end{pmatrix}=
\begin{pmatrix}
\lambda_1 \mathbf{e}_1 &\lambda_2 \mathbf{e}_2 
\end{pmatrix}=
\begin{pmatrix}
\mathbf{e}_1 &\mathbf{e}_2 
\end{pmatrix}
\begin{pmatrix}
\lambda_1 & 0 \\
0 & \lambda_2 
\end{pmatrix}
\tag{4}
\end{equation}
```

変形した式(4)を(3)に代入します。

```math
\begin{equation}
ax^2+2bxy+cy^2 = 
\begin{pmatrix}
\mathbf{e}_1 &\mathbf{e}_2 
\end{pmatrix}
\begin{pmatrix}
x' \\
y' 
\end{pmatrix}
\cdot
\begin{pmatrix}
\mathbf{e}_1 &\mathbf{e}_2 
\end{pmatrix}
\begin{pmatrix}
\lambda_1 & 0 \\
0 & \lambda_2 
\end{pmatrix}
\begin{pmatrix}
x' \\
y' 
\end{pmatrix}
\end{equation}
```

さらに転置と内積の公式$A\mathbf{x}\cdot \mathbf{y}=\mathbf{x}\cdot A^T \mathbf{y}$を用います。
またここで公式の変数である行列$A$,ベクトル$\mathbf{x,y}$はそれぞれ

```math
\begin{equation}
A=
\begin{pmatrix}
\mathbf{e}_1 &\mathbf{e}_2 
\end{pmatrix}
\end{equation}
```

```math
\begin{equation}
\mathbf{x}=
\begin{pmatrix}
x' \\
y' 
\end{pmatrix}
\end{equation}
```

```math
\begin{equation}
\mathbf{y}=
\begin{pmatrix}
\mathbf{e}_1 &\mathbf{e}_2
\end{pmatrix}
\begin{pmatrix}
\lambda_1 & 0 \\
0 & \lambda_2 
\end{pmatrix}
\begin{pmatrix}
x' \\
y' 
\end{pmatrix}
\end{equation}
```
です。この公式を用いることで式は以下のように変形できます。

```math
\begin{equation}
ax^2+2bxy+cy^2 = 
\begin{pmatrix}
x' \\
y' 
\end{pmatrix}
\cdot
\begin{pmatrix}
\mathbf{e}_1 \\
\mathbf{e}_2
\end{pmatrix}
\begin{pmatrix}
\mathbf{e}_1 &\mathbf{e}_2 
\end{pmatrix}
\begin{pmatrix}
\lambda_1 & 0 \\
0 & \lambda_2 
\end{pmatrix}
\begin{pmatrix}
x' \\
y' 
\end{pmatrix}
\end{equation}
```
固有ベクトル$\mathbf{e}_1$,$\mathbf{e}_2$はそれぞれ直交ベクトルなので

```math
\begin{equation}
ax^2+2bxy+cy^2 = 
\begin{pmatrix}
x' \\
y' 
\end{pmatrix}
\cdot
\begin{pmatrix}
1 & 0 \\
0 & 1 
\end{pmatrix}
\begin{pmatrix}
\lambda_1 & 0 \\
0 & \lambda_2 
\end{pmatrix}
\begin{pmatrix}
x' \\
y' 
\end{pmatrix}
=\lambda_1 x'^2 + \lambda_2 y'^2
\end{equation}
```
と変形できます。これにより、二次形式をその表現行列の固有値で表現することができました。
この式は固有値が全て正だと正値定符号、全て負だと負値定符号、正と負が混ざったときはそのどちらでもないことを示しています。
つまり、二次形式の表現行列の固有値がわかれば、どのような極値を取るのかがわかるということです。
実際の例を見てみましょう
与えられた二次形式の式が、先ほどと同じ$3x^2-4xy+3y^2$だとします。この式を(2)の形に書き換えると、

```math
\begin{equation}
3x^2-4xy+3y^2 = 
\begin{pmatrix}
x \\
y 
\end{pmatrix}
\cdot
\begin{pmatrix}
3 & -2 \\
-2 & 3 
\end{pmatrix}
\begin{pmatrix}
x \\
y 
\end{pmatrix}
\end{equation}
```
となります。
表現行列Aの固有方程式から固有値を求めると

```math
\begin{equation}
|A-\lambda I| = 
\begin{vmatrix}
3-\lambda & -2 \\
-2 & 3-\lambda 
\end{vmatrix}
=(3-\lambda)^2-4
=\lambda ^2-6\lambda+5
=(\lambda-1)(\lambda-5)
\end{equation}
```
となり固有値は1,5となり両方正なので正値定符号であることがわかりました。
実際にそうなのかグラフにしてみてみましょう。

```
%matplotlib nbagg
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
a=3
b=-2
c=3
x = np.arange(-3, 3, 0.01)
y = np.arange(-3, 3, 0.01)
X, Y = np.meshgrid(x, y)
A=[[a,b],
   [b,c]]
w,v=np.linalg.eig(A)
print('固有値1:%f' % w[0])
print('固有値2:%f' % w[1])
if(w[0]>0 and w[1]>0):
    print('正値定符号')
if(w[0]<0 and w[1]<0):
    print('負値定符号')
if((w[0]>0 and w[1]<0) or (w[0]<0 and w[1]>0)):
    print('どちらでもない')
Z =a*X**2+2*b*X*Y+c*Y**2

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(X,Y,Z)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()
```
![](https://i.imgur.com/HPXWzOw.png)


実行結果から、この関数は正の値しか取っていないことがわかりました。

おまけとして負値定号となるパターンと、正と負どちらの値もとるパターンも示したいと思います。
二次形式$-3x^2+4xy-3y^2$の場合
![](https://i.imgur.com/MQcx4xv.png)
この場合は表現行列の固有値は-1,-3と全て負の値となっているため、関数も負の値しかとっていません。
二次形式$3x^2-3y^2$の場合
![](https://i.imgur.com/cIOP5e3.png)
この関数の表現行列の固有値は3,-3と正と負両方の値を取ります。そのため関数の値も正と負どちらとも取っています。
## まとめ
今回の記事では数学的な応用例である二次形式について記述しました。
パッと見どんな値を取るかわからない二次形式という関数が、固有値、固有ベクトルのおかげでざっくりと、正値定符号であるか負値定符号であるか、そのどちらでもないかが判別できました。
次回はいよいよ最終章となる3本目ですが、1本目の記事で軽く触れた固有値問題の簡単な例である主成分分析について書きたいと思います。
前編:[固有値と固有ベクトルの性質](https://qiita.com/syusyumk2/items/79c08335e90e8d7de036)
中編:固有値と固有ベクトルの応用例(二次形式)←今ここ
後編:[固有値と固有ベクトルの応用例(主成分分析)](https://qiita.com/syusyumk2/items/4aa7615c0c72a33456f8)

参考文献:ゼロから学ぶ線形代数、機械学習のエッセンス