仮想計算機構

IT業界と無縁な派遣社員のブログ

SageMathでラゲールの陪多項式を実装する【SageMath】【Python】

以前、Sageを使ってラゲール多項式を実装しました。

プログラムを再掲します。

x = var('x')

def L_k(x,k):
    f = x^k*exp(-x)
    for i in range(k):
        f = derivative(f,x)
    return exp(x)*f

ラゲール多項式 L_k(x)\ \ (k=0,1,2,\cdots) に対し、陪多項式


L_k^s(x)=\frac{d^s}{dx^s}L_k(x)\ \ \ (s\leq k)

で定義されるので、ラゲール多項式のときと同じような感じで実装できます。

def L_k_s(x,k,s):
    f = L_k(x,k)
    for i in range(s):
        f = derivative(f,x)
    return f

L_k の実装と見分けつかないですね。

次に L_k_s を利用して k=0,1,2,3 のときの多項式を求めてみます。

sage: l = [[L_k_s(x,k,s).expand() for s in range(k+1)] for k in range(3+1)]
sage: l
[[1],
 [-x + 1, -1],
 [x^2 - 4*x + 2, 2*x - 4, 2],
 [-x^3 + 9*x^2 - 18*x + 6, -3*x^2 + 18*x - 18, -6*x + 18, -6]]

sage shell だとリストを要素ごとに改行して表示してくれるので、多項式が格納されている様子が明確です。例えば L_3^1(x) の具体的な形を知りたい場合は

sage: l[3][1]
-3*x^2 + 18*x - 18

とすれば十分です。

最後に s の値ごとに色分けをしたグラフをプロットします。

sage: c = ["red","blue","green","purple"]
sage: p = [[plot(l[k][s],(x,0,10),thickness=2,color=c[s],legend_label="k={},s={}".format(k,s)) for s in range(k+1)] for k in range(3+1)]
sage: graphics_array([[sum(p[0]),sum(p[1])],[sum(p[2]),sum(p[3])]])
Launched png viewer for Graphics Array of size 2 x 2

結果は以下のとおりです。

f:id:riverta1992:20210104193555p:plain

参考

原島鮮『初等量子力学裳華房