GNUPLOT

-не так Часто Задаваемые Вопросы-

обновлено 2010/12/26

Построение неявной функции

Функция, которая не определена в виде y=f(x), но описанна как f(x)+g(y)=0, не может быть задана в gnuplot. Чтобы построить такую функцию, необходимо использовать параметрическое представление или функцию, определенную как 3D поверхность, и найти пересечения кривой z=0 с плоскостью.

Если функция может быть определена параметрами, ее легко построить. Например, уравнение окружности x*x+y*y=r*r, параметрически определяется x=r*sin(t) и y=r*cos(t). В gnuplot:

gnuplot> set parametric
 
        dummy variable is t for curves, u/v for surfaces
gnuplot> set size square
gnuplot> r=1
gnuplot> plot r*sin(t),r*cos(t)

Когда функция настолько сложна, что использование параметров затруднительно, определяют функцию как 3D поверхность. Следующий пример для x^3-2xy + y^3=0 .

gnuplot> f(x,y)= x**3 - 2*x*y + y**3

Пересечение f(x,y) и z=0 - решение. Для установки проекции z=0 в нижней части 3D построения, используется set ticslevel 0.

gnuplot> set xrange [-2:2]
gnuplot> set yrange [-2:2]
gnuplot> set zrange [0:5]
gnuplot> set ticslevel 0
gnuplot> set view 40,340
gnuplot> set isosample 100,100
gnuplot> splot f(x,y)
implicit1

Кривая, расположенная снизу, - решение f(x,y)=0. Контурные линии дают нам значения этой прямой, записанные в файл.

gnuplot> set xrange [-2:2]
gnuplot> set yrange [-2:2]
gnuplot> set zrange [*:*]
gnuplot> set cont base
gnuplot> set cntrparam levels discrete 0,0
gnuplot> unset surface
gnuplot> set surface
gnuplot> set term table
gnuplot> set output "cont.dat"
gnuplot> splot f(x,y)

Затем данные о файле приведены в обычном порядке.

gnuplot> set xrange [-2:2]
gnuplot> set yrange [-2:2]
gnuplot> set size square
gnuplot> plot "cont.dat" w l
implicit2

Следующий метод не использует временный файл. контурные линии показаны от -0.4 с шагом 0.1, и каждая строка соответствует решению x^3-2xy + y^3=const.

gnuplot> set xrange [-2:2]
gnuplot> set yrange [-2:2]
gnuplot> set view 0,0
gnuplot> set isosample 100,100
gnuplot> set size square
gnuplot> set cont base
gnuplot> set cntrparam levels incre -0.4,0.1,0.4
gnuplot> unset surface
gnuplot> splot f(x,y)
implicit3
up