バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia2-backnumber/
はじめに
正規方程式を導出するまでの説明。
今回は二次形式の多項式表現と行列表現の計算をScilabで実施する。
登場人物
博識フクロウのフクさん
イラスト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
ロードマップおよび数式【再掲】
太郎くん
ロードマップと今回使用する数式を再掲。
\(
x^TA\circ x^T
\begin{bmatrix}
1\\
\vdots\\
1
\end{bmatrix}
\)
計算する二次形式の数式
\(
3x^2+2y^2+5xy
\)
フクさん
今回は、Scilabで実施する。
Scilabコード
フクさん
Scilabコードは以下になる。
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);
subplot(2,1,1);
polyY=a.*x.^2+b.*y.^2+c.*x.*y;
mesh(ax, ay, polyY);
X=[x(:)';y(:)'];
Y=X'*A.*X'*ones(2,1);;
matY=matrix(Y,N,N);
subplot(2,1,2);
mesh(ax, ay, matY);
polyY
matY
実行結果
フクさん
実行結果は以下。
-->polyY
polyY =
0. 12. 48. 108. 192. 300.
8. 40. 96. 176. 280. 408.
32. 84. 160. 260. 384. 532.
72. 144. 240. 360. 504. 672.
128. 220. 336. 476. 640. 828.
200. 312. 448. 608. 792. 1000.
-->matY
matY =
0. 12. 48. 108. 192. 300.
8. 40. 96. 176. 280. 408.
32. 84. 160. 260. 384. 532.
72. 144. 240. 360. 504. 672.
128. 220. 336. 476. 640. 828.
200. 312. 448. 608. 792. 1000.
考察
太郎くん
まぁScilabはMATLABとほぼ同じになるよねー。
二次形式の多項式表現、行列表現で同じ結果になったし。
太郎くん
違うところというと、
行列の形状を変えるreshapeがmatrixになっているところかな?
フクさん
そうだね。
Scilabにはreshapeが無いので、類似機能のmatrixを使用している。
太郎くん
似てるけど、細かいところで差が出るのは仕方ない事なのかな・・・。
フクさん
まぁツールとしては別物だからね。
そういうのも含めて、必要に応じて調べていくしかないね。
まとめ
フクさん
まとめだよ。
- 二次形式の多項式表現と行列表現の計算をScilabで実施。
- 基本的にはMATLABと一緒。
- ただし、reshapeの代わりにmatrixを使う必要がある。
バックナンバーはこちら。
コメント