Поверхность, заданная кусочной функцией двух аргументов

Форум, посвященный общим вопросам, связанным с MATLAB

Модератор: Admin

progerdoggy
Пользователь
Сообщения: 2
Зарегистрирован: Пн июл 08, 2019 9:09 pm

Поверхность, заданная кусочной функцией двух аргументов

Сообщение progerdoggy » Пн июл 08, 2019 9:17 pm

Всем привет! Только начинаю знакомиться с matlab, по воле случая проходим ее на практике в институте. Препод показал, как в чудесном Maple (лицензию на которой институт не покупает более, а посему заниматься на нем мы не будем) нарисована поверхность, заданная кусочной функцией:
x1^2+x2^2 - 25, если x1^2+x2^2 <= 25
x1^2+(x2-9)^2 - 16, если x1^2+(x2-9)^2 <= 16
0, в остальных случаях

(Получается 2 таких горки и плоскость) рисовалась эта красота при помощь plot3d(f, x1 = -10..10, x2 = -10..15), и при использовании f = piecewise(..)

И вот теперь нам сказали тоже самое сделать в matlab
Я уже третий час ищу, как. Через тот же piecewise не получается, почему-то... Помогите :с

vvamy
Эксперт
Сообщения: 654
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Поверхность, заданная кусочной функцией двух аргументов

Сообщение vvamy » Ср июл 10, 2019 11:19 am

Так?

Код: Выделить всё

[X1, X2] = meshgrid((-20:20)',  (-20:20)');
Y = zeros(size(X1));
Y1 = zeros(size(X1));
Y2 = zeros(size(X1));
Y1 = X1.^2 + X2.^2 - 25;
Y1(Y1 > 0) = 0;
Y2 = X1.^2 + (X2 - 9).^2 - 16;
Y2(Y2 > 0) = 0;
Y = Y1 + Y2;
figure, surf(Y)
title('Y')
Виталий

progerdoggy
Пользователь
Сообщения: 2
Зарегистрирован: Пн июл 08, 2019 9:09 pm

Re: Поверхность, заданная кусочной функцией двух аргументов

Сообщение progerdoggy » Пт июл 12, 2019 10:07 pm

vvamy писал(а):Так?

Код: Выделить всё

[X1, X2] = meshgrid((-20:20)',  (-20:20)');
Y = zeros(size(X1));
Y1 = zeros(size(X1));
Y2 = zeros(size(X1));
Y1 = X1.^2 + X2.^2 - 25;
Y1(Y1 > 0) = 0;
Y2 = X1.^2 + (X2 - 9).^2 - 16;
Y2(Y2 > 0) = 0;
Y = Y1 + Y2;
figure, surf(Y)
title('Y')


да) Правда я сама доперла до другого метода... более тупого, наверное. Функция выбора и fsurf

(в отдельном файле)
function Z = FunChoice(X,Y)
if X^2 + Y^2 <= 25
Z = X.^2 + Y.^2 - 25;
else
if X^2 + (Y-9)^2 <= 16
Z = X.^2 + (Y-9).^2 - 16;
else
Z = 0;
end
end
end
___
%построение поверхности, заданной кусочной функцией двух аргументов
figure
%рисуем поверхность и добавляем контуры
fsurf(@FunChoice, [-10 10 -10 15], 'EdgeColor', 'none', 'ShowContours','on')
%заголовок и подписи осей
title('Поверхность, заданная кусочной функцией двух аргументов')
xlabel('x');
ylabel('y');
zlabel('z');
grid on
colormap jet