文章目录

  • 勒让德多项式简介
  • 求导和积分
  • 求根和反演
  • 拟合

勒让德多项式简介

Legendre多项式是一种非常重要的正交多项式,在物理学中有着广泛的应用,例如点电荷在空间中的激发电势就具备勒让德多项式的形式。其表达形式为

Pn(x)=12nn!dndxn{(x2−1)n}P_n(x)=\frac{1}{2^nn!}\frac{\text d^n}{\text dx^n}\{(x^2-1)^n\} Pn​(x)=2nn!1​dxndn​{(x2−1)n}

其中nnn为勒让德多项式的阶数,在Python中,提供了Legendre类,构造函数为

legendre.Legendre(coef, domain=None, window=None, symbol='x')

其中coef为系数列表a0,a1,⋯,ana_0, a_1,\cdots,a_na0​,a1​,⋯,an​,表示生成

∑i=0naiPi(x)\sum_{i=0}^n a_iP_i(x) i=0∑n​ai​Pi​(x)

domain表示xxx的定义域,window表示缩放系数,x为自变量符号。

from numpy.polynomial.legendre import Legendre
p3 = Legendre(coef=[4,3,2,1])
print(p3)
# 输出为4.0 + 3.0 P_1(x) + 2.0 P_2(x) + 1.0 P_3(x)

为了对勒让德多项式有个直观的认识,可以绘制一下不同阶数的勒让德多项式的函数

import numpy as np
import matplotlib.pyplot as plt
for i in range(5):c = np.zeros(i+1)c[i] = 1p = Legendre(coef=c, domain=(-5,5))xs, ys = p.linspace()plt.plot(xs, ys, label=str(i))plt.legend()
plt.show()

其中linspace表示在定义域范围内对多项式进行采样,有一个参数n,表示在定义域范围内等间隔生成n组x,yx,yx,y,默认为100。

得图如下

求导和积分

Legendre支持简单的符号计算,比如可通过deriv(n)求多项式的n阶导数;通过integ(n)可求n阶积分,示例如下

>>> p3.deriv(1)
Legendre([4., 6., 5.], domain=[-1.,  1.], window=[-1.,  1.])
>>> p3.deriv(3)
Legendre([15.], domain=[-1.,  1.], window=[-1.,  1.])
>>> p3.integ(1)
Legendre([0.375     , 3.6       , 0.85714286, 0.4       , 0.14285714], domain=[-1.,  1.], window=[-1.,  1.])

勒让德多项式满足导数递推公式

(2n+1)Pn=Pn+1′−Pn′P1′=1(2n+1)P_n=P_{n+1}'-P_n'\quad P_1'=1 (2n+1)Pn​=Pn+1′​−Pn′​P1′​=1

则P2′=(2+1)P1+P1′=3P1+1P_2'=(2+1)P_1+P_1'=3P_1+1P2′​=(2+1)P1​+P1′​=3P1​+1,则常数项为一阶项的3加上二阶项的1,即4。

求根和反演

roots可用于求根,而fromroot可根据根来生成Hermite多项式

>>> rs = p3.roots()
>>> print(rs)
[-1.38964076+0.j          0.09482038-0.92441421j  0.09482038+0.92441421j]
>>> pNew = p3.fromroots(rs)
>>> print(pNew)
(1.5999999999999992+0j) + (1.1999999999999982+0j) P_1(x) +
(0.7999999999999996+0j) P_2(x) + (0.4+0j) P_3(x)

可以发现rootsfromroots并非对称的关系。

拟合

Legendre类中同样提供了拟合函数fit,定义为

Legendre.fit(x, y, deg, domain=None, rcond=None, full=False, w=None, window=None, symbol='x')

其中domain, window, symbol不必赘述,其中x,y为待拟合多项式;deg为多项式的阶数。rcond表示截止误差。fullFalse时,只返回拟合系数,否则还返回拟合的标准差等。

>>> xs, ys = p3.linspace()
>>> p3 = Legendre(coef=[4,3,2,1])
>>> xs, ys = p3.linspace()
>>> p3_3 = p3.fit(xs, ys, 3)
>>> print(p3_3)
3.999999999999999 + 3.0000000000000013 P_1(x) +
2.0000000000000027 P_2(x) + 1.0000000000000018 P_3(x)
>>> p3_4 = p3.fit(xs, ys, 4)
>>> print(p3_4)
3.9999999999999987 + 2.9999999999999996 P_1(x) +
2.000000000000007 P_2(x) + 1.000000000000004 P_3(x) -
1.2341811704615316e-14 P_4(x)

可见其拟合效果还是不错的。

