10

Octave を使用して、 f(x,y) = x^2 + 3y のような 2 つの変数を持つかなり単純な関数をプロットしたいと考えています。単一変数関数をプロットするのは非常に簡単ですが、2 つの変数関数を実行する方法を見つけるのに苦労しています。これを行う最良の方法を知っている人はいますか?

4

3 に答える 3

7

それが誰かを助けるかもしれない場合に備えて...私は受け入れられた答えのコードをOctaveで実行し、このプロットを得ました:

ここに画像の説明を入力

しかし、対角線だけでなく、x と y のデカルト積のすべての点に対する関数が本当に必要だったので、メッシュ関数を使用して、x、y 平面に投影された等高線を含むこの 3D プロットを取得しました。

x = [-10:.1:10];
y = [-10:.1:10];
[xx, yy] = meshgrid (x, y);
z = xx.^2 + 3*yy;
mesh(x, y, z)
meshc(xx,yy,z) 
xlabel ("x");
ylabel ("y");
zlabel ("f(x,y)");
title ("f(x,y) = x^2 + 3y");
grid on

ここに画像の説明を入力

プロットのメッシュ ワイヤ テクスチャを取り除くために、関数surfがトリックを行いました。

x = [-10:.1:10];    
y = [-10:.1:10];
[xx, yy] = meshgrid (x, y);
z = xx.^2 + 3*yy;
h = surf(xx,yy,z);
colormap hsv;
set(h,'linestyle','none');
xlabel ("x");
ylabel ("y");
zlabel ("f(x,y)");
title ("f(x,y) = x^2 + 3y");

ここに画像の説明を入力

プロットする別の方法は、等高線を含むヒートマップです。

x = [-10:.1:10];
y = [-10:.1:10];
[xx, yy] = meshgrid (x, y);
z = xx.^2 + yy.*3;
contourf(xx,yy,z);
colormap hsv;
xlabel ("x");
ylabel ("y");
zlabel ("f(x,y)");
title ("f(x,y) = x^2 + 3y");
grid on

ここに画像の説明を入力

完全を期すために、レベルにラベルを付けることができます。

x = [-10:.1:10];
y = [-10:.1:10];
[xx, yy] = meshgrid (x, y);
z = xx.^2 + 3*yy;
[C,h] = contour(xx,yy,z);
clabel(C,h)
xlabel ("x");
ylabel ("y");
zlabel ("f(x,y)");
title ("f(x,y) = x^2 + 3y");
grid on

ここに画像の説明を入力

于 2018-11-11T14:53:31.160 に答える