Документация Engee
Notebook

Графическое сравнение показательных функций

В этом примере рассматривается графический подход к определению большего из двух значений: $e^\pi$ и $\pi^e$.

Для графического сравнения значений $e^\pi$ и $\pi^e$ построим поверхность функции разницы показательных функций $z=x^y-y^x$.

Для этого в первую очередь загрузим и подключим библиотеку PlotlyJS.

In [ ]:
import Pkg
Pkg.add("PlotlyJS")
using PlotlyJS;
   Resolving package versions...
  No Changes to `/user/.project/Project.toml`
  No Changes to `/user/.project/Manifest.toml`

Определим массивы координат поверхности.

In [ ]:
x = 0:0.10:5;
y = 0:0.10:5;
X = [i for i in x, j in 1:length(y)];
Y = [j for i in 1:length(x), j in y];
Z = X.^Y-Y.^X;

Определим функцию SurfPlot для построения поверхности, в которой также установлены параметры элементов оформления и обзора области построения.

In [ ]:
function SurfPlot(surf)
    PlotlyJS.plot(surf,
        Layout(
            title=attr(
            text="Сравнение показательных функций",
            x=0.5 # выравнивание текста
            ),
        scene=attr(
            camera_eye=attr(x=0.5, y=-0.8, z=0.6), # углы обзора
            aspectratio=attr(x=0.5, y=0.5, z=0.5) # масштабирование осей
            )
        )
    )
end;

Построим поверхность по заданной функции.

In [ ]:
surf = PlotlyJS.surface(x = X, y = Y, z = Z)
SurfPlot(surf)
Out[0]:

В плоскости $Z=0$ нанесём контур на построенную поверхность.

In [ ]:
surf = PlotlyJS.surface(
    x = X, y = Y, z = Z,
    contours = attr(
        z=attr(
            show=true,
            start=0.0, # начальный уровень контуров
            size=1.0, # шаг нанесения контуров
            color="black"
        ),
        z_end = 0.1 # конечный уровень контуров
    )
)

SurfPlot(surf)
Out[0]:

На построенных контурах имеется несколько точек целочисленных решений уравнения $x^y-y^x=0$. Построим эти точки на контурах.

In [ ]:
# массивы целочисленных решений уравнения
ix=[0,1,2,2,3,4,4,5] 
iy=[0,1,2,4,3,2,4,5]
iz=zeros(8)

scat = PlotlyJS.scatter3d(
    x=ix, y=iy, z=iz,
    mode="markers",
    showlegend=false,
    marker=attr(
        size=6,
        color="black"
        )
)

SurfPlot([surf,scat])
Out[0]:

Теперь построим точки функции для искомых $x$ и $y$ по координатам: $(\pi, e, \pi^e-e^\pi)$ и $(e, \pi, e^\pi-\pi^e)$.

In [ ]:
e=exp(1)
tx=[pi,e]
ty=[e,pi]
textt=["pi,e", "e,pi"]
tz=tx.^ty-ty.^tx

scat2 = PlotlyJS.scatter3d(
    x=tx, y=ty, z=tz,
    mode="markers",
    showlegend=false,
    hovertext=["pi^e-e^pi", "e^pi-pi^e"],
    marker=attr(
        size=6,
        color="green",
        
    )
)

SurfPlot([surf, scat, scat2])
Out[0]:

Из построения видно, что точка с координатами $(e, \pi, e^\pi-\pi^e)$ располагается в той части поверхности, которая находится выше плоскости $Z = 0$, а точка $(\pi, e, \pi^e-e^\pi)$ - в части поверхности ниже секущей плоскости. То же самое можно установить при наведении курсора на эти точки в области построения.

Отсюда можно сделать вывод, что значение $e^\pi$ больше $\pi^e$. В подтверждение рассчитаем эти значения.

In [ ]:
e^pi
Out[0]:
23.140692632779263
In [ ]:
pi^e
Out[0]:
22.459157718361038

Вывод

В данном примере мы рассмотрели наглядный способ графического нахождения большего из двух значений.