我们现在来画一个 0 阶贝塞尔函数
J0 (x) :
gnuplot> set term wxt enhanced gnuplot> set xlabel "X" gnuplot> set ylabel "Y" gnuplot> set xrange [0:10] gnuplot> set xtics 0,1,10 gnuplot> unset key gnuplot> set title "0阶贝塞尔函数 J_0(x)" gnuplot> plot besj0(x)
这里的
besj0(x) 就是 gnuplot 里面预定义的 0 阶贝塞尔函数。如果现在请您从这个图上估计出
[0,10] 内
J0 (x) 的零点数值,也就是方程
J0 (x)=0 的解,恐怕您很难说的准确。但是如果为这个图加上栅格(
grid ),就容易多了:
gnuplot> set grid gnuplot> replot
这时我们很容易估计出三个零点的数值:
2.4, 5.5, 8.6 。通过查表我们可以知道,这三个零点比较精确的数值分别为
2.4048, 5.5201, 8.6537 。这和我们的估计值差不太多。如果我们想更精确的估计数值,可以尝试改一下
xrange :
gnuplot> set xrange [8:9] gnuplot> set xtics 8,0.1,9 gnuplot> replot
这相当于把图像在零点附近放大了。把鼠标放在画图区域,画图框左下角就会显示出鼠标所在位置的坐标。现在我们把鼠标放在函数图线和 X 轴的交叉点上,左下角显示的横坐标为
8.65243 ,这和我们查表所得的数值更接近了。
如果想进一步让结果精确一些,我们可以利用 gnuplot 的计算功能。我们可以通过尝试计算的方法获得方程的数值解:
gnuplot> print besj0(8.65) 0.00101216621937318 gnuplot> print besj0(8.66) -0.0017019446057587 gnuplot> print besj0(8.6537) 7.5770361108123e-06 gnuplot> print besj0(8.6536) 3.47225104115535e-05 gnuplot> print besj0(8.6538) -1.95681245811775e-05 所以在
8.6 附近,
J0 (x)=0 精确到小数点后 4 位的数值解为
8.6537 ,这和我们查表的结果一模一样。由于我们已经通过图像知道了数值解的大概位置,再加上合理利用线性插值,我们可以很快得到精确的结果。
转载本文请联系原作者获取授权,同时请注明本文来自马欢科学网博客。 链接地址: https://m.sciencenet.cn/blog-373392-501042.html
上一篇:
谈谈gnuplot(十二):插入 LaTeX 公式 下一篇:
谈谈gnuplot(十四):第二坐标轴