瞬间集分享 http://blog.sciencenet.cn/u/yusufma 激光,光谱学,生物医学光子学

博文

谈谈gnuplot(十三):栅格以及方程数值解估算

已有 6950 次阅读 2011-10-26 03:18 |个人分类:开源软件|系统分类:科研笔记|关键词:学者| 数学, 软件, 画图, Gnuplot, Grid

我们现在来画一个 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(十四):第二坐标轴

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-23 16:34

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部