バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia2-backnumber/
はじめに
正規方程式を導出するまでの説明。
今回は二次形式の微分(勾配)を実際の多項式に適用したものをMATLABで算出&プロットしてみる。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
ロードマップ&数式【再掲】
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
今回から、各ツール、各言語で、二次形式の微分を確認するんだよね?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうそう。
まずはMATLABだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
その前にロードマップを再確認。
二次形式の微分のところだね。
![正規方程式に至る道、二次形式、対称行列、二次形式の微分、グラム行列、二乗和誤差、正規方程式](https://www.simulationroom999.com/blog/wp-content/uploads/2023/03/02_正規方程式に至る道-1024x313.png)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そして、扱う式は以下になる。
二次形式の多項式
\(
f(x,y)=3x^2+2y^2+5xy
\)
二次形式の多項式の偏導関数
\(
\displaystyle\frac{\partial f(x,y)}{\partial x}=6x+5y
\)
\(
\displaystyle\frac{\partial f(x,y)}{\partial y}=4y+5x
\)
二次形式の行列形式の偏導関数
\(
\nabla f(x,y) =
\begin{bmatrix}
\displaystyle\frac{\partial f(x,y)}{\partial x} \\
\displaystyle\frac{\partial f(x,y)}{\partial y}
\end{bmatrix}=
2AX=2
\begin{bmatrix}
3 & 5/2 \\
5/2 & 2
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\)
MATLABコード
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
MATLABコードは以下になる。
a=3;
b=2;
c=5;
A=[a c/2; c/2 b];
N=6;
ax=linspace(0,10,N);
ay=linspace(0,10,N);
[x,y]=meshgrid(ax,ay);
polyY1=6*x+5*y;
polyY2=5*x+4*y;
subplot(2,2,1);
mesh(ax, ay, polyY1);
subplot(2,2,2);
mesh(ax, ay, polyY2);
X=[x(:)';y(:)'];
Y=2*A*X;
matY1=reshape(Y(1,:),N,N);
matY2=reshape(Y(2,:),N,N);
subplot(2,2,3);
mesh(ax, ay, matY1);
subplot(2,2,4);
mesh(ax, ay, matY2);
polyY1
polyY2
matY1
matY2
処理結果
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そして処理結果。
![二次形式の微分(MATLAB)、Figure1](https://www.simulationroom999.com/blog/wp-content/uploads/2023/03/02_二次形式の微分MATLAB-1024x619.png)
polyY1 =
0 12 24 36 48 60
10 22 34 46 58 70
20 32 44 56 68 80
30 42 54 66 78 90
40 52 64 76 88 100
50 62 74 86 98 110
polyY2 =
0 10 20 30 40 50
8 18 28 38 48 58
16 26 36 46 56 66
24 34 44 54 64 74
32 42 52 62 72 82
40 50 60 70 80 90
matY1 =
0 12 24 36 48 60
10 22 34 46 58 70
20 32 44 56 68 80
30 42 54 66 78 90
40 52 64 76 88 100
50 62 74 86 98 110
matY2 =
0 10 20 30 40 50
8 18 28 38 48 58
16 26 36 46 56 66
24 34 44 54 64 74
32 42 52 62 72 82
40 50 60 70 80 90
考察
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
二次形式の多項式としての偏導関数と行列形式による偏導関数を元にそれぞれを算出及びプロットしてる感じだね。
結果としては完全一致か。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そうだね。
算出して点としては、それほど多くないが、それぞれの性質の比較としてはOKだろう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 二次形式の多項式としての偏導関数、行列形式による偏導関数を元にMATLABで算出及びプロット。
- ともに同一の算出結果とプロットが得られた。
バックナンバーはこちら。
コメント