3

与えられた2つの入力のいずれか0またはそれに応じて返すカスタム関数があります。1

function val = myFunction(val1, val2)

  % logic to determine if val=1 or val=0

end

x,y次のメッシュグリッドによって生成された座標上で関数の等高線図を作成するにはどうすればよいですか?

meshgrid(0:.5:3, 0:.5:3);

0このプロットは、関数がどこにあるか、または1等高線図上に表示されるだけです。

4

2 に答える 2

5

関数myFunctionが行列入力を処理するように設計されていない場合は、関数ARRAYFUNxを使用して、およびの対応するすべてのエントリに適用できますy

[x,y] = meshgrid(0:0.5:3);      %# Create a mesh of x and y points
z = arrayfun(@myFunction,x,y);  %# Compute z (same size as x and y)

次に、関数CONTOURを使用して、上記のデータの等高線図を生成できます。データには2つの異なる値しかないため、z1つの等高線レベル(2つの値の中間の0.5の値)のみをプロットすることはおそらく理にかなっています。代わりに、関数CONTOURFを使用することもできます。この関数は、1と0がどこにあるかを明確に示す色で塗りつぶされた輪郭を生成します。

contourf(x,y,z,1);  %# Plots 1 contour level, filling the area on either
                    %#   side with different color


注: 1と0しかないデータをプロットしているため、等高線をプロットすることは、それを視覚化するための最良の方法ではない場合があります。代わりに、次のように、関数IMAGESCのようなものを使用します。

imagesc(x(1,:),y(:,1),z);

このプロットのy軸は、CONTOURFによって生成されたプロットに対して反転することに注意してください。

于 2010-09-24T04:06:51.213 に答える
2

以下はそれを行います:

function bincontour
    clear; clc;

    xrange = 0:.5:3;
    yrange = 1:.5:5;
    [xmesh, ymesh] = meshgrid(xrange, yrange);
    z = arrayfun(@myFunction, xmesh, ymesh);

    contourf(xrange, yrange, z, 5)
end

function val = myFunction(val1, val2)
    val = rand() > 0.5;
end
于 2010-09-24T04:32:02.620 に答える