拉格朗日插值法 【python】
一、插值
设函数y=f(x)在区间[a,b]上连续,给定n+1个点
a≤x0<x1<....<xn≤b
已知,f(xk)=yk(k=0,1....n),在函数类P中寻找一个函数Φ(x)。作为f(x)的近似表达式,使满足:
Φ(xk)=f(xk)=yk, k=0,1,2,3,4....n (2)
f(x)为被插值函数,Φ(x)为插值函数,x0,x1....xn为插值节点。(2)为插值节点。
二、拉格朗日插值法
线性插值:拉格朗日插值法中最简单的是线性插值,我们先来了解线性插值函数的构成。在此基础上了解多次插值,
已知两点(x0,y0)和(x1,y1),这里f(x0)=y0,f(x1)=y1,通过这两个点的插值多项式是一条直线,如下:
(x-x1)/(x0-x1)*y0+(x-x0)/(x1-x0)*y1 可以看出当x=x0的时候,函数值y0,当x=x1的时候,函数值为y1.
多项插值
在线性插值中,仅仅用到了两个点,为了提高精度,我们希望用更多的点来提高精度。为此我们用三个点来做插值
已知点(x0,y0),(x1,y1),(x2,y2).如下图所示,式1是两次的拉格朗日插值函数。式2是拉格朗日函数的一般形式。
当x=x0的时候,l0(x)的值为1,l1(x)的值为0,l2(x)的值为0.最后函数值为y0.
拉格朗日插值的函数的形式都是如式二所示。假设有n个点进行拉格朗日插值。则插值函数一共有n项,每一项都是ln(x)*yn (n的取值为1到n),当x=m的时候(m为1到n中的数时),相应的ln(x)为一,其他项为0。函数值为ym.
但是,我们应该如何求解ln(x)呢。以上面的三个点为例,在求l0的时候,分子为x减去除了x0的点的连乘,分母为x0减去除x0点的连乘。其他的项也是这样计算的。
三、拉格朗日插值法的python应用
下面的程序是求点(100,10),(121,11),(144,12),可以看出函数为根号x,现在用拉格朗日插值法求三个点的插值函数,并绘制出函数图像,并求将根号115对应的函数值画在同一坐标系中,观察拉格朗日插值法的精确度。
import matplotlib.pyplot as plt
from pylab import mpl
"""
用拉格朗日插值法拟合数据。
""""""
功能:计算插值多项式的系数。
参数:data_x为数据的x坐标,data_y为数据的y坐标,size为插值基函数的个数。
返回值:插值函数的系数。
"""
x = [100, 121, 144]
y = [10,11, 12]def ParametersOfLagrangeInterpolation(data_x,data_y,size):parameters=[]#i用来控制参数的个数i=0;while i < size:#j用来控制循环的变量做累乘j = 0;temp = 1;while j < size:if(i != j):temp*=data_x[i]-data_x[j]j+=1;parameters.append(data_y[i]/temp)i += 1;return parameters"""
功能:计算拉格朗日插值法公式的值。
参数:data_x为原始数据的横坐标,x为要用拉格朗日插值函数计算数据,parameters为拉格朗日插值函数的系数。
返回值:经拉格朗日插值公式计算后的值。
"""def CalculateTheValueOfLarangeInterpolation(data_x,parameters,x):returnValue=0i = 0;while i < len(parameters):temp = 1j = 0;while j< len(parameters):if(i!=j):temp *=x-data_x[j]j+=1returnValue += temp * parameters[i]i += 1return returnValue"""
功能:将函数绘制成图像
参数:data_x,data_y为离散的点.new_data_x,new_data_y为由拉格朗日插值函数计算的值。x为函数的预测值。
返回值:空
"""
def Draw(data_x,data_y,new_data_x,new_data_y):plt.plot(new_data_x, new_data_y, label="拟合曲线", color="black")plt.scatter(data_x,data_y, label="离散数据",color="red")plt.scatter(115, 10.723805294764, label="真实数据", color="green")mpl.rcParams['font.sans-serif'] = ['SimHei']mpl.rcParams['axes.unicode_minus'] = Falseplt.title("拉格朗日插值拟合数据")plt.legend(loc="upper left")plt.show()"""
由于三个点绘制的拟合曲线效果太差,所以采用这样的方法来进行数据拟合。
1>利用原数据计算出拉格朗日插值多项式的函数,分别在10-150区间内,每10个数取一个点,计算相应的值,绘制函数图像。
2>将源数据以点的形式画在图像上,
3>将115代入拉格朗日函数计算出相应的值,绘制在图像上。点为红色。并将真实的值也绘制在图像上点为绿色。看红色的点和绿色的点是否重合。
4>结果证明红色的点和绿色的点重合,说明拉格朗日函数插值效果较好。
"""
parameters=ParametersOfLagrangeInterpolation(x,y,3)
datax=[10,20,30,40,50,60,70,80,90,100,110,120,130,140,150]
datay=[]
for temp in datax:datay.append(CalculateTheValueOfLarangeInterpolation(x,parameters,temp))
x.append(115)
y.append(CalculateTheValueOfLarangeInterpolation(x,parameters,115))
Draw(x,y,datax,datay)
下面是拉格朗日插值法的效果图,可以看出,插值函数基本能和根号115重合。
拉格朗日插值法 【python】相关推荐
- 解读 拉格朗日插值法python,保你学明白
文章目录 概述拉格朗日插值法 什么是插值法 拉格朗日插值法的原理 拉格朗日公式 拉格朗日插值法的代码实现 Python 进行拉格朗日插值的主要知识点 Polyfit 函数 Polyval 函数 Lin ...
- 拉格朗日插值法+python实现
拉格朗日插值法 1.数学原理 1.1 线性插值 1.2二次插值 1.3 n次拉格朗日插值多项式 2.Python实现 本文将介绍拉格朗日插值法得数学原理,并用Python实现. 1.数学原理 首先我们 ...
- 缺失值处理 - 拉格朗日插值法 - Python代码
目录 缺失值处理 拉格朗日差值法的理论基础 拉格朗日插值法代码实现 其他数据预处理方法 缺失值处理 处理缺失值常用的办法可分为三类:删除记录.数据插补.不处理. 其中常见的数据插补法有: 如果通过删除 ...
- 拉格朗日插值法--python
数据分析 数据清洗:缺失值处理.1删除记录 2数据插补 3不处理 数据 链接:https://pan.baidu.com/s/1jiIOoselsqVQR4P_EaS3pA 提取码:t970 常见插补 ...
- 拉格朗日插值法python实现
目录 1.原理 2.涉及的Python库 3.例子 1.原理 对某个多项式函数有已知的k+1个点,假设任意两个不同的都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为: L(x)=∑j= ...
- 拉格朗日插值法——python代码实现
一.拉格朗日的基本思想: 二.线性插值 三.多个点 四.代码实现 def lagrange(xx,y):l=len(y)l_n = 0for k in range(l):xxx=xx.copy()x_ ...
- 拉格朗日插值法《python数据分析与挖掘实践》
数据清洗 数据清洗主要是删除原始数据集中地无关数据.重复数据.平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值.异常值等. 缺失值处理的方法可分为3类:删除记录.数据插补和不处理. 删除含有缺失值 ...
- python拉格朗日插值法_Python实现的拉格朗日插值法示例
本文实例讲述了Python实现的拉格朗日插值法.分享给大家供大家参考,具体如下: 拉格朗日插值简单介绍 拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法. 许多实际问题中都 ...
- 拉格朗日插值python代码_Python实现的拉格朗日插值法示例
本文实例讲述了Python实现的拉格朗日插值法.分享给大家供大家参考,具体如下: 拉格朗日插值简单介绍 拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法. 许多实际问题中都 ...
最新文章
- MyEclipse 9.x Professional/blue/spring/bling 下载与破解
- 量子力学 一 基础7 酉算符与Hausdorff-Campbell公式
- java的枚举类enum
- Java 洛谷 P1426 小鱼会有危险吗
- 收官礼 |《神策 2018 数据驱动大会回顾专刊》发布,你要的干货,已打包!
- 使用RestTemplate模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别
- Cloud Connect: 使用现有的云基础设施来降低使用云编码的操作成本
- 8-1 回溯法实验报告 (15 分)(思路+详解)
- 推挽输出和开漏输出_关于51单片机IO口的输出模式结构
- Bootstrap CSS 编码规范之注释
- try catch对异常进行输出到日志、_spring Boot手把手教学(7): 抛弃try-catch, 如何优雅统一处理异常(含404)...
- swift学习第四章
- word2vec理论与实践
- hadoop安装和基本知识
- torch中permute()函数用法补充内容(矩阵维度变化详细过程)
- GoEasy使用方法记录
- 【热门主题:银魂win7主题】
- 一个IO控制很多个LED,这个技能你get到了吗
- wordpress中文管理软件,wordpress中文在线翻译
- Extmail修改模板