实用干货|Gnuplot科学绘图(九)-栅格以及方程数值解估算

作者前言

对于科技工作者来说,gnuplot 是一个非常好用的绘图软件。因为感慨于gnuplot 中文资料和文档的缺乏,我于数月之前在科学网博客开始撰写“谈谈gnuplot”系列博文,至今已写了四十五篇。

 

虽然还有不少细节问题没有涉及,但是我觉得这些博文已经可以构成一个比较完整的gnuplot 中文教程。对大多数用户来说,这一系列博文已经涵盖了日常应用的需要。为了方便大家阅读,我现在将这一系列博文集结编辑成为此教程,以CC BY-NC-SA 知识共享协议发布。

 

我们现在来画一个0 阶贝塞尔函数J0(x):

gnuplot> set term wxt enhanced
gnuplot> set xlabel “X”
gnuplot> set ylabel “Y”
gnuplot> set xrange [ 0 : 1 0 ]
gnuplot> set xtics 0 ,1 ,10
gnuplot> unset key
gnuplot> set title “0阶贝塞尔函数J_0( x ) ”
gnuplot> plot besj0 ( x )

 

实用干货|Gnuplot科学绘图(九)-栅格以及方程数值解估算

 

这里的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 . 6 5 )
0.00101216621937318
gnuplot> print besj0 ( 8 . 6 6 )
-0.0017019446057587
gnuplot> print besj0 ( 8 . 6 5 3 7 )
7.5770361108123 e-06
gnuplot> print besj0 ( 8 . 6 5 3 6 )
3.47225104115535 e-05
gnuplot> print besj0 ( 8 . 6 5 3 8 )
-1.95681245811775 e-05

 

所以在8.6 附近,J0(x) = 0 精确到小数点后4 位的数值解为8.6537,这和我们查表的结果一模一样。由于我们已经通过图像知道了数值解的大概位置,再加上合理利用线性插值,我们可以很快得到精确的结果。

 

本文整理自马欢老师科学网博客,特此感谢原作者的分享。

 

想看到Gunplot实际操作?”基于CP2K电子结构理论计算线上培训班”回放视频现已上线,CP2K开发和应用者兰晶岗博士主讲,内容涵盖Linux入门知识,密度泛函/优化方法/自洽场, 使用数据库构建晶体模型,表面吸附/过渡态理论。长达13个小时的实操讲解,100%好评率,精彩不容错过!

 

课程试听请戳:https://ke.qq.com/course/270047

实用干货|Gnuplot科学绘图(九)-栅格以及方程数值解估算

本文转载自马欢老师科学网博客,转载目的在于知识分享,本文观点不代表V-suan云平台立场。

原创文章,作者:菜菜欧尼酱,如若转载,请注明来源华算科技,注明出处:https://www.v-suan.com/index.php/2023/12/01/b99cc3b252/

(0)

相关推荐