Date Редакция Категория sci Теги gnuplot / графика

Легко построить график функции \(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  # рисуем как поверхность

implicit.png

Вот еще пример — лемниската Бернулли: {\((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)

Получим:

lemniscate.png



Комментарии

comments powered by Disqus