2変数関数のグラフの鳥瞰図を線画で描くには、 mesh() という関数を使う。 meshc() は同時に等高線も描く。
シェーディングされた面の集まりとして描くには、 surf(), surfc() を使う。
のグラフを描く場合、
Z(j+1,i+1) に
を収めるというのが味噌。
,
Y(j+1)
) の場合も、
2次元配列
(それぞれ
X(j+1,i+1)
,
Y(j+1,i+1)
) の場合もある。
後者は meshgrid() で作るのが簡単。
size(meshgrid(a:(b-a)/m:b,c:(d-c)/n:d))
とすると、 [n+1 m+1] という結果が返ってくる。
の各辺を m, n 等分するグリッドを作る
[X,Y]=meshgrid(a:(b-a)/m:b,c:(d-c)/n:d);
,
,
,
,
,
の場合、
7行6列の行列が返る。
>> a=0;b=5;c=0;d=3;m=5;n=6;
>> size(meshgrid(a:(b-a)/m:b,c:(d-c)/n:d))
ans =
7 6
>> [X,Y]=meshgrid(a:(b-a)/m:b,c:(d-c)/n:d)
X =
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
Y =
0 0 0 0 0 0
0.5000 0.5000 0.5000 0.5000 0.5000 0.5000
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
1.5000 1.5000 1.5000 1.5000 1.5000 1.5000
2.0000 2.0000 2.0000 2.0000 2.0000 2.0000
2.5000 2.5000 2.5000 2.5000 2.5000 2.5000
3.0000 3.0000 3.0000 3.0000 3.0000 3.0000
素朴な発想?
% [-2,2]×[-1,1] で x^2-y^2 のグラフを描く
nx=50;
ny=40;
hx=4/nx;
hy=2/ny;
X=-2:hx:2;
Y=-1:hy:1;
Z=zeros(ny+1,nx+1);
for i=0:nx
x=-2+i*hx;
for j=0:ny
y=-1+j*hy;
Z(j+1,i+1)=x^2-y^2;
end
end
clf
mesh(X,Y,Z)
MATLABらしい書き方?
nx=50;
ny=40;
hx=4/nx;
hy=2/ny;
[X,Y]=meshgrid(-2:hx:2,-1:hy:1);
Z=X.^2-Y.^2;
clf
mesh(X,Y,Z)
mesh(), meshc(), surf(), surfc() の違いを見ておこう。
2017-06-19