实现这一目标的一种方法如下:
set isosamples 200, 200
set contour base
unset surface
set cntrparam levels incremental -2,0.2,2
set xr [-4:4]
set yr [-3:3]
x_ref = 2
f(x,y) = (y*(1+1/(x**2 + y**2)))
g(x,y) = 2*x*y / ( (x*x + y*y)**2 + (x*x + y*y) - 2*y*y )
set table 'meta.levels.dat'
splot f(x, y)
set table 'meta.pnts.dat'
splot f(x_ref, y)
unset key
unset table
set terminal pngcairo enhanced size 600, 400
set output 'fig.png'
set style arrow 1 head filled size screen 0.01,30 fixed lc rgb 'dark-red'
set size ratio -1
delta = 0.01
plot \
'meta.levels.dat' w l lc rgb 'black', \
'meta.pnts.dat' every 1:1:0:0:0:0 u (x_ref-delta):($2-g(x_ref,$2)*delta):(delta):(g(x_ref,$2)*delta) with vectors as 1
战略是:
-
首先生成感兴趣函数的轮廓(
f(x,y)
并通过以下方式将其保存到文件中
set table
-
对于选定值
x
(例如
x_ref=2
f(x_ref, y)
. 因为此函数不依赖于
x个
,生成的等高线将只是与
x-
因此,为了绘制与等高线的交点
f(x,y)
,可以只取每个块(每个等高线)的第一个点,并用
x个
-坐标设置为
x_ref
.
-
使用
formula
对于隐式函数的导数,计算等高线的斜率(该导数定义如下
g(x,y)
)
-
with vectors
风格在上面
delta
参数指定在
x个
-方向-这是为了
achieve
只有箭头的头部可见。
最后,图表如下所示: