数值计算:Legendre多项式
Legendre多项式的概念以及正交特性在此不多作描述,可以参考数学物理方程相关教材,本文主要讨论在数值计算中对于Legendre多项式以及其导数的计算方法。
Legendre多项式的计算
递推公式
(n+1)P_{n+1}(x)=(2n+1)x \cdot P_{n}(x)-nP_{n-1}(x) \qquad (n\ge2)
\end{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)\)存在类似的递推公式
(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)\)
(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多项式的更多相关文章
- Legendre多项式
Legendre多项式 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Legendre多项式的递归公式
- 通过实例学习 PyTorch
通过范例学习 PyTorch 本博文通过几个独立的例子介绍了 PyTorch 的基础概念. 其核心,PyTorch 提供了两个主要的特征: 一个 n-维张量(n-dimensional Tensor) ...
- MR 图像分割 相关论文摘要整理
<多分辨率水平集算法的乳腺MR图像分割> 针对乳腺 MR 图像信息量大.灰度不均匀.边界模糊.难分割的特点, 提出一种多分辨率水平集乳腺 MR图像分割算法. 算法的核心是首先利用小波多尺度 ...
- 复化梯形求积分——用Python进行数值计算
用程序来求积分的方法有很多,这篇文章主要是有关牛顿-科特斯公式. 学过插值算法的同学最容易想到的就是用插值函数代替被积分函数来求积分,但实际上在大部分场景下这是行不通的. 插值函数一般是一个不超过n次 ...
- Net数值计算MathNet.Numerics类库
一.Net自带的数值计算:System.Numerics 1.大整数BitInteger 方法:除数和余数.最大公约数 2.复数Complex 属性:实部.虚部.量值.相位 方法:共轭.倒数 二.Ma ...
- 用递归方法求n阶勒让德多项式的值
/* Date: 07/03/19 15:40 Description: 用递归法求n阶勒让德多项式的值 { 1 n=0 Pn(x)= { x n=1 { ((2n-1) ...
- Python数值计算之插值曲线拟合-01
3 插值与曲线拟合 Interpolation and Curve Fitting 给定n+1个数据点(xi,yi), i = 0,1,2,…,n,评估y(x). 3.1 介绍(introdu ...
- 多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]
全域多项式插值指的是在整个插值区域内形成一个多项式函数作为插值函数.关于多项式插值的基本知识,见“计算基本理论”. 在单项式基插值和牛顿插值形成的表达式中,求该表达式在某一点处的值使用的Horner嵌 ...
- 基于MATLAB的多项式数据拟合方法研究-毕业论文
摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...
随机推荐
- Blazor+Dapr+K8s微服务之事件发布订阅
我们要实现的是:在blazorweb服务中发布一个事件,并传递事件参数,然后在serviceapi1服务中订阅该事件,接收到blazorweb服务中发布的事件和参数. 1 在blazo ...
- RabbitMq安装(单点与集群)rabbitMq以及状态查询
集群进入某个节点查看指令:rabbitmqctl cluster_status单机版:docker run -d --name rabbit \-e RABBITMQ_DEFAULT_USER=adm ...
- SSD算法原理
Paper: https://arxiv.org/pdf/1512.02325.pdf SSD用神经网络(VGG)提取多层feature map ,来实现对不同大小物体的检测.如下图所示: We us ...
- iNeuOS工业互联平台,增加OPC UA驱动,同步和订阅方式读取数据
目 录 1. 概述... 1 2. 平台演示... 2 3. OPC UA应用效果... 2 1. 概述 最近的项目,用户需要使用OPC UA读取数据,通 ...
- ASH数据的迁移:导出导入
自己写的小工具: 查看帮助 [oracle@redhat76 2]$ ./orash Usage: sh orash keyword [value1] [value2] --------------- ...
- PyCharm——滚动鼠标调整字体大小
- JUnit5 快速入门指南
1. 安装 在pom中添加依赖 <properties> <junit.jupiter.version>5.3.2</junit.jupiter.version> ...
- 密钥交换协议之IKEv2
1. IKEv2 1.1 IKEv2简介 IKEv2(Internet Key Exchange Version 2,互联网密钥交换协议第 2 版)是第 1 版本的 IKE 协议(本文简称 IKEv1 ...
- Reader字符输入流和InputStreamReader和FileReader
1.FileReader extends InputStreamReader extends Reader 其中,Reader字符输入流和InputStreamReader和FileReader为字 ...
- C# 获得当前方法 和 方法调用链 的 方法
一个获得方法名的方法,depth表示调用此方法的回溯深度. 比如,A方法调用B方法,B方法调用GetCurrentMethodFullName(2),那么得到的结果是A方法的全名(namespace+ ...