特殊函数概论
连带勒让德函数
![(1-x^2)\frac{d^2y}{dx^2}-2x\frac{dy}{dx}+[l(l+1)-\frac{m^2}{1-x^2}]y=0](https://latex.youkuaiyun.com/eq?%281-x%5E2%29%5Cfrac%7Bd%5E2y%7D%7Bdx%5E2%7D-2x%5Cfrac%7Bdy%7D%7Bdx%7D+%5Bl%28l+1%29-%5Cfrac%7Bm%5E2%7D%7B1-x%5E2%7D%5Dy%3D0)
![\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,...)](https://latex.youkuaiyun.com/eq?%5Cfrac%7B1%7D%7Bsin%5Ctheta%7D%5Cfrac%7Bd%7D%7Bd%5Ctheta%7D%28sin%5Ctheta%5Cfrac%7Bd%5CTheta%7D%7Bd%5Ctheta%7D%29+%5Bl%28l+1%29-%5Cfrac%7Bm%5E2%7D%7Bsin%5E2%5Ctheta%7D%5D%5CTheta%3D0%5C%2C%5C%2C%5C%2C%5C%2C%28m%3D0%2C1%2C2%2C...%29)
- 也就是当

- 经过简单的推导,我们可以得到这个纬度角方程的解

- 根据我们在数学物理方程中学到的知识,我们可以列出前几项连带勒让德函数的基本函数表达
| m=-2 | m=-1 | m=0 | m=1 | m=2 |
l=0 | | | 1 | | |
l=1 | |  | x |  | |
l=2 |  |  |  |  |  |

- 为什么呢,因为Python scipy 没有连带勒让德函数这个玩意......
- 搞得我们需要使用中心差分公式完成这个任务
- 真的吗?
- 显然不是
- sympy 学到哪里去了哩
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,...)](https://latex.youkuaiyun.com/eq?%5Cfrac%7B1%7D%7BR%7D%5Cfrac%7Bd%7D%7Bdr%7D%28r%5E2%5Cfrac%7BdR%7D%7Bdr%7D%29+%5Cbegin%7BBmatrix%7D%20%5Cfrac%7B2mr%5E2%7D%7B%5Chbar%5E2%7D%5BE-V%28r%29%5D%20%5Cend%7BBmatrix%7D%3Dl%28l+1%29%5C%2C%5C%2C%5C%2C%5C%2C%20%28l%3D0%2C1%2C2%2C...%29)
- 代换

![-\frac{\hbar^2}{2m}\frac{d^2u}{dr^2}+[V(r)+\frac{\hbar^2}{2m}\frac{l(l+1)}{r^2}]u=Eu](https://latex.youkuaiyun.com/eq?-%5Cfrac%7B%5Chbar%5E2%7D%7B2m%7D%5Cfrac%7Bd%5E2u%7D%7Bdr%5E2%7D+%5BV%28r%29+%5Cfrac%7B%5Chbar%5E2%7D%7B2m%7D%5Cfrac%7Bl%28l+1%29%7D%7Br%5E2%7D%5Du%3DEu)
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](https://latex.youkuaiyun.com/eq?%5Cfrac%7Bd%5E2u%7D%7Bd%5Crho%5E2%7D+%5B%5Cfrac%7B%5Cbeta%7D%7B%5Crho%7D-%5Cfrac%7B1%7D%7B4%7D-%5Cfrac%7Bl%28l+1%29%7D%7B%5Crho%7D%5Du%3D0)
- 方程的形式解

- 代入可得Kummer differential equation

- 其通解为
- 其中
- 合流超几何函数
