Построение неявной функции x+y-log(x) - log (y) -2 = 0 на 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]); 


У меня недостаточно репутации, чтобы вставлять картинки:)

645   2  

2 ответов:

Это потому, что 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 она полностью не исчезнет.

Если мы используем 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*')

Введите описание изображения здесь

Comments

    Ничего не найдено.