繁体   English   中英

在MATLAB上绘制隐式函数x + y - log(x) - log(y)-2 = 0

[英]Plotting the implicit function x+y - log(x) - log(y) -2 = 0 on MATLAB

我想在Matlab上绘制上述函数,所以我使用了以下代码

ezplot('-log(x)-log(y)+x+y-2',[-10 10 -10 10]);

但是我只是一个空白的屏幕。 但显然至少有一点(1,1)满足等式。 我不认为绘图仪设置有问题,因为我正在获取类似函数的图形

ezplot('-log(y)+x+y-2',[-10 10 -10 10]); 

我没有足够的代表来嵌入图片:)

如果我们在你的函数上使用solve ,我们可以看到你的函数有两个等于零的点。 这些点位于(1, 1)(0.3203 + 1.3354i, pi)

syms x y
result = solve(-log(x)-log(y)+x+y-2, x, y);

result.x
% -wrightOmega(log(1/pi) - 2 + pi*(1 - 1i))
%                                         1

result.y
%   pi
%    1

如果我们仔细研究你的函数,我们可以看到这些值实际上很复杂

[x,y] = meshgrid(-10:0.01:10, -10:0.01:10);
values = -log(x)-log(y)+x+y-2;

whos values
%  Name           Size                 Bytes  Class     Attributes
%  values      2001x2001            64064016  double    complex

似乎在早期版本的MATLAB中, ezplot仅通过考虑数据的实际组件来处理复杂的功能。 因此,这将产生以下图

在此输入图像描述

但是,较新的版本会考虑数据的大小 ,只有当实部和虚部都为零时才会出现零。 在这两点中,只有一点是真实的并且能够绘制; 但是, ezplot的相对粗略的采样无法显示该单点。

您可以使用contourc来确定此点的位置

imagesc(abs(values), 'XData', [-10 10], 'YData', [-10 10]);
axis equal
hold on

cmat = contourc(abs(values), [0 0]);
xvalues = xx(1, cmat(1,2:end));
yvalues = yy(cmat(2,2:end), 1);

plot(xvalues, yvalues, 'r*')

在此输入图像描述

这是因为x = y = 1是给定方程的唯一解。

请注意, x - log(x)最小值为1,并且当x = 1时发生 显然, y - log(y)也是如此。 因此, -log(x)-log(y)+x+y总是大于2,除非在x = y = 1 ,它恰好等于2。

由于您的等式只有一个解,因此图中没有线。

为了使这个可视化,让我们绘制方程

ezplot('-log(x)-log(y)+x+y-C',[-10 10 -10 10]);

对于各种C值。

% choose a set of values between 5 and 2
C = logspace(log10(5), log10(2), 20);

% plot the equation with various values of C
figure
for ic=1:length(C)
    ezplot(sprintf('-log(x)-log(y)+x+y-%f', C(ic)),[0 10 0 10]);
    hold on
end
title('-log(x)-log(y)+x+y-C = 0, for 5 < C < 2');

在此输入图像描述

注意,对于C = 5获得最大曲线。 随着C值的减小,曲线也变小,直到C = 2它完全消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM