使用gnuplot的传染媒介领域

ved*_*gom 13 gnuplot

如何绘制矢量场,其中每个点(x,y)的方向由tangent(alpha) = f(x, y)?给出?

小智 19

据我所知,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
Run Code Online (Sandbox Code Playgroud)

如果您不坚持使用gnuplot,还有其他工具可以更好或更轻松.我个人使用渐近线.有一个在渐近线绘制一个向量场的例子在这里.


Aki*_*oss 12

看起来这个问题/答案有点陈旧,因为我认为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
Run Code Online (Sandbox Code Playgroud)

这里,最初的问题是如何绘制矢量场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
Run Code Online (Sandbox Code Playgroud)

有关help special-filenames详细信息,请参阅

HIH