Построение кусочного участка поверхности - PullRequest
1 голос
/ 13 марта 2019

Я пытаюсь научиться строить поверхностный участок с кусочными условиями, но не могу понять это самостоятельно. Это то, что я имею до сих пор:

[X,Y] = meshgrid(-10:0.1:10,0:.1:4);
Z =  ((X.^2)/100).*(1-(((Y-2).^2)/4));
C = X.*Y;
surf(X,Y,Z,C)
colorbar
xlabel('X')
ylabel('Y')
zlabel('Z')
%The block of code above looks great for what I need initially

% Now the commented code below is what I was working on and 
% I feel that I have defined the piece-wise function correctly 
% but cannot plot it properly

% syms p(Y)
% p(Y) = piecewise(Y<2, 1, Y>2, -1)
% [X,Y] = meshgrid(-10:0.1:10,0:.1:4);
% Z = zeros(size(X));
% Z = p(Y).*(((X.^2)/100).*(1-(((Y-2).^2)/4)));
% C = X.*Y;
% surf(X,Y,Z,C)
% colorbar

Второй блок в некоторой степени основан на том, как это можно сделать в клене. Однако, основываясь на документации MATLAB, эта версия кажется наиболее правильной после попытки незначительных изменений.

1 Ответ

1 голос
/ 13 марта 2019

В этом решении используется простая анонимная функция .В общем, лучше убедиться, что они векторизованы (используйте .* вместо *, .^ вместо ^), чтобы максимизировать их полезность и интеграцию с другими функциями MATLAB.

yh =@(y) 1*(y<2) + (-1)*(y>2);  % note yh(2) = 0 (can change this if reqd)

[X,Y] = meshgrid(-10:0.1:10,0:.1:4);
Z = yh(Y).*(((X.^2)/100).*(1-(((Y-2).^2)/4)));
C = X.*Y;
surf(X,Y,Z,C)
colorbar

Surface plot

Отказ от ответственности: Я признаю, что у меня недостаточно навыков с символическими возможностями MATLAB.Я уверен, что другой пользователь может предоставить ответ, если это требуется.

Другие визуализации: Будущие посетители могут быть заинтересованы в других типах сюжетов для 3 переменных (например, X, Y, Z).Хорошие примеры здесь .

...