【作者前言】
對于科技工作者來說,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 )
?
?
這里的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
本文轉載自馬歡老師科學網博客,轉載目的在于知識分享,本文觀點不代表V-suan云平臺立場。
原創文章,作者:菜菜歐尼醬,如若轉載,請注明來源華算科技,注明出處:http://www.zzhhcy.com/index.php/2023/12/01/b99cc3b252/