特殊函数的Python 可视化

本文介绍了连带勒让德函数在量子力学中的应用,特别是在解决纬度角方程和库伦势场的径向问题时的作用。通过Sympy库实现连带勒让德多项式的计算,并探讨了广义拉盖尔多项式在相关问题中的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特殊函数概论

连带勒让德函数

  • 连带勒让德函数是下微分方程的解

(1-x^2)\frac{d^2y}{dx^2}-2x\frac{dy}{dx}+[l(l+1)-\frac{m^2}{1-x^2}]y=0

  • 量子力学的纬度角方程

\frac{1}{sin\theta}\frac{d}{d\theta}(sin\theta\frac{d\Theta}{d\theta})+[l(l+1)-\frac{m^2}{sin^2\theta}]\Theta=0\,\,\,\,(m=0,1,2,...)

  • 也就是当x=cos\theta\,\,y(x)=\Theta(\theta)
  • 经过简单的推导,我们可以得到这个纬度角方程的解

\Theta(\theta)=P_l^m(cos\theta)

  • 根据我们在数学物理方程中学到的知识,我们可以列出前几项连带勒让德函数的基本函数表达
m=-2m=-1m=0m=1m=2
l=01
l=1\frac{1}{2}\sqrt{1-x^2}x-\sqrt{1-x^2}
l=2\frac{1}{8}(1-x^2)\frac{x}{2}\sqrt{1-x^2}\frac{1}{2}(3x^2-1)-3x\sqrt{1-x^2}3(1-x^2)
  • 更重要的是,我们需要记住一个公式

P_l^m(x)=(-1)^m(1-x^2)^{\frac{m}{2}}P_l^{(m)}(x)\,\,\,(m\leq l)

  • 为什么呢,因为Python scipy 没有连带勒让德函数这个玩意......
    • 搞得我们需要使用中心差分公式完成这个任务
    • 真的吗?
    • 显然不是 
    • sympy 学到哪里去了哩

  • P_l(x) 的绘制
import numpy as np
from scipy.special import legendre
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100)
m = 2
P = legendre(m)(x)

plt.plot(x, P)
plt.title("Laguedre Polynomial")
plt.xlabel("x")
plt.ylabel("P(x)", rotation=0)
plt.pause(0.01)

  • 计算连带勒让德多项式
from sympy import symbols, legendre, diff, lambdify
from math import factorial

# 定义变量
x = symbols('x')
l = symbols('l', integer=True)
m = symbols('m', integer=True)


l = 2
m = -2
assert m <= l,"m should be less than l"
# 定义连带勒让德多项式
P = legendre(l,x)

if m >= 0:
    # 根据公式进行转换
    P_transformed = (-1)**m * (1 - x**2)**((m/2)) * diff(P, x, m)
else:
    P_transformed1 = (-1)**(-m) * (1 - x**2)**(((-m)/2)) * diff(P, x, (-m))
    P_transformed = P_transformed1 * factorial(l+m)/factorial(l-m)/(-1)**(-m)

    
print(P_transformed)
f = lambdify(x, P_transformed)
  • 集成
from sympy import symbols, legendre, diff, lambdify
from math import factorial

def associate_legendre(L=7, M=-2, sym=False):
    # 定义变量
    x = symbols('x')
    l = symbols('l', integer=True)
    m = symbols('m', integer=True)
    l = L
    m = M
    assert abs(m) <= l,"m should be less than l"
    # 定义连带勒让德多项式
    P = legendre(l,x)
    if m >= 0:
        # 根据公式进行转换
        P_transformed = (-1)**m * (1 - x**2)**((m/2)) * diff(P, x, m)
    else:
        P_transformed1 = (-1)**(-m) * (1 - x**2)**(((-m)/2)) * diff(P, x, (-m))
        P_transformed = P_transformed1 * factorial(l+m)/factorial(l-m)/(-1)**(-m)

    f = lambdify(x, P_transformed)
    if not sym:
        return f
    else:
        return f, P_transformed

广义拉盖尔多项式

  • 量子力学中,熟练运用连带勒让德多项式帮助我们解决中心势场的角向问题
    • 而为了求解库伦势下的径向函数 我们需要用到广义拉盖尔多项式

\frac{1}{R}\frac{d}{dr}(r^2\frac{dR}{dr})+\begin{Bmatrix} \frac{2mr^2}{\hbar^2}[E-V(r)] \end{Bmatrix}=l(l+1)\,\,\,\, (l=0,1,2,...)

  • 代换R(r)=\frac{u(r)}{r}

-\frac{\hbar^2}{2m}\frac{d^2u}{dr^2}+[V(r)+\frac{\hbar^2}{2m}\frac{l(l+1)}{r^2}]u=Eu

from sympy import symbols, factorial, diff, lambdify
from sympy import exp



def Laguerre(N=3, ALPHA=3):
    n, alpha, x = symbols('n alpha x')

    n = N
    alpha = ALPHA

    L_n_alpha = (x**(-alpha) * exp(x)) / \
    factorial(n) * diff(x**(n + alpha) * exp(-x), x, n)
    return lambdify(x, L_n_alpha)

f = Laguerre()

合流超几何函数

  • 库伦场下的径向方程

\frac{d^2u}{d\rho^2}+[\frac{\beta}{\rho}-\frac{1}{4}-\frac{l(l+1)}{\rho}]u=0

  • 方程的形式解u(\rho)=\rho^{l+1}exp(-\rho/2)y(\rho)
  • 代入可得Kummer differential equation \rho\frac{d^2y}{d\rho^2}+(c-\rho)\frac{dy}{d\rho}-ay=0
  • 其通解为y(\rho)=A_1 \,_1F_1(a,c;\rho)+B_1\rho^{1-c}\,_1F_1(a-c+1,2-c;\rho)
    • a=l+1-\beta;c=2l+2
  • 其中
    • 合流超几何函数 \,_1F_1(a,c;\rho)=\frac{\Gamma(c)}{\Gamma(a)}\sum_{n=0}^{\infty}\frac{\Gamma(a+n)}{\Gamma(c+n)}\frac{\rho^n}{n!}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

River Chandler

谢谢,我会更努力学习工作的!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值