前提
この記事では固有関数の可視化を行います。数式などは小出昭一郎『量子力学(Ⅰ)』の2章5節にしたがいます。
時間を含まないシュレーディンガー方程式
に対し、
- : 固有関数、 : 固有値
- 縦横高さがそれぞれ である箱の外では
- と書ける
とします。
方程式を解くと固有関数は
となります。
は量子数といって整数の組になり、量子数が固有関数、固有値を決定します。可視化したいのは固有関数です。3次元空間に値を取るので、そのまま可視化するのが難しいです。やり方としては z の値を変化させながら、 の値を等高線で表示する方法をとります。サイズ の箱の断面を z 軸方向に沿ってみていく感じですね。本記事では、一貫して とします。
プログラム
可視化にはSageMathを使います。
def free_particle(a,b,c,nx,ny,nz): x,y = var('x,y') dz = 0.03 nframe = len([z for z in sxrange(0,c,dz)]) g1 = [contour_plot(sqrt(8/a/b/c)*sin(pi*nx*x/a)*sin(pi*ny*y/b)*sin(pi*nz*z/c), (x,0,a), (y,0,b),colorbar=True,contours=[j for j in sxrange(-1.5,1.5,0.1) ]) for z in sxrange(0,c,dz)] g2 = [text("sin(pi*nz*z/c)",(c*0.7,0.8),bounding_box={'boxstyle':'round', 'fc':'w'}) +plot(sin(pi*nz*x/c), (0,c)) +point((z,sin(pi*nz*z/c)),size=70,rgbcolor="red") for z in sxrange(0,c,dz)] g_list = [graphics_array((g2[i],g1[i])) for i in range(nframe)] return g_list
上記のプログラムを main.sage として保存し、SageShell を立ち上げます。
の場合
さっそく main.sage にて定義した関数 free_particle を使います。
sage: load("main.sage") sage: l = free_particle(1,1,1,2,3,1)
この関数はグラフィックスオブジェクトのリストを返します。リストの要素ひとつひとつがアニメーションを構成する画像に対応しています。下記のように要素を参照すれば、アニメーションのある瞬間を見ることができます。
sage: l[0] /opt/sagemath-9.2/local/lib/python3.7/site-packages/sage/plot/contour_plot.py:208: UserWarning: No contour levels were found within the data range. linewidths=linewidths, linestyles=linestyles) Launched png viewer for Graphics Array of size 1 x 2
図が2つあります。左図は z の変化を表しています。この画像では z=0 です。c=1 としたので z は 0 から 1 まで変化します。また、右図はxy平面における固有関数の値を等高線で表したものになります。z=0 のときは固有関数の定義より になるので、平面上のどの点も灰色(つまり0)です。
z が変化するとxy平面の見え方はどう変わるのでしょうか。さっそくやってみます。
sage: animate(l) /opt/sagemath-9.2/local/lib/python3.7/site-packages/sage/plot/contour_plot.py:208: UserWarning: No contour levels were found within the data range. linewidths=linewidths, linestyles=linestyles) Launched gif viewer for Animation with 34 frames
わりときれいなアニメーションができました。xy平面がくっきりと6つの領域にわかれています(厳密な言い方ではないです)。6というのはもちろん に由来するものですね。高校数学が分かっていればイメージしやすいかと思います。
の場合
sage: l = free_particle(1,1,1,2,3,2) sage: animate(l) /opt/sagemath-9.2/local/lib/python3.7/site-packages/sage/plot/contour_plot.py:208: UserWarning: No contour levels were found within the data range. linewidths=linewidths, linestyles=linestyles) Launched gif viewer for Animation with 34 frames