您的位置: 主页 > 改变头脑 >利用Gnuplot软体绘製似氢原子轨域的等高线图(下) >

利用Gnuplot软体绘製似氢原子轨域的等高线图(下)


2020-06-19


连结:利用Gnuplot软体绘製似氢原子轨域的等高线图(上)

利用Gnuplot软体绘製似氢原子轨域的等高线图(下)

图四、利用 gnuplot 软体绘製 $$3p_x$$ 轨域波函数的形状及其等高线图(作者绘製)

图四中 $$z$$ 轴即为 $$3p_x$$ 波函数的值,由图中可看出其值有正亦有负,正值代表在 $$xy$$ 平面上方有凸起的部分,有一个山峰及一个较平缓的小山丘,凹下去的部分为负值,有一个深的山谷及一平缓的小山沟。一般教科书常用等高线图的方式,用平面图形表达三度空间的讯息,在图三中的第 15 到 17 行即为在 gnuplot 中绘製等高线图的指令:

set contour
set cntrparam levels 9
set cntrparam levels incremental -2.e-02,5.0e-03

第一行设定要画等高线图,第二行要画 $$9$$ 条等高线图,第 $$3$$ 行代表 $$z$$ 轴的大小从 $$-0.02$$ 开始画第 $$1$$ 条,每增加 $$0.005$$ 增加一条,可以想见的在第 $$5$$ 条的等高线是画在 $$z=0$$ 即波函数为 $$0$$ 的地方,从图四中的下半部可看出围住中间二团椭圆圏圏的淡蓝色圆圏和 $$y$$ 轴,即为节面的所在。图四中的座标轴格式及最右边的图例,在 gnuplot 中是用下列指令来控制:

set tics font “Times,11” ; set key at screen 0.95,0.84

tics 为座标轴上数字的设定,字体设为 Times,大小为 11 号字。Key 则为图例的设定,程式有内定的值包括大小、颜色等,我们可以自行变换,在这裏只设定其摆放在萤幕的位置 (at screen 0.95,0.84)。如果我们想绘製 $$2p_x$$ 轨域,其电子出现机率密度在 $$xy$$ 平面上的分布图及等高线图,仅需将图三的后一行修改为下式即可:

splot u*cos(v),u*sin(v),(p2xorbital(u,v)**2) title “”

由于 $$2p_x$$ 及 $$3d_{xy}$$ 的波函数在图三中均已设定过,所以直接代入上式即可,其中 p2xorbital(u,v)**2 表示为 $$2p_x$$ 波函数的平方,即为电子出现的机率密度。另外图三的第 17 行,要修改如下:

set cntrparam levels incremental 1.0e-4,1.0e-03

重新执行程式后所得的结果如图五,由于电子出现机率密度没有负值,所以图五只有山峰没有山谷,而机率密度为 $$0$$ 的地方,在图五中并没有显现出来。

利用Gnuplot软体绘製似氢原子轨域的等高线图(下)

图五、利用 gnuplot 软体绘製 $$2p_x$$ 轨域电子出现机率密度分布及其等高线图(作者绘製)

如果想要绘製图一 $$3d_{xy}$$ 轨域的电子出现机率密度之分布情形及其等高线图,只要将图三的最后一行改成:splot u*cos(v),u*sin(v),(dxyorbital(u,v)**2) title “”,当然还要修改一些细节,例如标题、等高线的範围等,读者可自行练习。

三、等高线图及极大值

目前为止 gnuplot 软体似乎很神奇,只要给它一个函数,及适当的参数及座标轴範围,便能迅速的画出精緻实用的图形,然而使用者仍有雾裏看花的感觉,这个软体究竟是如何运作的?

事实上它是一种专注于绘图的软体工具,适用于各学科,其核心机制就是输入一堆数据,画出最佳图形,因此只要依照它的逻辑,给它适当的 $$u$$、$$v$$ 参数範围,程式就依解析度的设定(以3D绘图为例 isosample 50,50),自动将 $$u$$ 及 $$v$$ 的区间各切割为 $$50$$ 点,然后将一点一点的参数值代入函数中,例如 $$f(u,v)$$,算出其值,然后按照各点的座标 $$(u,v,f(u,v))$$ 将该点描绘出来,最后输出图形。

依照这个逻辑,图形中的任一点的函数值,程式已经运算处理完毕,但是我们不知道程式是如何储存?存在何处?还好我们依然可以依照其逻辑,在 gnuplot 中写一段指令集,取出我们想要特殊的位置座标,例如想要截取图四 $$3p_x$$ 函数的极大值及极小值?可以在图三最后一行画出图形的指令之前,加入下列指令集:

wmax=-1.0 ; wmin=1.0

do for [i=0:50] {

do for [j=0:50] {

wx=(20./50.)*i

wy=(2.*pi/50.)*j

if (p3xorbital(wx,wy)>=wmax) {wmax= p3xorbital(wx,wy);xmax=wx;ymax=wy}

if (p3xorbital(wx,wy)<=wmin) {wmin=p3xorbital(wx,wy);xmin=wx;ymin=wy}

}

}

