Gnuplot无法绘制函数f(x)=(abs(1-(x/0.001))**(-1/2))但Mathematica可行
Gnuplot绘制函数的解决思路
针对你遇到的empty y range错误,按以下步骤排查解决:
优化函数表达式:将原式改写为更清晰的形式,避免运算优先级歧义:
f(x) = 1/sqrt(abs(1 - 1000*x))原表达式中
x/0.001等价于1000*x,用整数乘法替代除法能减少计算误差,同时1/sqrt(...)比**(-1/2)更直观,降低解析错误概率。精准设置xrange,避开奇点:函数在
x=0.001处分母为0,是奇点,必须避开。若要绘制(0.001,100]区间,设置xrange时给奇点留极小间隔:set xrange [0.001001:100]直接设
[0.001:100]会让Gnuplot在奇点处计算出NaN或无穷大,导致自动范围判断失效。手动指定yrange:该函数在
x>0.001时,值域是(0, +∞),但实际在x=100时y≈0.00316。根据你想展示的区域手动设置yrange,比如:set yrange [0:100] # 展示从低到高的变化,可根据需求调整上限禁止Gnuplot自动判断y范围,避免因采样点分布问题误判为空范围。
提升采样密度:奇点附近函数变化极快,默认采样点可能无法捕捉到有效数值,增加采样点数量:
set samples 5000采样点越多,图像越精准,也能降低因采样点过少导致的范围判断错误。
检查Gnuplot版本:旧版本对绝对值、分数指数的处理可能存在bug,升级到最新稳定版可解决这类兼容性问题。
最后执行绘制命令:
plot f(x)
内容的提问来源于stack exchange,提问作者Fernando L. R.
相关产品推荐
相关产品推荐

