Legendre多项式的概念以及正交特性在此不多作描述,可以参考数学物理方程相关教材,本文主要讨论在数值计算中对于Legendre多项式以及其导数的计算方法。

Legendre多项式的计算

\[\begin{align} (n+1)P_{n+1}(x)=(2n+1)x \cdot P_{n}(x)-nP_{n-1}(x) \qquad (n\ge2) \end{align} \]

通式可以用幂级数表示为以下形式:

\[\begin{align} P_{n}(x)=\sum\limits_{k=0}^{[\frac{n}{2}]}{\frac{(-1)^k(2n-2k)!}{2^nk!(n-k)!(n-2k)!}}x^{n-2k} \qquad n=0,1,2,\cdots \end{align} \]

Legendre多项式前几项

\(n\) \(0\) \(1\) \(2\) \(3\) \(4\)

在实际数值计算中,按照通项公式计算 \(P_n(x)\) ​​会涉及到大量的乘除法运算,同时由于数据字节长度的限制,对于基数较大阶乘的运算会导致数据的溢出,因此,在实际的计算中,使用递推公式计算 \(P_n(x)\) ​​更为合适。

%% Legendre多项式Pi(x)
function L=myLegendre(N,x)
% 返回Pi(x),i=0~N ,x为标量
if N<2
    error("N is less then 2 !")
L=zeros(1,N);%生成Legendre多项式矩阵
L(1,1)=1;
L(1,2)=x;
for i=2:N-1
    L(1,i+1)=((2*i-1)*x*L(1,i)-(i-1)*L(1,i-1))/i;

Legendre多项式的导数

对于\(x\)​​的一阶导数\(P_{n}'(x)\)​​存在类似的递推公式

\[\begin{align} (n+1)P'_{n+1}(x)=(2n+1)\{x \cdot P'_{n-1}(x)+P_{n-1}(x)\}-nP'_{n-1}(x) \qquad (n\ge2) \end{align} \]

化简得到一阶导数项的递推公式与之前形式类似,但包含额外一项\((2n+1)P_{n-1}(x)\)

\[\begin{align} (n+1)P'_{n+1}(x)=(2n+1)x \cdot P'_{n-1}(x)-nP'_{n-1}(x) +(2n+1)P_{n-1}(x) \qquad (n\ge2) \end{align} \]

Legendre多项式前几项

\(n\) \(0\) \(1\) \(2\) \(3\) \(4\)