MATLAB,Python,Scilab,Julia比較 第2章 その35【対称行列と二次形式⑦】

MATLAB,Python,Scilab,Julia比較 第2章 その35【対称行列と二次形式⑦】 数値計算
MATLAB,Python,Scilab,Julia比較 第2章 その35【対称行列と二次形式⑦】

バックナンバーはこちら。
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

実行結果

フクさん
フクさん

実行結果は以下。

二次形式の多項式表現と行列表現の計算(Scilab)
-->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を使う必要がある。

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

コメント

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