【入門】対称行列と二次形式(Scilab)【数値計算】

【入門】対称行列と二次形式(Scilab)【数値計算】 数値計算
【入門】対称行列と二次形式(Scilab)【数値計算】

MATLAB、Scilab、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/

はじめに

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

を書き直したもの。

正規方程式を導出するための対称行列と二次形式の話。
今回は二次形式の多項式表現と行列表現の計算をScilabで実施する。

ロードマップ【再掲】

ロードマップと今回使用する数式を再掲。

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

\(
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を使う必要がある。

MATLAB、Python、Scilab、Julia比較ページはこちら

コメント

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