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)\) \(1\) \(x\) \(\frac{1}{2}(3x^2-1)\) \(\frac{1}{2}(5x^3-3x)\) \(\frac{1}{8}(35x^4-30x^2+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)\)​​存在类似的递推公式

\[\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\)
\(P'_{n}(x)\)​ \(0\) \(1\)​ \(3x\)​ \(\frac{1}{2}(15x^2-3)\)​ \(\frac{1}{2}(35x^3-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)")

数值计算:Legendre多项式的更多相关文章

  1. Legendre多项式

    Legendre多项式 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Legendre多项式的递归公式

  2. 通过实例学习 PyTorch

    通过范例学习 PyTorch 本博文通过几个独立的例子介绍了 PyTorch 的基础概念. 其核心,PyTorch 提供了两个主要的特征: 一个 n-维张量(n-dimensional Tensor) ...

  3. MR 图像分割 相关论文摘要整理

    <多分辨率水平集算法的乳腺MR图像分割> 针对乳腺 MR 图像信息量大.灰度不均匀.边界模糊.难分割的特点, 提出一种多分辨率水平集乳腺 MR图像分割算法. 算法的核心是首先利用小波多尺度 ...

  4. 复化梯形求积分——用Python进行数值计算

    用程序来求积分的方法有很多,这篇文章主要是有关牛顿-科特斯公式. 学过插值算法的同学最容易想到的就是用插值函数代替被积分函数来求积分,但实际上在大部分场景下这是行不通的. 插值函数一般是一个不超过n次 ...

  5. Net数值计算MathNet.Numerics类库

    一.Net自带的数值计算:System.Numerics 1.大整数BitInteger 方法:除数和余数.最大公约数 2.复数Complex 属性:实部.虚部.量值.相位 方法:共轭.倒数 二.Ma ...

  6. 用递归方法求n阶勒让德多项式的值

    /* Date: 07/03/19 15:40 Description: 用递归法求n阶勒让德多项式的值      { 1  n=0    Pn(x)= { x  n=1      { ((2n-1) ...

  7. Python数值计算之插值曲线拟合-01

        3 插值与曲线拟合 Interpolation and Curve Fitting 给定n+1个数据点(xi,yi), i = 0,1,2,…,n,评估y(x). 3.1 介绍(introdu ...

  8. 多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]

    全域多项式插值指的是在整个插值区域内形成一个多项式函数作为插值函数.关于多项式插值的基本知识,见“计算基本理论”. 在单项式基插值和牛顿插值形成的表达式中,求该表达式在某一点处的值使用的Horner嵌 ...

  9. 基于MATLAB的多项式数据拟合方法研究-毕业论文

    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...

随机推荐

  1. uwp 基础知识

    (TitleId,DiaplayName,args,LogoUri,size); Obj.VisualElements.ShowNameOnSquare150x150Logo = true; if ( ...

  2. BootStrap学习代码

    要为毕设做准备了! 哎,毕设前台得自己来,所以打算学学bootstrap,把学习的代码放到码云上面了,使用HbuilderX来写,界面友好,适合我这种前端小白- 第一天就感受到了写html快捷键的强大 ...

  3. mzy,struts学习(三):action中获得servlet中三域一参的三种方法

    package com.mzy.servlet; import java.util.Arrays; import java.util.Map; import javax.servlet.Servlet ...

  4. C++笔记(11) 智能指针

    1. 设计思想 智能指针是行为类似于指针的类对象,但这种对象还有其他功能.首先,看下面的函数: void remodel(std::string & str) { std::string * ...

  5. indexedDB数据库创建

    1.首先需要使用使用indexedDB.open()方法,打开数据库 2.通过createObjectStore方法创建表, 创建表之后, 这个表通过createIndex方法创建索引 3.通过tra ...

  6. Python:MySQL拒绝从远程访问的解决方法

    MySQL连接数据库 #!/usr/bin/python # -*- coding: UTF-8 -*- import pymysql # 打开数据库连接 db = pymysql.connect(& ...

  7. Mysql常用sql语句(7)- order by 对查询结果进行排序

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 通过select出来的结果集是按表中的顺序来排序 ...

  8. JDK7u21反序列化详解

    目录 前言 环境 倒序分析 TemplatesImpl AnnotationInvocationHandler HashMap 总结 前言 听说jdk7u21的反序列化涉及的知识量很多,很难啃,具体来 ...

  9. 文件流转换为url

      /**  * 文件流转换为url  * @param {} data //文件流  */ export function getObjectURL(data) {   var url = null ...

  10. es6语法中promise的使用方法

    Promise是一个构造函数,它有resolve,reject,race等静态方法;它的原型(prototype)上有then,catch方法,因此只要作为Promise的实例,都可以共享并调用Pro ...