degree返回多项式的最高项次数,cutdeg可以对多项式的次数做阶段,例如

>>> p3.degree()
3
>>> p3.cutdeg(2)
Legendre([4., 3., 2.], domain=[-1.,  1.], window=[-1.,  1.])

Python之勒让德多项式相关推荐

  1. 勒让德多项式(Python实现)

    下面是使用了sympy,其中x为设置的symbols. point是一个整数的参数,我把这个放到了全局变量中,方便修改 也可以放到函数参数中. 代表的是有多少个零点的勒让德多项式. def P():i ...

  2. 正交多项式族(勒让德多项式跟切比雪夫多项式)理论

    简述 这里显示两种,分别是,勒让德多项式跟切比雪夫多项式 勒让德多项式 区间是 x∈[−1,1]x\in[-1, 1]x∈[−1,1],权函数为ρ(x)≡1\rho(x)\equiv1ρ(x)≡1 P ...

  3. 计算勒让德多项式的系数

    重叠积分的计算公式 计算其中的系数Clamc和Clbmd,以计算HF为例,F原子第二层电子的勒让德多项式 由 展开 因此Clm0=0:Clm1=8 同样H原子电子的勒让德多项式 展开 因此只有1个系数 ...

  4. 【NA】函数最佳逼近(二)勒让德多项式

    文章目录 正交多项式序列. 勒让德多项式. [a,b][a,b][a,b] 正交多项式序列. 如果多项式序列 {pn(x),n=0,1,...}\{p_n(x),n=0,1,...\}{pn​(x), ...

  5. matlab编程勒让德多项式展开例题解析,第19 勒让德多项式 球函数习题及解答

    第19 勒让德多项式 球函数习题及解答 ---------------------------- 19.1 试证明 ,其中 . 19.2计算. [答案 ] 19.3求积分 . [答案 ] 19.4 求 ...

  6. 勒让德多项式(Legendre Polynomials)推导

    推导Legendre Polynomials(勒让德多项式) 问题: 证明Legendre Polylnomails(勒让德多项式)是Legendre Differential Equation(勒让 ...

  7. C++实现勒让德多项式(附完整源码)

    C++实现勒让德多项式 #include <iostream> using namespace std; double p(int n, double x) {if (n == 0)

  8. MATLAB中勒让德多项式程序

    function p = legendre(t,n) %求勒让德多项式的函数 %计算勒让德多项式中的x^2-1 f = ( t * t - 1)^n; %对f多项式进行n阶求导 y = diff( f ...

  9. 数学物理方程 第五章 勒让德多项式

    Legendre多项式 分离变量法中使用的本征函数是三角函数系,本章使用的本征函数是勒让德多项式. 1. 对比 Sturn-Liouville本征值问题 分离变量法一章讨论的是  X''+λX=0  ...

最新文章

  1. Oracle的介绍及其在安装和使用Oracle过程中可能遇到的困难及其相应的解决措施
  2. 关于项目数据库设计--投票系统
  3. 使用Spring进行面向切面编程(AOP)---讲解+代码
  4. 15.profile-api
  5. c#之Stringbuilder、String、Append
  6. SNIFE 和 std::enable_if
  7. 编译安装libmemcached库报错
  8. C语言调用外部API实现车牌识别
  9. Maxscript开发笔记
  10. 微软已修复Windows10蓝屏死亡(BSOD)错误
  11. 草莓派Raspberry3B
  12. 联机(脱机)手写汉字识别
  13. ip 查找计算机,win10系统通过ip地址查找计算机名的详细技巧
  14. vue——router更改路由地址,但是页面不能跳转
  15. ch341a编程器写操作超时失败
  16. simpleBGC32-软件代码开源
  17. Linux中断子系统(二)中断控制器GIC驱动分析
  18. 电脑上显示打印机无法连接服务器错误代码,电脑怎么连接打印机显示错误代码的解决办法...
  19. 两个L组成的括号?(取整符号)
  20. java中parseint函数_浅谈 js中parseInt函数的解析

热门文章

  1. 特征融合 Pytorch concat串连两个预训练特征
  2. 暑期实习前端面试笔试总结汇总
  3. 猿创征文|openGauss数据库从3.0.0升级到3.1.0操作实践
  4. 纽顿集团在纳斯达克上市:IPO首日下跌63%,市值大幅缩水
  5. 触摸数学激情——与数学家张景中对话
  6. 基于Scikit-image将图像打马赛克
  7. 猜拳小游戏(Java)
  8. 五子棋小游戏基于C++语言
  9. eBay礼品卡如何购买使用?
  10. 66-甲说乙说谎,乙说丙说谎,丙说甲乙说谎