仮想計算機構

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

SageMathでラゲール多項式を作ってみる【Sage】【Python】

ラゲール多項式は以下で定義されます。


L_k(x)=e^x\frac{d^k}{dx^k}(x^ke^{-x})\ \ \ \ \ (k=0,1,2,\cdots)

SageShellを起動して、関数L_kを定義します。

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

上で定義した関数は任意の k に対して、多項式を計算してくれます。k=2 の場合について計算してみます。

sage: L_k(x,2)
(x^2*e^(-x) - 4*x*e^(-x) + 2*e^(-x))*e^x

うまく計算できているようですが、e^x が打ち消しあってないのでモヤモヤしてしまいます。

sage: L_k(x,2).expand()
x^2 - 4*x + 2

はい、スッキリしました。

次に k を変化させるとグラフがどのように変わるかを見ていきます。

sage: l = [L_k(x,i).expand() for i in range(5)]
sage: l
[1,
 -x + 1,
 x^2 - 4*x + 2,
 -x^3 + 9*x^2 - 18*x + 6,
 x^4 - 16*x^3 + 72*x^2 - 96*x + 24]

以上で k=0 から 4 までの式がわかりました。Sage便利すぎますね。

式の具体的な形が分かったところで、グラフをプロットします。量子力学などでは x が正の場合について考えるらしいので 0\leq x\leq 10 で可視化します。

sage: p = [plot(l[i],(x,0,10)) for i in range(5)]
sage: sum(p)
Launched png viewer for Graphics object consisting of 5 graphics primitives

f:id:riverta1992:20210103230528p:plain

k ごとに色分けしてプロットし直します。

sage: c = ["red","blue","gray","green","purple"]
sage: p = [plot(l[i],(x,0,10),thickness=3,color=c[i],legend_label="k={}".format(i)) for i in range(5)]
sage: sum(p)
Launched png viewer for Graphics object consisting of 5 graphics primitives

f:id:riverta1992:20210103231023p:plain

上手にできましたー。