Python之勒让德多项式

news2024/11/17 9:43:44

文章目录

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

勒让德多项式简介

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

P n ( x ) = 1 2 n n ! d n d x n { ( x 2 − 1 ) n } P_n(x)=\frac{1}{2^nn!}\frac{\text d^n}{\text dx^n}\{(x^2-1)^n\} Pn(x)=2nn!1dxndn{(x21)n}

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

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

其中coef为系数列表 a 0 , a 1 , ⋯   , a n a_0, a_1,\cdots,a_n a0,a1,,an,表示生成

∑ i = 0 n a i P i ( x ) \sum_{i=0}^n a_iP_i(x) i=0naiPi(x)

domain表示 x x x的定义域,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] = 1
    p = 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 , y x,y x,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.])

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

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

P 2 ′ = ( 2 + 1 ) P 1 + P 1 ′ = 3 P 1 + 1 P_2'=(2+1)P_1+P_1'=3P_1+1 P2=(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.])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/160444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

D. Rorororobot(线段树寻找区间最大值)

Problem - 1709D - Codeforces 有一个网格,由n行和m列组成。行的编号是从1到n,从下到上。列从左至右编号为1至m。第i列的底部ai单元被封锁(第1,2,...,ai行的单元),其余n-ai单元没有被封锁。 一个机器人正在穿越这个网…

制冷设备远程监控解决方案

大中型工业制冷设备方面在国内发展还是处在一个发展期,前景广阔,在船舶行业,大型化,个性化,大冷量化是趋势,在石油石化领域,工艺分离、结晶浓缩、提纯催化需求低温,而在建筑领域&…

Vue+element 实现影响榜功能

目录 一、英雄榜实现 1、引入element Lib 和VUE 2、设置滚动条动态显示 1)设置对应的VUE参数名:scrollHiddenVar 2)VUE data定义 3)mounted 设置鼠标监听事件 4)监听方法 3、设置element Table 4、table 数组…

CentOS 7 升级 GCC/G++ 版本

CentOS 7官方源的 GCC 最新版本是 4.8.5,该版本发布于2015年,年代久远且不支持高版本的 C 编译了,因此有必要安装高版本的 GCC。   红帽(RedHat)中拥有多个已经编译好了的高版本 GCC,但未更新到 base 和 …

再说多线程(四)——Semaphore类

Semaphore提供了更精细化的多线程控制,如果你看过上一节的Mutex介绍,那么你应该很容易理解Semaphore类。我们直接先以例子开头,然后在介绍这个类。1.Semaphore实例看下面的代码:using System; using System.Threading;namespace S…

【爪洼岛冒险记】第3站:任务1:学会int和String之间的转换;任务2:将Java运算符全部收入囊中~ 任务3:拿下Java中的类型提升

🌱博主简介:是瑶瑶子啦,一名大一计科生,目前在努力学习C进阶,JavaSE。热爱写博客~正在努力成为一个厉害的开发程序媛! 📜所属专栏:爪洼岛冒险记 ✈往期博文回顾:【爪洼岛冒险记】第2站&#xff…

Allegro172版本如何快速打开和关闭层面操作指导

Allegro172版本如何快速打开和关闭层面操作指导 在做PCB设计的时候,打开和关闭某个层面是非常频繁的操作,尤其是丝印等等层面。 Allgeo升级到了172版本的时候,可以将常用的层面添加到Visibility菜单里,就不需要频繁打开颜色管理器打卡和关闭层面了,如下图 具体操作如下 打…

常见锁策略,CAS,synchronized原理

