tags:

views:

42

answers:

2

I have a custom function which returns either 0 or 1 depending on two given inputs.

function val = myFunction(val1,val2)

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

end

How can I create a contour plot of the function over the x,y coordinates generated by the following meshgrid?

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

This plot will just simply display where the function is 0 or 1 on the contour map.

+1  A: 

If your function myFunction is not designed to handle matrix inputs, then you can use the function ARRAYFUN to apply it to all the corresponding entries of x and 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)

Then you could use the function CONTOUR to generate a contour plot for the above data. Since your z data only has 2 different values, it would probably make sense for you to only plot one contour level (which would be at a value of 0.5, halfway between your two values). You might also want to instead use the function CONTOURF, which produces color-filled contours that will clearly show where the ones and zeroes are:

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


NOTE: Since you are plotting data that only has ones and zeroes, plotting contours may not be the best way to visualize it. I would instead use something like the function IMAGESC, like so:

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

Keep in mind the y-axis in this plot will be reversed relative to the plot generated by CONTOURF.

gnovice
A: 

The following will do it:

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
Reinderien

related questions