勒 让 德 方 程 d d x [ ( 1 − x 2 ) d y ( x ) d x ] + l ( l + 1 ) y ( x ) = 0 勒让德方程\frac{d}{dx} [(1-x^{2}) \frac{dy(x)}{dx}] +l(l+1)y(x)=0 勒让德方程dxd[(1−x2)dxdy(x)]+l(l+1)y(x)=0 勒 让 德 多 项 式 P l ( x ) = 1 2 l l ! d l d x l ( x 2 − 1 ) l 勒让德多项式P_{l}(x)=\frac{1}{2^{l}l!}\frac{d^{l}}{dx^{l}}(x^{2}-1)^{l} 勒让德多项式Pl(x)=2ll!1dxldl(x2−1)l
性质
1.正交性:
∫ − 1 1 P m ( x ) P n ( x ) d x = { 2 2 n + 1 , m = n 0 , m ! = n \int_{-1}^{1}P_{m}(x)P_{n}(x)dx=\left\{ \begin{aligned} \frac{2}{2n+1},\ m=n \\ 0,\ \ \ m!=n \end{aligned} \right. ∫−11Pm(x)Pn(x)dx=⎩⎨⎧2n+12, m=n0, m!=n
2.递推关系
P n + 1 ( x ) = 2 n + 1 n + 1 x P n ( x ) − n n + 1 P n − 1 ( x ) n = ( 1 , 2 , . . . ) P_{n+1}(x)=\frac{2n+1}{n+1}xP_{n}(x)-\frac{n}{n+1}P_{n-1}(x) \ \ \ \ n=(1,2,...) Pn+1(x)=n+12n+1xPn(x)−n+1nPn−1(x) n=(1,2,...)
常用:
P 0 ( x ) = 1 P_{0}(x)=1 P0(x)=1 P 1 ( x ) = x P_{1}(x)=x P1(x)=x P 2 ( x ) = ( 3 x 2 − 1 ) / 2 P_{2}(x)=(3x^2-1)/2 P2(x)=(3x2−1)/2 P 3 ( x ) = ( 5 x 3 − 3 x ) / 2 P_{3}(x)=(5x^3-3x)/2 P3(x)=(5x3−3x)/2
from sympy import *
x=symbols("x")
#legendre的n阶多项式
def legendre_polynomial(n):
'''
:param n: legendre多项式项数
:return: legendre的n项展开
'''
P = [1, x]
for i in range(1,n):
m=(2*i+1)/(i+1)*x*P[i]-i/(i+1)*P[i-1]
P.append(m)
return P[n]
P_n=legendre_polynomial(3)
print(P_n)
#legendre的n阶多项式的m次导数
def Derivation(function,m): #多阶求导
"""
:param function : 待求导数的函数
:param m: 求导阶数
:return: legendre的n阶多项式的m次导数
"""
for i in range(m): #逐次求导 ,共m次
derivation=diff(function,x)
function=derivation
return function
der=Derivation(P_n,2)
print(der)
结果:
legendre的n阶多项式: 1.66666666666667*x*(1.5*x**2 - 0.5) - 0.666666666666667*x
legendre的n阶多项式的m次导数: 15.0*x
绘制勒让德多项式图像以及legendre的n阶多项式的m次导数的图像:
from sympy import *
import matplotlib.pyplot as plt
x=symbols("x")
#legendre的n阶多项式
def legendre_polynomial(n):
'''
:param n: legendre多项式项数
:return: legendre的n项展开
'''
P = [1, x]
for i in range(1,n):
m=(2*i+1)/(i+1)*x*P[i]-i/(i+1)*P[i-1]
P.append(m)
return P[n]
P_n=legendre_polynomial(3)
x1=[]
y1=[]
for i in range(200):
x1.append(-1+0.01*i)
for i in x1:
y1.append(P_n.subs('x',i))
plt.plot(x1,y1)
plt.show()
#legendre的n阶多项式的m次导数
def Derivation(function,m): #多阶求导
"""
:param function : 待求导数的函数
:param m: 求导阶数
:return: legendre的n阶多项式的m次导数
"""
for i in range(m): #逐次求导 ,共m次
f = diff(function, x, m)
return f
der=Derivation(P_n,2)
y_value=[]
for i in x1:
y_value.append(der.subs('x',i))
plt.plot(x1,y_value)
plt.show()
结果:
3阶legendre多项式图像