1.常见锁策略锁策略不仅仅局限于java,任何与"锁"相关的话题(操作系统,数据库...),都会涉及到锁策略,这些策略是给锁的实现者用来参考的1.1乐观锁vs悲观锁这个不是两把具体的锁.而是两类锁,是在锁冲突的概率上进行区分的乐观锁指的是预测锁竞争不是很激烈(做的工作相对…

Ambari2.7.5安装Flink1.14

文章目录下载Flink配置安装源下载ambari-flink-service服务修改配置文件创建用户和组重启Ambari登录Ambari安装Flink提交Flink任务Flink 直接单独提交到 On Yarn指定Flink在Yarn跑的容器运行Flink异常异常1异常2异常3下载Flink配置安装源 wget https://archive.apache.org/dis…

Goby+AWVS 联动

系列文章 AWVS安装与激活 AWVS扫描Web应用程序 AWVS扫描报告分析 GobyAWVS 联动 1.Goby简介 Goby是针对目标企业梳理最全面的工具,同构goby可以清晰的扫描出ip地址开放的端口,以及端口对应的服务,于此同事会根据开放的端口及应用进行实战…

分享116个ASP源码,总有一款适合您

ASP源码 分享116个ASP源码,总有一款适合您 116个ASP源码下载链接:https://pan.baidu.com/s/1LEs24-feWjvhac6vzyVecg?pwdnosx 提取码:nosx 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...&am…

2.线性表

##线性结构 基本特点:结构中各元素之间满足线性关系。 线性关系:数据元素之间存在一对一的关系 1.存在唯一的开始元素 2.存在唯一的终止元素 3.除了开始元素和终止元素,其他元素均有且仅有一个直接前驱元素和一个直接后驱元素。 所有元素可排…

Sass进阶指南 -- 写出更优雅的样式表

我以为已经会了,之前在公司写项目基本都是用sass写样式,十分顺手。直到有段时间,我准备参考Element Plus来设计自己组件库的工程结构,看到Element Plus那些优雅的sass用法时,我开始为我的浅薄和无知感到羞愧。这便开始…

Python学习笔记——集合

集合(set)是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。创建格式:parame {value01,value02,..…

LeetCode[313]超级丑数

难度:中等题目:超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes中。给你一个整数 n和一个整数数组 primes,返回第 n个 超级丑数 。题目数据保证第 n个 超级丑数 在 32-bit 带符号整数范围内。示例 1&#xff1a…

C++ 类和对象(三)

类和对象(一) 类和对象(二) 日期类 目录 一. 再谈构造函数 1.构造函数体赋值 2.初始化列表 3.隐式类型转换与explicit关键字 4.C11优化 二. static成员 1.概念 2.特性 三. 友元 1.友元函数 2.友元类 四. 内部…

Java 如何设计一款小游戏详细讲解(二)

继续上面(一),Java 如何设计一款小游戏详细讲解(一)步骤步骤一接下来我们主要完成GameJFrame,就是拼图游戏的界面及代码。这里接下来完成菜单的设置,将主界面的代码放到一个方法中,像下面这样,接下来我们书写菜单的代码…

基于Python实现种差值方法(完整代码详细教程)

三种插值方法都是使用Python自己实现的。1.1 最近邻插值寻找每个中心点周围的八个点中有无未丢失的点,如果有的话就赋值为第一个找到的点,如果没有就扩大范围再次寻找,在最大范围内都找不到的话就跳过。1.2 双线性插值使用解方程的方法求解&a…

(十八)Threads异步和多线程(Thread、Threadpool、Task)-语言进阶2

Threads异步和多线程-语言进阶2一、Thread1. 线程启动2. 线程等待3.前台线程/后台线程4.扩展thread封装回调二、Threadpool1.线程池2.线程池使用3.ManualResetEvent 线程池等待三、Task1. Task启动方式2.waitall 、waitany1.waitall2.waitany3.WaitAll、waitany场景4. 应用&…

Spring为什么这么火 之 Spring的创建及存储、获取Bean对象

目录 1、创建Spring项目 1.1、创建一个Maven项目 1.2、添加Spring框架支持 1.3、添加启动类 2、存储Bean对象 2.1、创建Bean对象 2.2、将Bean对象注册到Spring容器中 3、获取、使用Bean对象 3.1、得到Spring上下文对象 使用ApplicationContext作为Spring的上下文 【更…