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

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

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

はじめに

正規方程式を導出するまでの説明。
今回は二次形式の多項式表現と行列表現の計算をMATLABで実施する。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

ロードマップおよび数式【再掲】

フクさん
フクさん

現在の場所としては二次形式。

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

MATLABで二次形式の多項式表現と行列表現の計算をしてみる回だね。

フクさん
フクさん

そして、行列表現の数式も再掲しておく。

\(
x^TA\circ x^T
\begin{bmatrix}
1\\
\vdots\\
1
\end{bmatrix}
\)

フクさん
フクさん

この数式に対して、多項式表現と行列表現の計算をしてみることになる。

\(
3x^2+2y^2+5xy
\)

MATLABコード

フクさん
フクさん

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);

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=reshape(Y,N,N);
subplot(2,1,2);
mesh(ax, ay, matY);

polyY
matY

実行結果

フクさん
フクさん

実行結果は以下となる。

二次形式の多項式表現と行列表現の計算(MATLAB)
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 =

      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

考察

太郎くん
太郎くん

まぁ数式通りに計算したってことだね。
二次形式の多項式表現、行列表現で同じ結果になったのもわかる。

太郎くん
太郎くん

入力が\(x,y\)のに変数だから、meshgridで平面座標を生成してる感じか。

フクさん
フクさん

そうそう。

フクさん
フクさん

meshgridはx軸とy軸を入力すると、その範囲に於いての平面座標を生成してくれる。

太郎くん
太郎くん

3次元グラフはmeshという関数で実現してる感じか。
さほど手間がかかる感じではないね。

フクさん
フクさん

この手の処理はMATLABが一番癖が無くて扱いやすいな。

まとめ

フクさん
フクさん

まとめだよ。

  • 二次形式の多項式表現と行列表現の計算をMATLABで実施。
  • meshgridにx軸とy軸を入力とすることで平面座標が得られる。
  • 平面座標を元に2変数の演算を実施。
  • 演算結果をmesh関数を使用して3Dグラフに表示。

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

コメント

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