Как построить векторное поле, где направление в каждой точке (x, y) задается символом tangent(alpha) = f(x, y)
?
Векторное поле с использованием gnuplot
Ответ 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
.
Е.И.В.