python拉格朗日插值_拉格朗日插值多项式在Python中的实现
什么是拉格朗日插值多项式在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法。许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。如对实践中的某个物理量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值。这样的多项式称为拉格朗日(插值)多项式。数学上来说,拉格朗日插值法可以给出一个恰好穿过二维平面上若干个已知点的多项式函数。拉格朗日插值法最早被英国数学家爱德华·华林于1779年发现,不久后(1783年)由莱昂哈德·欧拉再次发现。1795年,拉格朗日在其著作《师范学校数学基础教程》中发表了这个插值方法,从此他的名字就和这个方法联系在一起。
——百度百科
数学表示形式
平面上有
共
个点,构造最高为
次的多项式函数
最终的Ln(x)Ln(x)化简后会得出最高不超过n−1n−1次的过平面上nn个点的多项式
Python中的实现可以使用Jupyter方便操作
引用相关科学计算库
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
核心代码:实现pk(x)pk(x)和Ln(x)Ln(x)
def p(k,targs): # 运用闭包返回p_k(x)
def rtn_func(x):
rtn=1
for i in targs: # 累乘
if i==k: continue # i!=k
rtn*=x-i[0]
rtn/=k[0]-i[0]
rtn*=k[1]
return rtn
return rtn_func
def L(*targs): # 运用闭包返回L(x)
funcs=[p(i,targs) for i in targs] # 获取p_k(x)
def rtn_func(x):
rtn=0
for i in funcs:rtn+=i(x)# 执行累加
return rtn
return rtn_func
输入待拟合的数据,绘图
data=[[1,1],[2,2],[3,2],[4,6],[5,-1],[0,-1]]
func=L(*data) # 返回多项式函数
x=np.arange(0,5,0.1) # 范围[0,5),间隔0.1
y=[func(i) for i in x] # 获取值
plt.title("Lagrange Interpolation Polynomial")
plt.plot(x,y)
plt.show() # 运用matplotlib显示图像
结果如图:
Python优化
def p(args,ex):
def loop(largs):
if len(largs)==1:return [1,-largs[0]]
dp=loop(largs[1:])
return [-largs[0]*i+j for i,j in zip([0]+dp,dp+[0])]
largs=list(args)
largs.remove(ex)
div=1
for i in largs:
div*=ex[0]-i[0]
return [i*ex[1]/div for i in loop(list(zip(*largs))[0])]
def L(*args):
lists=[p(args,i) for i in args]
ans=[sum(i) for i in zip(*lists)]
ans.reverse()
def rtn_func(x):
return sum([a*x**i for i,a in enumerate(ans)])
return rtn_func
很短,能用,速度快,直接计算出多项式系数,无需循环
至于快了多少,见测试(测试环境:i5-8650U笔记本,未插电)
print('Time test:')
# data gen
data=[[0,0]]
for i in range(0,63):
data.append([data[i][0]+np.random.ranf(),np.random.ranf()])
print('#1 func gen')
%time func_new=new_L(*data)
%time func=L(*data)
print('#2 calc')
x=np.arange(0,100,0.01)
%time y1=[func_new(i) for i in x]
%time y2=[func(i) for i in x]
输出:
Time test:
#1 func gen
Wall time: 36 ms
Wall time: 0 ns
#2 calc
Wall time: 429 ms
Wall time: 26.7 s
虽然函数预处理需要更长的时间,但是运算时快了不止一个量级文章同步发布于我的博客:Dust's Bloghttps://dustsblog.tk/posts/2020/04/23/lagrange-in-python.htmldustsblog.tk
python拉格朗日插值_拉格朗日插值多项式在Python中的实现相关推荐
- python缺失值拉格朗日插值_拉格朗日插值-python
在数据库中,有些数据是异常值或者空值,这些值在分析的时候应该特殊处理,比如最简单的忽略掉或者通过算法推测它的值.其中拉格朗日插值就是通过其他已经知道的值,对x位置缺失的值插入的算法. 假定我们已经知道 ...
- 拉格朗日插值_拉格朗日插值定理的理论基础
缺失,几乎是不可避免的.只要做数据处理,不可避免的工作就是插值.而插值里面比较常用的方法之一就是拉格朗日插值法,这篇文章就跟大家讲讲拉格朗日插值的理论基础. 为什么需要进行插值 我们进行数据处理的理想 ...
- python编程基础_月隐学python第2课
python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...
- 查看Python的版本_查看当前安装Python的版本
一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...
- 【算法讲14:拉格朗日插值】拉格朗日插值入门 与 拉格朗日插值差分法
[算法讲14:拉格朗日插值] 前言 引入 ⌈\lceil⌈拉格朗日插值⌋\rfloor⌋ 代码 ⌈\lceil⌈拉格朗日插值⌋\rfloor⌋差分法运用 代码 前言 拉格朗日插值可以出的很难,对于一个 ...
- python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)
一.前言 请务必看到最后.Python牛已经不是一天两天的事了,但是我开始也没想到,Python能这么牛.前段时间接触了一个批量抠图的模型库,而后在一些视频中找到灵感,觉得应该可以通过抠图的方式,给视 ...
- python gis库_使用开放的python库自动化GIS和遥感工作流
python gis库 Over my career I've worked on many geospatial related projects using the ArcGIS platform ...
- python并行运算库_最佳并行绘图Python库简介:“ HiPlot”
python并行运算库 HiPlot is Facebook's Python library to support visualization of high-dimensional data ta ...
- python新手难点_初学两天python的操作难点总结
已经学习两天python,将我认为的操作难点进行总结 1 在cmd下 盘与盘之间的切换 直接 D或d: 就好 2 查找当前盘或者文件下面的目录 直接 dir 3 想在一个盘下进去一个文件夹,用cd空格 ...
- python内存泄漏_诊断和修复Python中的内存泄漏
python内存泄漏 Fugue uses Python extensively throughout the Conductor and in our support tools, due to i ...
最新文章
- Thread.sleep(0):线程休眠0秒有什么意义!
- ARP协议抓包分析 -- wireshark
- html调用python_对Python3 解析html的几种操作方式小结
- 箭头函数的使用用法(一)
- 找不到libmmd.dll无法继续执行代码_300 行代码带你秒懂 Java 多线程!| 原力计划...
- java aio socket_[Java]socket Aio demo
- 文件的HANDLE转化为FILE*!!!
- vmware workstation虚拟环境安装及创建虚拟机
- 计算机视觉论文-2021-07-13
- 【140815】VC编程技巧280例 电子书下载
- 电商系统之商品类目及商品属性史
- Taylor Swift为何听不到搜不到她的歌曲了?让我告诉你个好法子
- 服务器安装系统要如何载入驱动程序,Dell 服务器安装Windows 2008 R2时手动加载阵列卡驱动...
- GF系列卫星分辨率介绍
- jpa执行插入报error performing isolated work错误
- BAT程序员轻轻松松拿20k?学会这些涨薪秘籍你也行!
- Everything研究之读取NTFS下的USN日志文件(2)
- 拼点游戏(类似于田忌赛马)
- Vulkan学习(十五): 总结
- HTML5 javascript实现音乐播放器