Как я могу сделать трехмерный график кусочно-зависимой функции двух переменных? - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь построить следующую функцию в MATLAB:

1

Цель состоит в том, чтобы объединить все различные условия в один график, чтобы создать общий график CDF. До сих пор я пробовал следующее:

x=linspace(0,1,20);
y=linspace(0,1,20);
Z=x.^y;
plot3(x,y,Z)
hold on
plot3(x,0,0);
plot3(0,y,0);

Я не уверен, как построить график 1 для x>1, y>1, а также есть ли способ сделать график сплошной поверхностью для этого набора условий. Я попытался использовать генератор rand(), чтобы получить 20+ чисел между 0 и 1, которые показывают область, в которой переменные могут быть расположены. Тем не менее, это выглядит грязно, когда это разброс линий в данной области. Я бы предпочел, чтобы это была твердая поверхность.

Есть ли конкретная команда, которую я могу использовать для этого? Я видел в некоторых примерах, как Mesh(), чтобы сделать график сплошным, но я не уверен, будет ли это работать для набора данных.

1 Ответ

0 голосов
/ 06 ноября 2018

Это можно сделать, сгенерировав регулярную сетку значений x и y с помощью meshgrid, изменив значения в Z с помощью логического индексирования и отобразив результат с surf:

% Grid points spanning from -1 to 2 for x and y:
[x, y] = meshgrid(linspace(-1, 2, 91));

% Fill Z with zeroes to start (satisfies condition 1 by default):
Z = zeros(size(x));

% Condition 2:
index = (x >= 0) & (x <= 1) & (y >= 0) & (y <= 1);
Z(index) = x(index).*y(index);

% Condition 3:
index = (x >= 0) & (x <= 1) & (y > 1);
Z(index) = x(index);

% Condition 4:
index = (y >= 0) & (y <= 1) & (x > 1);
Z(index) = y(index);

% Condition 5:
Z((x > 1) & (y > 1)) = 1;

% Plot surface:
surf(x, y, Z, 'EdgeColor', 'none');

enter image description here

Примечание: Это предполагает, что неопределенные условия, такие как (x < 0 и y > 1) и (y < 0 и x > 1), также должны быть равны нулю.

...