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

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

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

はじめに

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

を書き直したもの。

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

ロードマップ【再掲】

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

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

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\)の2変数だから、meshgridで平面座標を生成してる感じ。
meshgridはx軸とy軸を入力すると、その範囲に於いての平面座標を生成してくれる関数。

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

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

まとめ

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

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

コメント

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