Легко построить график функции \(y = f(x)\) — закон, по которому значениям \(x\) сопоставляются значения {\(y\)}, записан в явном виде. А как построить график, если функция задана так: {\(f(x,y) = g(x,y)\)}? Конечно, можно попытаться разрешить ее относительно {\(y\)}, но это нередко означает, что нужно выполнить целое математическое исследование. Есть более простой способ решения.
Преобразуем функцию к виду {\(f(x,y) - g(x,y) = 0\)}. Многие программы для научной визуализации и, в частности, gnuplot, умеют строить изолинии (линии уровня). Нам нужно построить для функции {\(h(x,y) = f(x,y) - g(x,y)\)} одну-единственную линию уровня: {\(h = 0\)}. Вот как это выглядит
set contour # строим график линий уровня
set cntrparam levels discrete 0 # только один уровень: h(x,y) = 0
set xrange [-2:2] # диапазон значений X
set yrange [-2:2] # диапазон значений Y
set isosamples 1000,1000 # частота дискретизации по X и Y
unset surface # поверхность не отображаем - только линии уровня
set view map # проектируем на плоскость XY
set xlabel "x" # указываем метки осей координат
set ylabel "y"
set nokey # удаляем легенду
set title "Implicit plot of cardioid: (x**2 + y**2 - 1)**3 - x**2*y**3"
splot (x**2 + y**2 - 1)**3 - x**2*y**3 # рисуем как поверхность
Вот еще пример — лемниската Бернулли: {\((x^2+y^2)^2=2a^2(x^2-y^2)\)}. Заменим последние строки предыдущего примера на такие:
set title "Implicit plot of Lemniscate: (x**2 + y**2)**2 - 2*a*(x**2 - y**2)"
a = 1
splot (x**2 + y**2)**2 - 2*a*(x**2 - y**2)
Получим:
Комментарии
comments powered by Disqus