上列指令集的大意为:先设定 $$2$$ 个变数 wmax、wmin 分别存放波函数的极大值及极小值,先预设各为 $$-1.0$$ 及 $$1.0$$,显然此值并不合理,经过后面程式的检查,一定会被取代掉。

然后将 $$x$$、$$y$$ 轴的座标指定到 wx、wy,将 $$x$$ 轴的区间 $$20$$,分成 $$51$$ 点,每点的间隔 $$20/50$$,将 $$y$$ 轴的区间 $$2\pi/50$$,分成 $$50$$ 点,每点的间隔 $$2\pi/50$$,接下来由 i、j 二个迴圏,来检查波函数的极大值及极小值,i 值从 $$0$$ 开始到 $$50$$ 结束,每次 wx 改变为 wx=(20/50)*i,wy 的改变由 j 控制:wy=(2π/50)*j。

当固定一个 i 值时,分别代入不同的 $$51$$ 个 j 值,每次均以以 if 指令检查 p3xorbital(wx,wy)>=wmax 是否为真?如果为真,则 wmax 就以 p3xorbital(wx,wy) 取代,顺便将此时的座标 wx、wy 以 xmax、ymax 记录下来,如果 if 指令逻辑检查后若为伪,则波函数的极大值不做取代,直至 i、j 二个迴圏均完成。

另外,极小值也是以相同的方法检查,执行完毕时,就会二组数据,分别储存波函数的极大值及极小值的座标。我们也可以下列指令,将其座标值以蓝色字体,在萤幕的适当位置列印出来:

set label sprintf(“wavefunction max = %7.4f, %7.4f, %7.4f”,xmax*cos(ymax), xmax*sin(ymax), \ wmax) at screen 0.5,0.4 textcolor “blue”

set label sprintf(“wavefunction min = %6.4f, %6.4f, %6.4f”,xmin*cos(ymin), xmin*sin(ymin), \ wmin) at screen 0.5,0.35 textcolor “blue”

有了上列观念以后,便可以进一步了解,等高线图是以何种逻辑绘製出来的。

想要在二度空间表达三度空间的讯息,首先必须了解三度空间的所有座标值,接下来选择 $$xy$$ 平面,此平面的每个 $$(x,y)$$ 座标均有一个 $$z$$ 值,此时我们可以选择 $$z$$ 值为特定值的所有点,将其连结成一条线即为等高线,此说法和先前的叙述相同,此等高线相当于 $$z$$ 等于某特定值时和 $$xy$$ 平行的平面与波函数的相交点所连结的线,再将其投影到 $$xy$$ 平面上,取几组 $$z$$ 值,就有几条等高线。

依照这个逻辑,我们也可以在 gnuplot 内写一个小程式,单独将等高线图画出来,幸好软体内有现成指令可以轻易完作任务,以图四、图五所列,如欲单独呈现等高线图可在图三的指令集中,在 set contour 之后加上一行指令 set view map 及 unset surface 即可得到如图六的等高线图。

图六可以更清楚的看出等高线图的面貎,线间愈密集的地方山坡愈徒,而且可以看到二个节面,一个为 $$r=6$$ 的棕色圏圏,一个为 $$y$$ 轴。显然完成图六的图形尚经过一些修饰的指令,例如相同的等高线用一样的颜色,波函数的值为正时,用实线绘製,为负时用虚线等。

另外,$$x$$ 轴、$$y$$ 轴的比例,图形的标题亦须经过调整,由于无关宏旨,在这裏就不加说明,读者可以自行尝试。

利用Gnuplot软体绘製似氢原子轨域的等高线图(下)

图六、利用 gnuplot 单独绘製 $$3p_x$$ 的等高线图(作者绘製)

四、结论

上二篇相关的文章如前言所述,曾介绍 gnuplot 软体的基本指令操作、及类似程式语言指令集的撰写,并应用在绘製似氢原子各类轨域的立体图形、机率密度函数及径向分布函数对原子半径的分布图等。本文则偏向介绍软体运作的逻辑,如何处理数据及绘图,使读者知其然以外,更能知其所以然,最重要的还是希望能将文中的所有图形,均能亲自绘製出来,经过实做的磨练,会有如人饮水,了然于胸的感觉,甚至激发出不同的想法和应用。

本文除了学习 gnuplot 软体的应用以外,并利用它来绘製似氢原子的波函数在固定平面上,其波函数或波函数平方的分布图,使读者除了明白轨域的形状以外,更能解析其内部的结构,也能了解绘製等高线图的原理,并实际在软体中绘製出来,甚至可以撰写小程式,将波函数的极大值或极小值求出来。文中仅以 $$2p_x$$、$$3p_x$$、$$3d_{xy}$$ 的波函数为例,事实上只要知道波函数,不管主量子数、角动量量子数如何改变,其绘製的方法还是相同,利用 gnuplot 一样可以轻易的完成绘製任务。


参考文献



上一篇:
下一篇: