量子力学にはやたらと特殊関数が登場する. 調和振動子や水素原子などの初歩的な系でさえ可視化に苦労したので, Juliaでの特殊関数の利用方法をまとめておくことにした. コメントに要望などを書き込んで頂ければ追記する.
H 0 ( x ) = 1.0 H_{0}(x) = 1.0 H 0 ( x ) = 1.0
H 1 ( x ) = 2.0 x H_{1}(x) = 2.0 x H 1 ( x ) = 2.0 x
H 2 ( x ) = − 2.0 + 4.0 x 2 H_{2}(x) = -2.0 + 4.0 x^{2} H 2 ( x ) = − 2.0 + 4.0 x 2
H 3 ( x ) = − 12.0 x + 8.0 x 3 H_{3}(x) = -12.0 x + 8.0 x^{3} H 3 ( x ) = − 12.0 x + 8.0 x 3
H 4 ( x ) = 12.0 − 48.0 x 2 + 16.0 x 4 H_{4}(x) = 12.0 - 48.0 x^{2} + 16.0 x^{4} H 4 ( x ) = 12.0 − 48.0 x 2 + 16.0 x 4
H 5 ( x ) = 120.0 x − 160.0 x 3 + 32.0 x 5 H_{5}(x) = 120.0 x - 160.0 x^{3} + 32.0 x^{5} H 5 ( x ) = 120.0 x − 160.0 x 3 + 32.0 x 5
H 6 ( x ) = − 120.0 + 720.0 x 2 − 480.0 x 4 + 64.0 x 6 H_{6}(x) = -120.0 + 720.0 x^{2} - 480.0 x^{4} + 64.0 x^{6} H 6 ( x ) = − 120.0 + 720.0 x 2 − 480.0 x 4 + 64.0 x 6
H 7 ( x ) = − 1680.0 x + 3360.0 x 3 − 1344.0 x 5 + 128.0 x 7 H_{7}(x) = -1680.0 x + 3360.0 x^{3} - 1344.0 x^{5} + 128.0 x^{7} H 7 ( x ) = − 1680.0 x + 3360.0 x 3 − 1344.0 x 5 + 128.0 x 7
H 8 ( x ) = 1680.0 − 13440.0 x 2 + 13440.0 x 4 − 3584.0 x 6 + 256.0 x 8 H_{8}(x) = 1680.0 - 13440.0 x^{2} + 13440.0 x^{4} - 3584.0 x^{6} + 256.0 x^{8} H 8 ( x ) = 1680.0 − 13440.0 x 2 + 13440.0 x 4 − 3584.0 x 6 + 256.0 x 8
H 9 ( x ) = 30240.0 x − 80640.0 x 3 + 48384.0 x 5 − 9216.0 x 7 + 512.0 x 9 H_{9}(x) = 30240.0 x - 80640.0 x^{3} + 48384.0 x^{5} - 9216.0 x^{7} + 512.0 x^{9} H 9 ( x ) = 30240.0 x − 80640.0 x 3 + 48384.0 x 5 − 9216.0 x 7 + 512.0 x 9
⋮ \vdots ⋮
パッケージ
Juliaの特殊関数のパッケージはSpecialFunctions.jl である. ガンマ関数, ベッセル関数, 誤差関数, 楕円積分をはじめとし, 多くの特殊関数はこちらのパッケージで利用可能である. しかし, 量子力学に登場するエルミート多項式, ラゲールの陪多項式, ルジャンドルの陪多項式などはサポートされていないので, SpecialPolynomials.jl を利用する. これらの多項式はPolynomials.jl と連携することで, 微分演算 や積分演算 が可能であり, 文字列として出力することも可能であるから, さらにLatexify.jl と連携することでLaTeX表示も可能である. 今回はLaTeX表示に少し拘り, LaTeXStrings も利用した. 他にもPrintf.jl, Plots.jlを使用した.
LaTeX表示
Latexify.jlに文字列として数式を渡すことで, LaTeX出力してくれる.
a x 2 + b x + c ax^{2} + bx + c a x 2 + b x + c
f ( x ) = 1 2 ⋅ x f\left( x \right) = \frac{1}{2} \cdot x f ( x ) = 2 1 ⋅ x
f _ 1 ( x ) = 1 2 ⋅ x \mathrm{f\_1}\left( x \right) = \frac{1}{2} \cdot x f_1 ( x ) = 2 1 ⋅ x
残念なことにf 1 ( x ) f_1(x) f 1 ( x ) となってほしいのにf _ 1 ( x ) \mathrm{f\_1}(x) f_1 ( x ) となってしまう. LaTeXStrings.jlを利用すると, そのままLaTeXとして解釈されるので今度は式の方がおかしくなってしまう.
f 1 ( x ) = 1 / 2 ∗ x f_1(x) = 1/2*x f 1 ( x ) = 1/2 ∗ x
この問題はLaTeXStrings.jlとLatexify.jlをうまく組み合わせると解決できる. env=:raw
で1/2*x
を\frac{1}{2} x
に変換し, latexstring()
に渡すことで結合できる. ついでにcdot=false
で掛け算の⋅ \cdot ⋅ を非表示にできる.
\frac{1}{2} \cdot x
f 1 ( x ) = 1 2 ⋅ x f_1(x) = \frac{1}{2} \cdot x f 1 ( x ) = 2 1 ⋅ x
f 1 ( x ) = 1 2 x f_1(x) = \frac{1}{2} x f 1 ( x ) = 2 1 x
エルミート多項式
エルミート多項式 H n ( x ) H_n(x) H n ( x ) は調和振動子のSchrödinger方程式の固有関数 に登場する. ロドリゲスの公式では
H n ( x ) = ( − 1 ) n e x 2 d n d x n e − x 2
H_n(x) = (-1)^n \mathrm{e}^{x^2} \frac{\mathrm{d}^n}{\mathrm{d}x^n} \mathrm{e}^{-x^2}
H n ( x ) = ( − 1 ) n e x 2 d x n d n e − x 2
と表される. SpecialPolynomials.jlでサポートされており, H n ( x ) H_n(x) H n ( x ) はbasis(Hermite, n)(x)
のように書けばよい. n = 0 ∼ 5 n=0\sim5 n = 0 ∼ 5 の実装が正しいか, LaTeXStrings.jlとLatexify.jlを用いて数式を表示して確認した. Wikipedia と見比べて頂きたい.
H 0 ( x ) = 1.0 H_{0}(x) = 1.0 H 0 ( x ) = 1.0
H 1 ( x ) = 2.0 x H_{1}(x) = 2.0 x H 1 ( x ) = 2.0 x
H 2 ( x ) = − 2.0 + 4.0 x 2 H_{2}(x) = -2.0 + 4.0 x^{2} H 2 ( x ) = − 2.0 + 4.0 x 2
H 3 ( x ) = − 12.0 x + 8.0 x 3 H_{3}(x) = -12.0 x + 8.0 x^{3} H 3 ( x ) = − 12.0 x + 8.0 x 3
H 4 ( x ) = 12.0 − 48.0 x 2 + 16.0 x 4 H_{4}(x) = 12.0 - 48.0 x^{2} + 16.0 x^{4} H 4 ( x ) = 12.0 − 48.0 x 2 + 16.0 x 4
H 5 ( x ) = 120.0 x − 160.0 x 3 + 32.0 x 5 H_{5}(x) = 120.0 x - 160.0 x^{3} + 32.0 x^{5} H 5 ( x ) = 120.0 x − 160.0 x 3 + 32.0 x 5
H 6 ( x ) = − 120.0 + 720.0 x 2 − 480.0 x 4 + 64.0 x 6 H_{6}(x) = -120.0 + 720.0 x^{2} - 480.0 x^{4} + 64.0 x^{6} H 6 ( x ) = − 120.0 + 720.0 x 2 − 480.0 x 4 + 64.0 x 6
H 7 ( x ) = − 1680.0 x + 3360.0 x 3 − 1344.0 x 5 + 128.0 x 7 H_{7}(x) = -1680.0 x + 3360.0 x^{3} - 1344.0 x^{5} + 128.0 x^{7} H 7 ( x ) = − 1680.0 x + 3360.0 x 3 − 1344.0 x 5 + 128.0 x 7
H 8 ( x ) = 1680.0 − 13440.0 x 2 + 13440.0 x 4 − 3584.0 x 6 + 256.0 x 8 H_{8}(x) = 1680.0 - 13440.0 x^{2} + 13440.0 x^{4} - 3584.0 x^{6} + 256.0 x^{8} H 8 ( x ) = 1680.0 − 13440.0 x 2 + 13440.0 x 4 − 3584.0 x 6 + 256.0 x 8
H 9 ( x ) = 30240.0 x − 80640.0 x 3 + 48384.0 x 5 − 9216.0 x 7 + 512.0 x 9 H_{9}(x) = 30240.0 x - 80640.0 x^{3} + 48384.0 x^{5} - 9216.0 x^{7} + 512.0 x^{9} H 9 ( x ) = 30240.0 x − 80640.0 x 3 + 48384.0 x 5 − 9216.0 x 7 + 512.0 x 9
H 10 ( x ) = − 30240.0 + 302400.0 x 2 − 403200.0 x 4 + 161280.0 x 6 − 23040.0 x 8 + 1024.0 x 10 H_{10}(x) = -30240.0 + 302400.0 x^{2} - 403200.0 x^{4} + 161280.0 x^{6} - 23040.0 x^{8} + 1024.0 x^{10} H 10 ( x ) = − 30240.0 + 302400.0 x 2 − 403200.0 x 4 + 161280.0 x 6 − 23040.0 x 8 + 1024.0 x 10
H 11 ( x ) = − 665280.0 x + 2.2176 e 6 x 3 − 1.77408 e 6 x 5 + 506880.0 x 7 − 56320.0 x 9 + 2048.0 x 11 H_{11}(x) = -665280.0 x + 2.2176e6 x^{3} - 1.77408e6 x^{5} + 506880.0 x^{7} - 56320.0 x^{9} + 2048.0 x^{11} H 11 ( x ) = − 665280.0 x + 2.2176 e 6 x 3 − 1.77408 e 6 x 5 + 506880.0 x 7 − 56320.0 x 9 + 2048.0 x 11
例えばH 2 ( x ) = 4 x 2 − 2 H_2(x) = 4x^2 - 2 H 2 ( x ) = 4 x 2 − 2 なので, H 2 ( 5 ) = 98 H_2(5) = 98 H 2 ( 5 ) = 98 となるはずである.
応用例
https://zenn.dev/ohno/articles/870b0c2a0af590
ラゲール多項式
注意せよ. 文献によって1 / n ! 1/n! 1/ n ! が有ったり無かったりする. SpecialPolynomials.jlでサポートされているのはロドリゲスの公式
L n ( x ) = 1 n ! e x d n d x n ( e − x x n )
L_n(x) = \frac{1}{n!} \mathrm{e}^x \frac{\mathrm{d}^n}{\mathrm{d}x ^n} \left( \mathrm{e}^{-x} x^n \right)
L n ( x ) = n ! 1 e x d x n d n ( e − x x n )
に対応する式であり, L n ( x ) L_n(x) L n ( x ) はbasis(Laguerre{0}, n)(x)
のように書けばよい. Wikipedia(英語版) と見比べて頂きたい.
L 0 ( x ) = 1.0 L_{0}(x) = 1.0 L 0 ( x ) = 1.0
L 1 ( x ) = 1.0 − 1.0 x L_{1}(x) = 1.0 - 1.0 x L 1 ( x ) = 1.0 − 1.0 x
L 2 ( x ) = 1.0 − 2.0 x + 0.5 x 2 L_{2}(x) = 1.0 - 2.0 x + 0.5 x^{2} L 2 ( x ) = 1.0 − 2.0 x + 0.5 x 2
L 3 ( x ) = 1.0 − 3.0 x + 1.5 x 2 − 0.166667 x 3 L_{3}(x) = 1.0 - 3.0 x + 1.5 x^{2} - 0.166667 x^{3} L 3 ( x ) = 1.0 − 3.0 x + 1.5 x 2 − 0.166667 x 3
L 4 ( x ) = 1.0 − 4.0 x + 3.0 x 2 − 0.666667 x 3 + 0.0416667 x 4 L_{4}(x) = 1.0 - 4.0 x + 3.0 x^{2} - 0.666667 x^{3} + 0.0416667 x^{4} L 4 ( x ) = 1.0 − 4.0 x + 3.0 x 2 − 0.666667 x 3 + 0.0416667 x 4
L 5 ( x ) = 1.0 − 5.0 x + 5.0 x 2 − 1.66667 x 3 + 0.208333 x 4 − 0.00833333 x 5 L_{5}(x) = 1.0 - 5.0 x + 5.0 x^{2} - 1.66667 x^{3} + 0.208333 x^{4} - 0.00833333 x^{5} L 5 ( x ) = 1.0 − 5.0 x + 5.0 x 2 − 1.66667 x 3 + 0.208333 x 4 − 0.00833333 x 5
L 6 ( x ) = 1.0 − 6.0 x + 7.5 x 2 − 3.33333 x 3 + 0.625 x 4 − 0.05 x 5 + 0.00138889 x 6 L_{6}(x) = 1.0 - 6.0 x + 7.5 x^{2} - 3.33333 x^{3} + 0.625 x^{4} - 0.05 x^{5} + 0.00138889 x^{6} L 6 ( x ) = 1.0 − 6.0 x + 7.5 x 2 − 3.33333 x 3 + 0.625 x 4 − 0.05 x 5 + 0.00138889 x 6
L 7 ( x ) = 1.0 − 7.0 x + 10.5 x 2 − 5.83333 x 3 + 1.45833 x 4 − 0.175 x 5 + 0.00972222 x 6 − 0.000198413 x 7 L_{7}(x) = 1.0 - 7.0 x + 10.5 x^{2} - 5.83333 x^{3} + 1.45833 x^{4} - 0.175 x^{5} + 0.00972222 x^{6} - 0.000198413 x^{7} L 7 ( x ) = 1.0 − 7.0 x + 10.5 x 2 − 5.83333 x 3 + 1.45833 x 4 − 0.175 x 5 + 0.00972222 x 6 − 0.000198413 x 7
1 / n ! 1/n! 1/ n ! について補足する. ラゲール多項式L n ( x ) L_n(x) L n ( x ) はそもそも微分方程式
x y ′ ′ + ( 1 − x ) y ′ + n y = 0
xy'' + (1-x)y' + ny = 0
x y ′′ + ( 1 − x ) y ′ + n y = 0
を満たす解y y y であるから, 定数1 / n ! 1/n! 1/ n ! 倍だけ異なっても解であることには違いない. もし
L ~ n ( x ) = n ! ⋅ L n ( x ) = e x d n d x n ( e − x x n )
\tilde{L}_n(x) = n!\cdot L_n(x) = \mathrm{e}^x \frac{\mathrm{d}^n}{\mathrm{d}x ^n} \left( \mathrm{e}^{-x} x^n \right)
L ~ n ( x ) = n ! ⋅ L n ( x ) = e x d x n d n ( e − x x n )
を利用したいのであればL n ( x ) L_n(x) L n ( x ) にn ! n! n ! を掛ければよいので, factorial(n)*basis(Laguerre{0}, n)(x)
とすればよい. Wikipedia(日本語版) のk = 0 k=0 k = 0 の場合と見比べて頂きたい.
L ~ 0 ( x ) = 1.0 \tilde{L}_{0}(x) = 1.0 L ~ 0 ( x ) = 1.0
L ~ 1 ( x ) = 1.0 − 1.0 x \tilde{L}_{1}(x) = 1.0 - 1.0 x L ~ 1 ( x ) = 1.0 − 1.0 x
L ~ 2 ( x ) = 2.0 − 4.0 x + 1.0 x 2 \tilde{L}_{2}(x) = 2.0 - 4.0 x + 1.0 x^{2} L ~ 2 ( x ) = 2.0 − 4.0 x + 1.0 x 2
L ~ 3 ( x ) = 6.0 − 18.0 x + 9.0 x 2 − 1.0 x 3 \tilde{L}_{3}(x) = 6.0 - 18.0 x + 9.0 x^{2} - 1.0 x^{3} L ~ 3 ( x ) = 6.0 − 18.0 x + 9.0 x 2 − 1.0 x 3
L ~ 4 ( x ) = 24.0 − 96.0 x + 72.0 x 2 − 16.0 x 3 + 1.0 x 4 \tilde{L}_{4}(x) = 24.0 - 96.0 x + 72.0 x^{2} - 16.0 x^{3} + 1.0 x^{4} L ~ 4 ( x ) = 24.0 − 96.0 x + 72.0 x 2 − 16.0 x 3 + 1.0 x 4
L ~ 5 ( x ) = 120.0 − 600.0 x + 600.0 x 2 − 200.0 x 3 + 25.0 x 4 − 1.0 x 5 \tilde{L}_{5}(x) = 120.0 - 600.0 x + 600.0 x^{2} - 200.0 x^{3} + 25.0 x^{4} - 1.0 x^{5} L ~ 5 ( x ) = 120.0 − 600.0 x + 600.0 x 2 − 200.0 x 3 + 25.0 x 4 − 1.0 x 5
L ~ 6 ( x ) = 720.0 − 4320.0 x + 5400.0 x 2 − 2400.0 x 3 + 450.0 x 4 − 36.0 x 5 + 1.0 x 6 \tilde{L}_{6}(x) = 720.0 - 4320.0 x + 5400.0 x^{2} - 2400.0 x^{3} + 450.0 x^{4} - 36.0 x^{5} + 1.0 x^{6} L ~ 6 ( x ) = 720.0 − 4320.0 x + 5400.0 x 2 − 2400.0 x 3 + 450.0 x 4 − 36.0 x 5 + 1.0 x 6
L ~ 7 ( x ) = 5040.0 − 35280.0 x + 52920.0 x 2 − 29400.0 x 3 + 7350.0 x 4 − 882.0 x 5 + 49.0 x 6 − 1.0 x 7 \tilde{L}_{7}(x) = 5040.0 - 35280.0 x + 52920.0 x^{2} - 29400.0 x^{3} + 7350.0 x^{4} - 882.0 x^{5} + 49.0 x^{6} - 1.0 x^{7} L ~ 7 ( x ) = 5040.0 − 35280.0 x + 52920.0 x 2 − 29400.0 x 3 + 7350.0 x 4 − 882.0 x 5 + 49.0 x 6 − 1.0 x 7
ラゲールの陪多項式
ラゲールの陪多項式 L n k ( x ) L_n^k(x) L n k ( x ) は水素原子のSchrödinger方程式の固有関数の動径部分 に登場する. これは定義ではないが, ラゲール多項式L n ( x ) L_n(x) L n ( x ) との関係
L n k ( x ) = d k d x k L n ( x )
L_n^{k}(x) = \frac{\mathrm{d}^k}{\mathrm{d}x^k} L_n(x)
L n k ( x ) = d x k d k L n ( x )
が知られている. SpecialPolynomials.jlでは一般化ラゲール多項式L n ( α ) ( x ) L_n^{(\alpha)}(x) L n ( α ) ( x ) が実装されているので, L n k ( x ) = L n − k ( k ) ( x ) L_n^{k}(x) = L_{n-k}^{(k)}(x) L n k ( x ) = L n − k ( k ) ( x ) という関係を利用すればよい. L n k ( x ) L_n^{k}(x) L n k ( x ) はbasis(Laguerre{k}, n-k)(x)
である.
L 0 0 ( x ) = 1.0 L_0^0(x) = 1.0 L 0 0 ( x ) = 1.0
L 1 0 ( x ) = 1.0 − 1.0 x L_1^0(x) = 1.0 - 1.0 x L 1 0 ( x ) = 1.0 − 1.0 x
L 1 1 ( x ) = 1.0 L_1^1(x) = 1.0 L 1 1 ( x ) = 1.0
L 2 0 ( x ) = 1.0 − 2.0 x + 0.5 x 2 L_2^0(x) = 1.0 - 2.0 x + 0.5 x^{2} L 2 0 ( x ) = 1.0 − 2.0 x + 0.5 x 2
L 2 1 ( x ) = 2.0 − 1.0 x L_2^1(x) = 2.0 - 1.0 x L 2 1 ( x ) = 2.0 − 1.0 x
L 2 2 ( x ) = 1.0 L_2^2(x) = 1.0 L 2 2 ( x ) = 1.0
L 3 0 ( x ) = 1.0 − 3.0 x + 1.5 x 2 − 0.166667 x 3 L_3^0(x) = 1.0 - 3.0 x + 1.5 x^{2} - 0.166667 x^{3} L 3 0 ( x ) = 1.0 − 3.0 x + 1.5 x 2 − 0.166667 x 3
L 3 1 ( x ) = 3.0 − 3.0 x + 0.5 x 2 L_3^1(x) = 3.0 - 3.0 x + 0.5 x^{2} L 3 1 ( x ) = 3.0 − 3.0 x + 0.5 x 2
L 3 2 ( x ) = 3.0 − 1.0 x L_3^2(x) = 3.0 - 1.0 x L 3 2 ( x ) = 3.0 − 1.0 x
L 3 3 ( x ) = 1.0 L_3^3(x) = 1.0 L 3 3 ( x ) = 1.0
L 4 0 ( x ) = 1.0 − 4.0 x + 3.0 x 2 − 0.666667 x 3 + 0.0416667 x 4 L_4^0(x) = 1.0 - 4.0 x + 3.0 x^{2} - 0.666667 x^{3} + 0.0416667 x^{4} L 4 0 ( x ) = 1.0 − 4.0 x + 3.0 x 2 − 0.666667 x 3 + 0.0416667 x 4
L 4 1 ( x ) = 4.0 − 6.0 x + 2.0 x 2 − 0.166667 x 3 L_4^1(x) = 4.0 - 6.0 x + 2.0 x^{2} - 0.166667 x^{3} L 4 1 ( x ) = 4.0 − 6.0 x + 2.0 x 2 − 0.166667 x 3
L 4 2 ( x ) = 6.0 − 4.0 x + 0.5 x 2 L_4^2(x) = 6.0 - 4.0 x + 0.5 x^{2} L 4 2 ( x ) = 6.0 − 4.0 x + 0.5 x 2
L 4 3 ( x ) = 4.0 − 1.0 x L_4^3(x) = 4.0 - 1.0 x L 4 3 ( x ) = 4.0 − 1.0 x
L 4 4 ( x ) = 1.0 L_4^4(x) = 1.0 L 4 4 ( x ) = 1.0
Polynomials.jlのderivative(q,k)
を用いてラゲール多項式L n ( x ) L_n(x) L n ( x ) のk k k 階の導関数を計算しても, 同様の結果が得られる.
L 0 0 ( x ) = 1.0 L_0^0(x) = 1.0 L 0 0 ( x ) = 1.0
L 1 0 ( x ) = 1.0 − 1.0 x L_1^0(x) = 1.0 - 1.0 x L 1 0 ( x ) = 1.0 − 1.0 x
L 1 1 ( x ) = − 1.0 L_1^1(x) = -1.0 L 1 1 ( x ) = − 1.0
L 2 0 ( x ) = 1.0 − 2.0 x + 0.5 x 2 L_2^0(x) = 1.0 - 2.0 x + 0.5 x^{2} L 2 0 ( x ) = 1.0 − 2.0 x + 0.5 x 2
L 2 1 ( x ) = − 2.0 + 1.0 x L_2^1(x) = -2.0 + 1.0 x L 2 1 ( x ) = − 2.0 + 1.0 x
L 2 2 ( x ) = 1.0 L_2^2(x) = 1.0 L 2 2 ( x ) = 1.0
L 3 0 ( x ) = 1.0 − 3.0 x + 1.5 x 2 − 0.166667 x 3 L_3^0(x) = 1.0 - 3.0 x + 1.5 x^{2} - 0.166667 x^{3} L 3 0 ( x ) = 1.0 − 3.0 x + 1.5 x 2 − 0.166667 x 3
L 3 1 ( x ) = − 3.0 + 3.0 x − 0.5 x 2 L_3^1(x) = -3.0 + 3.0 x - 0.5 x^{2} L 3 1 ( x ) = − 3.0 + 3.0 x − 0.5 x 2
L 3 2 ( x ) = 3.0 − 1.0 x L_3^2(x) = 3.0 - 1.0 x L 3 2 ( x ) = 3.0 − 1.0 x
L 3 3 ( x ) = − 1.0 L_3^3(x) = -1.0 L 3 3 ( x ) = − 1.0
L 4 0 ( x ) = 1.0 − 4.0 x + 3.0 x 2 − 0.666667 x 3 + 0.0416667 x 4 L_4^0(x) = 1.0 - 4.0 x + 3.0 x^{2} - 0.666667 x^{3} + 0.0416667 x^{4} L 4 0 ( x ) = 1.0 − 4.0 x + 3.0 x 2 − 0.666667 x 3 + 0.0416667 x 4
L 4 1 ( x ) = − 4.0 + 6.0 x − 2.0 x 2 + 0.166667 x 3 L_4^1(x) = -4.0 + 6.0 x - 2.0 x^{2} + 0.166667 x^{3} L 4 1 ( x ) = − 4.0 + 6.0 x − 2.0 x 2 + 0.166667 x 3
L 4 2 ( x ) = 6.0 − 4.0 x + 0.5 x 2 L_4^2(x) = 6.0 - 4.0 x + 0.5 x^{2} L 4 2 ( x ) = 6.0 − 4.0 x + 0.5 x 2
L 4 3 ( x ) = − 4.0 + 1.0 x L_4^3(x) = -4.0 + 1.0 x L 4 3 ( x ) = − 4.0 + 1.0 x
L 4 4 ( x ) = 1.0 L_4^4(x) = 1.0 L 4 4 ( x ) = 1.0
応用例
https://zenn.dev/ohno/articles/e1103bc0d58ceb#動径関数
一般化ラゲール多項式
一般化ラゲール多項式L n ( α ) ( x ) L_n^{(\alpha)}(x) L n ( α ) ( x ) は水素原子 やモースポテンシャル を考えるときに登場する.
Generalized Laguerre polynomials の和訳. 少なくともGoogle翻訳ではラゲールの陪多項式と訳されるが, 日本で使われているラゲールの陪多項式とは定義が違うようなので, 注意されたい. 調査したところ, かなり紛らわしいので, 一般化ラゲール多項式L n ( α ) ( x ) L_n^{(\alpha)}(x) L n ( α ) ( x ) とラゲールの陪多項式L n k ( x ) L_n^k(x) L n k ( x ) は別物と考えた方がすっきりする.「どうせk ∈ N k\in\mathbb{N} k ∈ N とk ∈ R k\in\mathbb{R} k ∈ R の違いだろう」などと決めつけてかかると痛い目を見る.
前提
まず, 一般化ラゲール多項式L n ( α ) ( x ) L_n^{(\alpha)}(x) L n ( α ) ( x ) とラゲールの陪多項式L n k ( x ) L_n^k(x) L n k ( x ) はそもそも満たすべき方程式が異なる.
多項式
満たすべき方程式
出典
ラゲール多項式L n ( x ) L_n(x) L n ( x )
x y ′ ′ + ( 1 − x ) y ′ + n y = 0 xy'' + (1-x)y' + ny = 0 x y ′′ + ( 1 − x ) y ′ + n y = 0
ラゲールの陪多項式L n k ( x ) L_n^k(x) L n k ( x )
x y ′ ′ + ( k + 1 − x ) y ′ + ( n − k ) y = 0 xy'' + (k+1-x)y' + (n-k)y = 0 x y ′′ + ( k + 1 − x ) y ′ + ( n − k ) y = 0
日本語のWikipedia
Generalized Laguerre polynomials 一般化ラゲール多項式L n ( α ) ( x ) L_n^{(\alpha)}(x) L n ( α ) ( x )
x y ′ ′ + ( α + 1 − x ) y ′ + n y = 0 xy'' + (\alpha+1-x)y' + ny = 0 x y ′′ + ( α + 1 − x ) y ′ + n y = 0
英語のWikipedia
共通点
ラゲールの陪多項式L n k ( x ) L_n^k(x) L n k ( x ) も一般化ラゲール多項式L n ( α ) ( x ) L_n^{(\alpha)}(x) L n ( α ) ( x ) もk = α = 0 k=\alpha=0 k = α = 0 のときにラゲール多項式L n ( x ) L_n(x) L n ( x ) に一致するように一般化されていることが明らかである.
L n ( x ) = L n 0 ( x ) = L n ( 0 ) ( x )
L_n(x) = L_n^{0}(x) = L_n^{(0)}(x)
L n ( x ) = L n 0 ( x ) = L n ( 0 ) ( x )
相違点
一般化ラゲール多項式L n ( α ) ( x ) L_n^{(\alpha)}(x) L n ( α ) ( x ) はラゲールの陪多項式L n k ( x ) L_n^k(x) L n k ( x ) とは異なり, α ∈ N \alpha\in\mathbb{N} α ∈ N に限定したとしてもラゲール多項式L n ( x ) L_n(x) L n ( x ) の導関数ではない.
L n k ( x ) = d k d x k L n ( x ) L n ( α ) ( x ) ≠ d α d x α L n ( x )
\begin{align}
L_n^{k}(x) &= \frac{\mathrm{d}^k}{\mathrm{d}x^k} L_n(x)\\
L_n^{(\alpha)}(x) &\neq \frac{\mathrm{d}^\alpha}{\mathrm{d}x^\alpha} L_n(x)
\end{align}
L n k ( x ) L n ( α ) ( x ) = d x k d k L n ( x ) = d x α d α L n ( x )
これは, そもそも満たすべき方程式が違うためである. 逆に言うと, ラゲールの陪多項式L n k ( x ) L_n^k(x) L n k ( x ) もガンマ関数を用いてk ∈ R k\in\mathbb{R} k ∈ R で成り立つようにしてやれば(実際, ライブラリでは成り立つ), 満たすべき方程式以外に違いは無いともいえる. そうすると, 満たすべき方程式がどちらなのか確認さえすれば問題ない, ように考えがちだが, ラゲール多項式L n ( x ) L_n(x) L n ( x ) の1 / n ! 1/n! 1/ n ! の有無も文献によるので慎重になった方がよい.
対応関係
見ての通り, ラゲールの陪多項式L n k ( x ) L_n^k(x) L n k ( x ) と一般化ラゲール多項式L n ( α ) ( x ) L_n^{(\alpha)}(x) L n ( α ) ( x ) は異なる性質を持つが, これらの間には次の関係が明らかに成り立つ.
L n k ( x ) = L n − k ( k ) ( x )
L_n^{k}(x) = L_{n-k}^{(k)}(x)
L n k ( x ) = L n − k ( k ) ( x )
このことから, 水素原子の動径関数は多くがL n + l 2 l + 1 ( x ) L_{n+l}^{2l+1}(x) L n + l 2 l + 1 ( x ) であるが, たまにL n − l − 1 ( 2 n + l ) ( x ) L_{n-l-1}^{(2n+l)}(x) L n − l − 1 ( 2 n + l ) ( x ) のパターンがある. 前者は『マッカーリ・サイモン物理化学 上』p.224 , 『アトキンス 物理化学(上)第10版』p.381 , 原田義也『量子化学 上巻』(第2版, 2019, 裳華房) p.123 , 高柳和夫『原子分子物理学』(2000, 朝倉書店) p.16 , Wikipedia(日本語) などであり, 後者がこちらのサイト やWikipedia(英語) である.
この違いを抜きにしても規格化定数が間違っていたりするので, 数値積分などで簡単にでも確認した方がよい.
使用法
SpecialPolynomials.jlでサポートされており, L n ( α ) ( x ) L_n^{(\alpha)}(x) L n ( α ) ( x ) はそのままbasis(Laguerre{α}, n)(x)
である. もちろんα ∈ R \alpha\in\mathbb{R} α ∈ R で使える.
L 0 ( 0 ) ( x ) = 1.0 L_0^{(0)}(x) = 1.0 L 0 ( 0 ) ( x ) = 1.0
L 1 ( 0 ) ( x ) = 1.0 − 1.0 x L_1^{(0)}(x) = 1.0 - 1.0 x L 1 ( 0 ) ( x ) = 1.0 − 1.0 x
L 1 ( 1 ) ( x ) = 2.0 − 1.0 x L_1^{(1)}(x) = 2.0 - 1.0 x L 1 ( 1 ) ( x ) = 2.0 − 1.0 x
L 2 ( 0 ) ( x ) = 1.0 − 2.0 x + 0.5 x 2 L_2^{(0)}(x) = 1.0 - 2.0 x + 0.5 x^{2} L 2 ( 0 ) ( x ) = 1.0 − 2.0 x + 0.5 x 2
L 2 ( 1 ) ( x ) = 3.0 − 3.0 x + 0.5 x 2 L_2^{(1)}(x) = 3.0 - 3.0 x + 0.5 x^{2} L 2 ( 1 ) ( x ) = 3.0 − 3.0 x + 0.5 x 2
L 2 ( 2 ) ( x ) = 6.0 − 4.0 x + 0.5 x 2 L_2^{(2)}(x) = 6.0 - 4.0 x + 0.5 x^{2} L 2 ( 2 ) ( x ) = 6.0 − 4.0 x + 0.5 x 2
L 3 ( 0 ) ( x ) = 1.0 − 3.0 x + 1.5 x 2 − 0.166667 x 3 L_3^{(0)}(x) = 1.0 - 3.0 x + 1.5 x^{2} - 0.166667 x^{3} L 3 ( 0 ) ( x ) = 1.0 − 3.0 x + 1.5 x 2 − 0.166667 x 3
L 3 ( 1 ) ( x ) = 4.0 − 6.0 x + 2.0 x 2 − 0.166667 x 3 L_3^{(1)}(x) = 4.0 - 6.0 x + 2.0 x^{2} - 0.166667 x^{3} L 3 ( 1 ) ( x ) = 4.0 − 6.0 x + 2.0 x 2 − 0.166667 x 3
L 3 ( 2 ) ( x ) = 10.0 − 10.0 x + 2.5 x 2 − 0.166667 x 3 L_3^{(2)}(x) = 10.0 - 10.0 x + 2.5 x^{2} - 0.166667 x^{3} L 3 ( 2 ) ( x ) = 10.0 − 10.0 x + 2.5 x 2 − 0.166667 x 3
L 3 ( 3 ) ( x ) = 20.0 − 15.0 x + 3.0 x 2 − 0.166667 x 3 L_3^{(3)}(x) = 20.0 - 15.0 x + 3.0 x^{2} - 0.166667 x^{3} L 3 ( 3 ) ( x ) = 20.0 − 15.0 x + 3.0 x 2 − 0.166667 x 3
L 4 ( 0 ) ( x ) = 1.0 − 4.0 x + 3.0 x 2 − 0.666667 x 3 + 0.0416667 x 4 L_4^{(0)}(x) = 1.0 - 4.0 x + 3.0 x^{2} - 0.666667 x^{3} + 0.0416667 x^{4} L 4 ( 0 ) ( x ) = 1.0 − 4.0 x + 3.0 x 2 − 0.666667 x 3 + 0.0416667 x 4
L 4 ( 1 ) ( x ) = 5.0 − 10.0 x + 5.0 x 2 − 0.833333 x 3 + 0.0416667 x 4 L_4^{(1)}(x) = 5.0 - 10.0 x + 5.0 x^{2} - 0.833333 x^{3} + 0.0416667 x^{4} L 4 ( 1 ) ( x ) = 5.0 − 10.0 x + 5.0 x 2 − 0.833333 x 3 + 0.0416667 x 4
L 4 ( 2 ) ( x ) = 15.0 − 20.0 x + 7.5 x 2 − 1.0 x 3 + 0.0416667 x 4 L_4^{(2)}(x) = 15.0 - 20.0 x + 7.5 x^{2} - 1.0 x^{3} + 0.0416667 x^{4} L 4 ( 2 ) ( x ) = 15.0 − 20.0 x + 7.5 x 2 − 1.0 x 3 + 0.0416667 x 4
L 4 ( 3 ) ( x ) = 35.0 − 35.0 x + 10.5 x 2 − 1.16667 x 3 + 0.0416667 x 4 L_4^{(3)}(x) = 35.0 - 35.0 x + 10.5 x^{2} - 1.16667 x^{3} + 0.0416667 x^{4} L 4 ( 3 ) ( x ) = 35.0 − 35.0 x + 10.5 x 2 − 1.16667 x 3 + 0.0416667 x 4
L 4 ( 4 ) ( x ) = 70.0 − 56.0 x + 14.0 x 2 − 1.33333 x 3 + 0.0416667 x 4 L_4^{(4)}(x) = 70.0 - 56.0 x + 14.0 x^{2} - 1.33333 x^{3} + 0.0416667 x^{4} L 4 ( 4 ) ( x ) = 70.0 − 56.0 x + 14.0 x 2 − 1.33333 x 3 + 0.0416667 x 4
応用例
https://zenn.dev/ohno/articles/f849d98a7f58a9#可視化
ルジャンドル多項式
ルジャンドル多項式 P n P_n P n はロドリゲスの公式
P n ( x ) = 1 2 n n ! d n d x n [ ( x 2 − 1 ) n ]
P_n(x) = \frac{1}{2^n n!} \frac{\mathrm{d}^n}{\mathrm{d}x ^n} \left[ \left( x^2-1 \right)^n \right]
P n ( x ) = 2 n n ! 1 d x n d n [ ( x 2 − 1 ) n ]
で与えられる. P n ( x ) P_n(x) P n ( x ) はbasis(Legendre, n)(x)
のように書けばよい.
こちら と見比べて頂きたい.
P 0 ( x ) = 1.0 P_{0}(x) = 1.0 P 0 ( x ) = 1.0
P 1 ( x ) = 1.0 x P_{1}(x) = 1.0 x P 1 ( x ) = 1.0 x
P 2 ( x ) = − 0.5 + 1.5 x 2 P_{2}(x) = -0.5 + 1.5 x^{2} P 2 ( x ) = − 0.5 + 1.5 x 2
P 3 ( x ) = − 1.5 x + 2.5 x 3 P_{3}(x) = -1.5 x + 2.5 x^{3} P 3 ( x ) = − 1.5 x + 2.5 x 3
P 4 ( x ) = 0.375 − 3.75 x 2 + 4.375 x 4 P_{4}(x) = 0.375 - 3.75 x^{2} + 4.375 x^{4} P 4 ( x ) = 0.375 − 3.75 x 2 + 4.375 x 4
P 5 ( x ) = 1.875 x − 8.75 x 3 + 7.875 x 5 P_{5}(x) = 1.875 x - 8.75 x^{3} + 7.875 x^{5} P 5 ( x ) = 1.875 x − 8.75 x 3 + 7.875 x 5
P 6 ( x ) = − 0.3125 + 6.5625 x 2 − 19.6875 x 4 + 14.4375 x 6 P_{6}(x) = -0.3125 + 6.5625 x^{2} - 19.6875 x^{4} + 14.4375 x^{6} P 6 ( x ) = − 0.3125 + 6.5625 x 2 − 19.6875 x 4 + 14.4375 x 6
P 7 ( x ) = − 2.1875 x + 19.6875 x 3 − 43.3125 x 5 + 26.8125 x 7 P_{7}(x) = -2.1875 x + 19.6875 x^{3} - 43.3125 x^{5} + 26.8125 x^{7} P 7 ( x ) = − 2.1875 x + 19.6875 x 3 − 43.3125 x 5 + 26.8125 x 7
P 8 ( x ) = 0.273438 − 9.84375 x 2 + 54.1406 x 4 − 93.8438 x 6 + 50.2734 x 8 P_{8}(x) = 0.273438 - 9.84375 x^{2} + 54.1406 x^{4} - 93.8438 x^{6} + 50.2734 x^{8} P 8 ( x ) = 0.273438 − 9.84375 x 2 + 54.1406 x 4 − 93.8438 x 6 + 50.2734 x 8
P 9 ( x ) = 2.46094 x − 36.0938 x 3 + 140.766 x 5 − 201.094 x 7 + 94.9609 x 9 P_{9}(x) = 2.46094 x - 36.0938 x^{3} + 140.766 x^{5} - 201.094 x^{7} + 94.9609 x^{9} P 9 ( x ) = 2.46094 x − 36.0938 x 3 + 140.766 x 5 − 201.094 x 7 + 94.9609 x 9
P 10 ( x ) = − 0.246094 + 13.5352 x 2 − 117.305 x 4 + 351.914 x 6 − 427.324 x 8 + 180.426 x 10 P_{10}(x) = -0.246094 + 13.5352 x^{2} - 117.305 x^{4} + 351.914 x^{6} - 427.324 x^{8} + 180.426 x^{10} P 10 ( x ) = − 0.246094 + 13.5352 x 2 − 117.305 x 4 + 351.914 x 6 − 427.324 x 8 + 180.426 x 10
P 11 ( x ) = − 2.70703 x + 58.6523 x 3 − 351.914 x 5 + 854.648 x 7 − 902.129 x 9 + 344.449 x 11 P_{11}(x) = -2.70703 x + 58.6523 x^{3} - 351.914 x^{5} + 854.648 x^{7} - 902.129 x^{9} + 344.449 x^{11} P 11 ( x ) = − 2.70703 x + 58.6523 x 3 − 351.914 x 5 + 854.648 x 7 − 902.129 x 9 + 344.449 x 11
ルジャンドルの陪多項式
ルジャンドルの陪多項式 P k m ( t ) P_k^m(t) P k m ( t ) は球面調和関数 すなわち水素原子の軌道の角度部分に登場する. ルジャンドル多項式P n P_n P n との関係が次式で与えられている.
P k m ( t ) = ( 1 − t 2 ) m / 2 d m P k ( t ) d t m
P_k^m(t) = \left( 1-t^2 \right)^{m/2} \frac{\mathrm{d}^m P_k(t)}{\mathrm{d}t^m}
P k m ( t ) = ( 1 − t 2 ) m /2 d t m d m P k ( t )
なお, Wikipediaの英語版 だと符号がつけ加えられているが, 結局は線形微分方程式の解なので定数倍の違いは著者の好みに委ねられてしまう. 定義が違えば球面調和関数の規格化定数も変わるので注意されたい.
P k m ( t ) = ( − 1 ) m ( 1 − t 2 ) m / 2 d m P k ( t ) d t m
P_k^m(t) = (-1)^m \left( 1-t^2 \right)^{m/2} \frac{\mathrm{d}^m P_k(t)}{\mathrm{d}t^m}
P k m ( t ) = ( − 1 ) m ( 1 − t 2 ) m /2 d t m d m P k ( t )
ここでは英語版の定義を採用する. こちら と比較して頂きたい.
P 0 0 ( x ) = 1.0 P_{0}^{0}(x) = 1.0 P 0 0 ( x ) = 1.0
P 1 0 ( x ) = 1.0 x P_{1}^{0}(x) = 1.0 x P 1 0 ( x ) = 1.0 x
P 1 1 ( x ) = ( − 1.0 ) 1 − x 2 P_{1}^{1}(x) = \left(-1.0\right)\sqrt{1-x^2} P 1 1 ( x ) = ( − 1.0 ) 1 − x 2
P 2 0 ( x ) = − 0.5 + 1.5 x 2 P_{2}^{0}(x) = -0.5 + 1.5 x^{2} P 2 0 ( x ) = − 0.5 + 1.5 x 2
P 2 1 ( x ) = ( − 3.0 x ) 1 − x 2 P_{2}^{1}(x) = \left(-3.0 x\right)\sqrt{1-x^2} P 2 1 ( x ) = ( − 3.0 x ) 1 − x 2
P 2 2 ( x ) = 3.0 − 6.0 x P_{2}^{2}(x) = 3.0 - 6.0 x P 2 2 ( x ) = 3.0 − 6.0 x
P 3 0 ( x ) = − 1.5 x + 2.5 x 3 P_{3}^{0}(x) = -1.5 x + 2.5 x^{3} P 3 0 ( x ) = − 1.5 x + 2.5 x 3
P 3 1 ( x ) = ( 1.5 − 7.5 x 2 ) 1 − x 2 P_{3}^{1}(x) = \left(1.5 - 7.5 x^{2}\right)\sqrt{1-x^2} P 3 1 ( x ) = ( 1.5 − 7.5 x 2 ) 1 − x 2
P 3 2 ( x ) = 15.0 x − 30.0 x 2 P_{3}^{2}(x) = 15.0 x - 30.0 x^{2} P 3 2 ( x ) = 15.0 x − 30.0 x 2
P 3 3 ( x ) = ( − 15.0 + 30.0 x ) 1 − x 2 P_{3}^{3}(x) = \left(-15.0 + 30.0 x\right)\sqrt{1-x^2} P 3 3 ( x ) = ( − 15.0 + 30.0 x ) 1 − x 2
P 4 0 ( x ) = 0.375 − 3.75 x 2 + 4.375 x 4 P_{4}^{0}(x) = 0.375 - 3.75 x^{2} + 4.375 x^{4} P 4 0 ( x ) = 0.375 − 3.75 x 2 + 4.375 x 4
P 4 1 ( x ) = ( 7.5 x − 17.5 x 3 ) 1 − x 2 P_{4}^{1}(x) = \left(7.5 x - 17.5 x^{3}\right)\sqrt{1-x^2} P 4 1 ( x ) = ( 7.5 x − 17.5 x 3 ) 1 − x 2
P 4 2 ( x ) = − 7.5 + 15.0 x + 52.5 x 2 − 105.0 x 3 P_{4}^{2}(x) = -7.5 + 15.0 x + 52.5 x^{2} - 105.0 x^{3} P 4 2 ( x ) = − 7.5 + 15.0 x + 52.5 x 2 − 105.0 x 3
P 4 3 ( x ) = ( − 105.0 x + 210.0 x 2 ) 1 − x 2 P_{4}^{3}(x) = \left(-105.0 x + 210.0 x^{2}\right)\sqrt{1-x^2} P 4 3 ( x ) = ( − 105.0 x + 210.0 x 2 ) 1 − x 2
P 4 4 ( x ) = 105.0 − 420.0 x + 420.0 x 2 P_{4}^{4}(x) = 105.0 - 420.0 x + 420.0 x^{2} P 4 4 ( x ) = 105.0 − 420.0 x + 420.0 x 2
関数として利用する場合は次のようにする.
応用例
https://zenn.dev/ohno/articles/e1103bc0d58ceb#球面調和関数
ガンマ関数
ガンマ関数Γ ( x ) \Gamma(x) Γ ( x ) はモールポテンシャルの波動関数にも登場する. 階乗の一般化であり, Γ ( n ) = ( n − 1 ) ! \Gamma(n) = (n-1)! Γ ( n ) = ( n − 1 )! という関係が成立する. まずこれを確認する. Juliaでは階乗はfactorial(x)
で利用できる. ガンマ関数はSpecialFunctions.jlでサポートされており, gamma(x)
である.
非整数についてもΓ ( 1 / 2 ) = π \Gamma(1/2) = \sqrt{\pi} Γ ( 1/2 ) = π などが成り立つことが確認できる.
描写すると次のようなグラフになる. こちら と見比べて頂きたい.
誤差関数
誤差関数 はHartree-Fock法の核-電子間引力の積分などに登場する. SpecialFunctions.jlでサポートされており, 誤差関数はerf(x)
, 相補誤算関数はerfc(x)
である. たまにお世話になるので一応, 簡単な数値積分を用いて検証しておく.
e r f ( x ) = 2 π ∫ 0 x exp ( − t 2 ) d t e r f c ( x ) = 1 − e r f ( x )
\mathrm{erf}(x) = \frac{2}{\sqrt{\pi}} \int_0^x \exp(-t^2) \mathrm{d}t\\
\mathrm{erfc}(x) = 1 - \mathrm{erf}(x)
erf ( x ) = π 2 ∫ 0 x exp ( − t 2 ) d t erfc ( x ) = 1 − erf ( x )
動作環境
参考文献
この記事の元になったJupyter Notebookのデータは下記のリンクにある.
https://gist.github.com/ohno/1ed4da972acbc988bc318fc53647afac
Discussion