Как я могу создать контур для пользовательской функции? - PullRequest
3 голосов
/ 24 сентября 2010

У меня есть пользовательская функция, которая возвращает либо 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 на контурной карте.

Ответы [ 2 ]

5 голосов
/ 24 сентября 2010

Если ваша функция myFunction не предназначена для обработки матричных входов, то вы можете использовать функцию ARRAYFUN , чтобы применить ее ко всем соответствующим записям x и 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 , чтобы сгенерировать контурный график для вышеуказанных данных. Поскольку ваши данные z имеют только 2 разных значения, вам, вероятно, имеет смысл построить только один уровень контура (который будет иметь значение 0,5, на полпути между вашими двумя значениями). Вместо этого вы можете использовать функцию CONTOURF , которая создает цветные контуры, которые четко покажут, где находятся единицы и нули:

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


ПРИМЕЧАНИЕ: Поскольку вы наносите на график данные, которые имеют только единицы и нули, построение контуров может быть не лучшим способом для его визуализации. Вместо этого я бы использовал что-то вроде функции IMAGESC , например:

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

Имейте в виду, что ось Y на этом графике будет перевернута относительно графика, созданного с помощью CONTOURF .

2 голосов
/ 24 сентября 2010

Будет делать следующее:

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
...