2021年7月7日水曜日

球面調和関数(3)

晩夏・小暑・温風至(あつかぜいたる)

球面調和関数(2)からの続き

あいからわず,球面調和関数に到達していない。Juliaで特殊関数を使うにはどうすればよいか調べる。まあ普通は SpecialFunctions.jl というパッケージを入れればよいと思うのだが,ここには限られたものしかなくて,直交多項式のたぐいは含まれていないので他を探すことになる。ちょっと面倒だ。

この点,Mathematicaはいいのかわるいのか統一的に管理されているので探し回る手間はない。その特殊関数のところをみると,ガンマ関数,ベータ関数,誤差関数,指数積分,直交多項式,ベッセル関数,ルジャンドル関数,双曲線関数,楕円積分,楕円関数,モジュラ形式,ゼータ関数,多重対数関数,マシュー関数,回転楕円体関数,ホイン関数…となっていた。

さて,Juliaである。なるべく多くの特殊関数を1つのパッケージで扱いたいので探したところ,GNU-Scienfitic Library のパッケージ GSL.jl を見つけた。早速試してみると,

using GSL
using Plots
using LinearAlgebra

f1(n,z)=sf_hermite_func(n,z)
x1=0.0:0.01:5.0
y3=[f1.(i,x3) for i=0:4]
g1=plot(x1,y1)

f2(l,z)=sf_legendre_Pl(l,z)
x2=0.0:0.01:1.0
y3=[f2.(i,x2) for i=0:4]
g2=plot(x2,y2)

f3(n,z)=sf_laguerre_n(n,0,z)
x3=0.0:0.1:5
y3=[f3.(i,x3) for i=0:4]
g3=plot(x3,y3)

f4(l,m,z)=sf_legendre_sphPlm(l,m,z)*2*sqrt(pi)
x4=0.0:0.01:1.0
y4=[f4.(i,i-1,x4) for i=1:4]
pushfirst!(y4,f4.(0,0,x4))
g4=plot(x4,y4)

plot(g1,g2,g3,g4,legend=:bottomright)
球面調和関数そのものではないが,球面調和関数の規格化因子を用いたルジャンドル陪関数が用意されているのでほぼそのまま使える。エルミート多項式のところには1次元の量子力学的調和振動子波動関数がそのまま定義されていた。さすがに水素原子波動関数はそうは問屋がおろさない。


図 Juliaでの特殊関数の例

0 件のコメント: