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
実行結果
実行結果は以下となる。
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比較ページはこちら
コメント