簡體   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