Векторное поле с использованием gnuplot

Как построить векторное поле, где направление в каждой точке (x, y) задается символом tangent(alpha) = f(x, y)?

Ответ 1

Насколько я могу судить, gnuplot может только строить векторные поля при чтении данных из файла. Ваш файл должен будет иметь 4 столбца, x, y, deltax и delta y, а gh = nuplot затем построит вектор из (x, y) в (x + deltax, y + deltay) для каждой строки в файле:

plot ’file.dat’ using 1:2:3:4 with vectors head filled lt 2

Если вы не настаиваете на использовании gnuplot, есть и другие инструменты, которые могут улучшить это или, по крайней мере, легче. Я лично использую asymptote. Существует пример векторного поля, построенного в асимптоте здесь.

Ответ 2

Кажется, этот вопрос/ответ немного устарел, и поскольку я считаю, что gnuplot немного изменился в последних версиях, возможно, ответ должен быть обновлен.

Я нашел здесь приятное и компактное решение: http://gnuplot.10905.n7.nabble.com/Vector-Fields-td3627.html

который я буду сообщать для удобства:

set xrange [-5:5]
set yrange [-5:5]
# only integer x-cordinates
set samples 11
# only integer y-cordinates
set isosamples 11
# we need data, so we use the special filename "++", which
# produces x,y-pairs
plot "++" using 1:2:1:(2.*$2) with vectors

Здесь исходный вопрос заключался в том, как построить векторное поле F(x,y) = <x, 2y>. Трюк находится в сюжете "++", который является специальным именем файла, которое позволяет использовать функции в спецификаторе using.

Итак, как сказал @Jan в своем ответе, gnuplot нуждается в 4-х полях в файле данных для построения векторного поля, но здесь поля синтезированы и производятся с двумя функциями.

Эквивалентная формулировка с использованием определенных функций может быть:

set xrange [-5:5]
set yrange [-5:5]
dx(x) = x
dy(x) = 2*x
plot "++" using 1:2:(dx($1)):(dy($2)) w vec

Подробнее см. help special-filenames.

Е.И.В.