Векторное поле с использованием gnuplot - PullRequest
12 голосов
/ 26 марта 2011

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

Ответы [ 2 ]

19 голосов
/ 27 марта 2011

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

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

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

12 голосов
/ 05 июня 2013

Кажется, этот вопрос / ответ немного устарел, и, поскольку я считаю, что 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 длядальнейшие подробности.

HIH

...