Построение неявной функции 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]);
У меня недостаточно репутации, чтобы вставлять картинки:)
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