MATLAB,Python,Scilab,Julia比較 第2章 その38【二次形式の微分②】

MATLAB,Python,Scilab,Julia比較 第2章 その38【二次形式の微分②】 数値計算
MATLAB,Python,Scilab,Julia比較 第2章 その38【二次形式の微分②】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia2-backnumber/

はじめに

正規方程式を導出するまでの説明。
今回は二次形式の微分(勾配)について。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

ロードマップ【再掲】

フクさん
フクさん

ロードマップを再掲しておこう。
現在は、二次形式の微分のところになる。

正規方程式に至る道、二次形式、対称行列、二次形式の微分、グラム行列、二乗和誤差、正規方程式
太郎くん
太郎くん

前回は、\(\nabla\)とか意味不明なのが出てきたけど、
今回はそれを使うって感じか。

フクさん
フクさん

(意味不明って・・・。)

二次形式の微分(勾配)

フクさん
フクさん

二次形式の行列表現で、2変数あると想定すると、
行列Aは2×2の正方行列となる。

太郎くん
太郎くん

二次形式の行列表現ルールとしてはそんな感じだったね。

フクさん
フクさん

まずは、二次形式の行列表現から、多項式表現に変換して、
それに対して、\(\nabla\)による勾配関数を導出してみる。

太郎くん
太郎くん

魔境な波動を感じる・・・。

二次形式の行列表現から多項式表現へ

フクさん
フクさん

まずは行列表現から多項式表現に変換。

\(
\begin{eqnarray}
f(x_1,x_2)=x^T A x&=&
\begin{bmatrix}
x_1 \\ x_2\\
\end{bmatrix}^T
\begin{bmatrix}
a_1 & a_2 \\
a_2 & a_3
\end{bmatrix}
\begin{bmatrix}
x_1\\x_2
\end{bmatrix}
\\&=&
\begin{bmatrix}
a_1x_1+a_2x_2 \\ a_2x_1+a_3x_2\\
\end{bmatrix}^T
\begin{bmatrix}
x_1\\x_2
\end{bmatrix}\\
&=&a_1x_1^2+a_2x_1x_2+a_2x_1x_2+a_3x_2^2\\
&=&a_1x_1^2+2a_2x_1x_2+a_3x_2^2
\end{eqnarray}
\)

二次形式の勾配

フクさん
フクさん

そして、二次形式の勾配は\(\nabla f(x_1,x_2)\)と表現できるので、以下になる。

\(
\begin{eqnarray}
\nabla f(x_1,x_2)&=&
\begin{bmatrix}
\displaystyle\frac{\partial f(x_1,x_2)}{\partial x_1} \\
\displaystyle\frac{\partial f(x_1,x_2)}{\partial x_2}\\
\end{bmatrix}=
\begin{bmatrix}
2a_1x_1+2a_2x_2 \\
2a_2x_1+2a_3x_2 \\
\end{bmatrix}\\&=&
2
\begin{bmatrix}
a_1x_1 + a_2x_2 \\
a_2x_1 + a_3x_2 \\
\end{bmatrix}=
2
\begin{bmatrix}
a_1 & a_2 \\
a_2 & a_3 \\
\end{bmatrix}
\begin{bmatrix}
x_1 \\
x_2 \\
\end{bmatrix}\\&=&
2Ax
\end{eqnarray}
\)

フクさん
フクさん

よって、以下になる。

\(
\nabla x^T Ax=2Ax
\)

太郎くん
太郎くん

んー?
ベクトルの中の足し算が、行列に変わる???

ベクトル内の足し算が行列に変形される理由

フクさん
フクさん

もう少し丁寧に書くとこんな感じかな。

\(
\begin{eqnarray}
\begin{bmatrix}
a_1x_1 + a_2x_2 \\
a_2x_1 + a_3x_2 \\
\end{bmatrix}&=&
\begin{cases}
a_1x_1+a_2x_2\\
a_2x_1+a_3x_2
\end{cases}\\
\begin{bmatrix}
a_1 & a_2 \\
a_2 & a_3 \\
\end{bmatrix}
\begin{bmatrix}
x_1 \\
x_2 \\
\end{bmatrix}&=&
\begin{cases}
a_1x_1+a_2x_2\\
a_2x_1+a_3x_2
\end{cases}\\
\end{eqnarray}
\)

太郎くん
太郎くん

あ、そっか。
方程式として考えると同じになるのか。

フクさん
フクさん

これにより、二次形式の微分(勾配)が簡単に求められることがわかった。

まとめ

フクさん
フクさん

まとめだよ。

  • ∇を使用して、二次形式の微分(勾配)を求める。
  • 二次形式を多項式表現し、偏微分。
  • 偏微分した結果を行列形式に戻す。
  • 結果としてシンプルな偏導関数が求められる。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました