gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:14:58 24 4
gpt4 key购买 nike

我试图在 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)

产生:

最佳答案

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

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

enter image description here

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

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

enter image description here

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

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

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

enter image description here

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

关于gnuplot - 由于 gnuplot 中的突然跳跃而删除垂直线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46901179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com