小出昭一郎『量子力学(Ⅰ)』のp.51にある1次元調和振動子のグラフを再現します。
可視化するのは以下の関数です。
この関数は下記の方程式を満たします。
ディラック定数 はそのまま使うと都合が悪いので とおいて下記の関数を使います。
def X(n,M,w): A = sqrt(sqrt(w*M/pi)/2^n/factorial(n)) return lambda x : A*hermite(n,x)*exp(-x^2*M*w/2)
上記プログラムをmain.sageとして保存し、Sage Shellでロードしておきます。
sage: load('main.sage')
n=0
本記事では一貫して とします。
sage: plot(X(0,1,1),(-5,5)) Launched png viewer for Graphics object consisting of 1 graphics primitive
n=1
sage: plot(X(1,1,1),(-5,5)) Launched png viewer for Graphics object consisting of 1 graphics primitive
n=2
sage: plot(X(2,1,1),(-5,5)) Launched png viewer for Graphics object consisting of 1 graphics primitive
n=3
sage: plot(X(3,1,1),(-5,5)) Launched png viewer for Graphics object consisting of 1 graphics primitive
n=12
sage: plot(X(12,1,1),(-8,8)) Launched png viewer for Graphics object consisting of 1 graphics primitive
追記1
の n を変えてアニメーションにしました。
sage: l = [text("n={}".format(i),(-7,0.7),fontsize=18,color="black",bounding_box={'boxstyle':'round','fc':'w'})+plot(X(i,1,1),(-10,10),ymin=-1,ymax=1) for i in range(20)] sage: animate(l) Launched gif viewer for Animation with 20 frames
追記2
の2乗を定義する。
def X2(n,M,w): A = sqrt(sqrt(w*M/pi)/2^n/factorial(n)) return lambda x : (A*hermite(n,x)*exp(-x^2*M*w/2))^2
2乗したものは規格化されているから積分すると1になる。sage には numerical_integral という便利なものがあるので n=12 のグラフで数値積分をしてみる。この積分は下の図の灰色部分の面積を表す。
x の範囲は本来実数全体にわたるが、数値積分なので-10から10までの積分とした。
単に計算してもつまらないので、これもアニメーションにしてみる。ごちゃごちゃしているが下記に示すプログラムで実行できる。
sage: l = [graphics_array([[plot(lambda x:0.0 if x>a else X2(12,1,1)(x),-10,10,fill=True)+plot(X2(12, ....: 1,1),a,10)],[plot(lambda x:numerical_integral(X2(12,1,1),-10,x)[0],-10,10,plot_points=100)+poin ....: t((a,numerical_integral(X2(12,1,1),-10,a)[0]),size=70,rgbcolor="red")]]) for a in sxrange(-10,1 ....: 0,1)] sage: animate(l) Launched gif viewer for Animation with 20 frames
結果は以下のとおり。下の図は関数 で、積分値の変化を表す。
灰色が広がるにつれて面積が1に近づいていることがわかる。
参考
調和振動子 - Wikipedia
Orthogonal Polynomials — Sage 9.2 Reference Manual: Functions
LaTeXコマンド - 括弧の大きさを指定
LaTeXコマンド集 - ギリシャ文字
Text in plots — Sage 9.2 Reference Manual: 2D Graphics
Numerical Integration — Sage 9.2 Reference Manual: Symbolic Calculus
Graphics arrays and insets — Sage 9.2 Reference Manual: 2D Graphics
Points — Sage 9.2 Reference Manual: 2D Graphics
Pythonのlambda(ラムダ式、無名関数)の使い方 | note.nkmk.me