如何绘制自定义函数?

时间:2010-09-24 03:39:27

标签: matlab function plot contour

我有一个自定义函数,根据两个给定的输入返回01

function val = myFunction(val1, val2)

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

end

如何在以下meshgrid生成的x,y坐标上创建函数的等高线图?

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

此图只是在等高线图上显示函数01的位置。

2 个答案:

答案 0 :(得分:5)

如果您的函数myFunction不是为处理矩阵输入而设计的,那么您可以使用函数ARRAYFUN将其应用于xy的所有相应条目:

[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为上述数据生成等高线图。由于您的z数据只有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生成的图形反转。

答案 1 :(得分: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