Конечный результат, который вы ищете, возможен с помощью contourc
или с помощью contour
с указанием одинаковых контуров (изолиний).
Этот ответ расширяет этот ответ в Подход 1 с использованием contourc
и предоставляет простое решение с contour
в Подход 2 .
Вы можете спросить " Почему Подход 1, когда Подход 2 такой простой? "
Подход 1 предоставляет способ прямого доступа к отдельным изолиниям, если вам требуется численный подход к поиску пересечений.
Подход 1
Пример данных:
% MATLAB R2018b
x = 0:0.01:1;
y = 0:0.01:1;
[X,Y] = meshgrid(x,y);
Z = sqrt(X.^3+Y); % Placeholder 1
W = sqrt(X.*Y + X.^2 + Y.^(2/3)); % Placeholder 2
Наложение одиночной изолинии из 2 контуров
Подражая этот ответ и используя
v = [.5 0.75 .85 1]; % Values of Z to plot isolines
мы можем визуализировать эти две функции Z
и W
соответственно.
Мы можем наложить изолинии, так как они разделяют один и тот же домен (x, y) . Например, они оба равны 0,8 , как показано ниже.
val = 0.8; % Isoline value to plot (for Z & W)
Ck = contourc(x,y,Z,[val val]);
Ck2 = contourc(x,y,W,[val val]);
figure, hold on, box on
plot(Ck(1,2:end),Ck(2,2:end),'k-','LineWidth',2,'DisplayName',['Z = ' num2str(val)])
plot(Ck2(1,2:end),Ck2(2,2:end),'b-','LineWidth',2,'DisplayName',['W = ' num2str(val)])
legend('show')
Наложение нескольких изолиний с двух контуров
Мы также можем сделать это для большего количества изолиний за один раз.
v = [1 0.5]; % Isoline values to plot (for Z & W)
figure, hold on, box on
for k = 1:length(v)
Ck = contourc(x,y,Z,[v(k) v(k)]);
Ck2 = contourc(x,y,W,[v(k) v(k)]);
p(k) = plot(Ck(1,2:end),Ck(2,2:end),'k-','LineWidth',2,'DisplayName',['Z = ' num2str(v(k))]);
p2(k) = plot(Ck2(1,2:end),Ck2(2,2:end),'b-','LineWidth',2,'DisplayName',['W = ' num2str(v(k))]);
end
p(2).LineStyle = '--';
p2(2).LineStyle = '--';
legend('show')
Подход 2
Не делая это красиво ...
% Single Isoline
val = 1.2;
contour(X,Y,Z,val), hold on
contour(X,Y,W,val)
% Multiple Isolines
v = [.5 0.75 .85 1];
contour(X,Y,Z,v), hold on
contour(X,Y,W,v)
Это просто, чтобы очистить их для представления. Если val
является скаляром (одно число), то c1 = contour(X,Y,Z,val);
и c2 = contour(X,Y,W,val)
дают доступ к изолинии для каждого контурного графика.