由于 gnuplot 中的突然跳跃而删除垂直线

普特盖伊

我试图在 gnuplot 中绘制一个包含不连续性的函数。因此,gnuplot 会自动绘制一条连接跳跃不连续点的垂直线。我想删除这一行。我环顾四周,找到了两种解决方案,但都没有奏效:一种解决方案是smooth unique在绘图时使用,另一种是在条件形式中定义函数并手动删除不连续性。第一个解决方案根本没有对绘图进行任何更改(至少在视觉上)。第二种解决方案似乎将跳跃不连续的位置向左或向右移动,而不是摆脱垂直线。请注意,我想绘制with lines. 我知道with points有效,但我不想用点来绘制。

set sample 10000
N=50
l1(x)=2*cosh(1/x)
l2(x)=2*sinh(1/x)
Z(x)=l1(x)**N+l2(x)**N
e(x)=(-1/Z(x))*(l2(x)*l1(x)**(N-1)+l1(x)*l2(x)**(N-1))
plot e(x)

产生:

用户8153

如果您需要做的就是删除奇点处的垂直线,您可以使用条件绘图:

plot (x<0 ? 1/x : 1/0)  w l ls 1, (x>0 ? 1/x : 1/0) w l ls 1

在此处输入图片说明

但是,您的函数更复杂:它不能在 0 附近的区域内进行数值计算:

set grid
set xrange [-0.3:0.3]
plot e(x) with linespoints

在此处输入图片说明

如果要信任 Mathematica,则函数 e(x) 在 x 从左侧和右侧分别趋近于 0 时分别为 1 和 -1。但是,您在上图中看到 gnuplot 无法正确评估 x=0.1 处的函数。print e(0.1)-0.0,并且print e(0.05)已经给了NaN在这个区域,函数的分子和分母e(x)变得太大而无法用浮点数处理。

您可以使用条件绘图排除此区域,

plot (x<-0.15 ? e(x) : 1/0)  w l ls 1, (x>0.15 ? e(x) : 1/0) w l ls 1

在此处输入图片说明

或者您必须重写该函数,e(x)以便在其评估中避免非常大的值(如果可能的话)。或者,您可以使用可以切换到更高精度的软件包,例如 Mathematica。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章