数值计算:Legendre多项式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

Legendre多项式的计算
递推公式
(n+1)P n+1(x)=(2n+1)x⋅P n(x)−nP n−1(x)(n≥2)
通式可以⽤幂级数表⽰为以下形式:
P n(x)=
[
n
2]

k=0
(−1)k(2n−2k)!
2n k!(n−k)!(n−2k)!x n−2k n=0,1,2,⋯
Legendre多项式前⼏项
n01234
P n(x)1x1
2(3x2−1)1
2(5x3−3x)
1
8(35x4−30x2+3)
在实际数值计算中,按照通项公式计算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 !")
end
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;
end
end
Legendre多项式的导数
对于x的⼀阶导数P′n(x)存在类似的递推公式
(n+1)P′n+1(x)=(2n+1){x⋅P′n−1(x)+P n−1(x)}−nP′n−1(x)(n≥2)
化简得到⼀阶导数项的递推公式与之前形式类似,但包含额外⼀项(2n+1)P n−1(x)
(n+1)P′n+1(x)=(2n+1)x⋅P′n−1(x)−nP′n−1(x)+(2n+1)P n−1(x)(n≥2)
Legendre多项式前⼏项
n01234
P′n(x)013x 1
2(15x2−3)
1
2(35x3−15x)
%% Legendre多项式Pi(x)对于x的⼀阶导数
function L_x=myLegendre_x(N,x)
L=myLegendre(N,x);
L_x=zeros(1,N);%⽣成Legendre_x多项式矩阵
L_x(1,1)=0;
L_x(1,2)=1;
for i=2:N-1
L_x(1,i+1)=((2*i-1)*x*L_x(1,i)-(i-1)*L_x(1,i-1)+(2*i-1)*L(1,i))/i; end
end
计算结果
%%demo
x=0.5;N=100;
c=myLegendre(N,x);
c_x=myLegendre_x(N,x);
figure(2)
subplot(2,1,1)
plot(c,'-*');xlabel('N');title("P(x)") subplot(2,1,2)
plot(c_x,'-o');xlabel('N');title("P'(x)") Processing math: 100%。

相关文档
最新文档