一、插值

设函数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】相关推荐

  1. 解读 拉格朗日插值法python,保你学明白

    文章目录 概述拉格朗日插值法 什么是插值法 拉格朗日插值法的原理 拉格朗日公式 拉格朗日插值法的代码实现 Python 进行拉格朗日插值的主要知识点 Polyfit 函数 Polyval 函数 Lin ...

  2. 拉格朗日插值法+python实现

    拉格朗日插值法 1.数学原理 1.1 线性插值 1.2二次插值 1.3 n次拉格朗日插值多项式 2.Python实现 本文将介绍拉格朗日插值法得数学原理,并用Python实现. 1.数学原理 首先我们 ...

  3. 缺失值处理 - 拉格朗日插值法 - Python代码

    目录 缺失值处理 拉格朗日差值法的理论基础 拉格朗日插值法代码实现 其他数据预处理方法 缺失值处理 处理缺失值常用的办法可分为三类:删除记录.数据插补.不处理. 其中常见的数据插补法有: 如果通过删除 ...

  4. 拉格朗日插值法--python

    数据分析 数据清洗:缺失值处理.1删除记录 2数据插补 3不处理 数据 链接:https://pan.baidu.com/s/1jiIOoselsqVQR4P_EaS3pA 提取码:t970 常见插补 ...

  5. 拉格朗日插值法python实现

    目录 1.原理 2.涉及的Python库 3.例子 1.原理 对某个多项式函数有已知的k+1个点,假设任意两个不同的都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为: L(x)=∑j= ...

  6. 拉格朗日插值法——python代码实现

    一.拉格朗日的基本思想: 二.线性插值 三.多个点 四.代码实现 def lagrange(xx,y):l=len(y)l_n = 0for k in range(l):xxx=xx.copy()x_ ...

  7. 拉格朗日插值法《python数据分析与挖掘实践》

    数据清洗 数据清洗主要是删除原始数据集中地无关数据.重复数据.平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值.异常值等. 缺失值处理的方法可分为3类:删除记录.数据插补和不处理. 删除含有缺失值 ...

  8. python拉格朗日插值法_Python实现的拉格朗日插值法示例

    本文实例讲述了Python实现的拉格朗日插值法.分享给大家供大家参考,具体如下: 拉格朗日插值简单介绍 拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法. 许多实际问题中都 ...

  9. 拉格朗日插值python代码_Python实现的拉格朗日插值法示例

    本文实例讲述了Python实现的拉格朗日插值法.分享给大家供大家参考,具体如下: 拉格朗日插值简单介绍 拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法. 许多实际问题中都 ...

最新文章

  1. MyEclipse 9.x Professional/blue/spring/bling 下载与破解
  2. 量子力学 一 基础7 酉算符与Hausdorff-Campbell公式
  3. java的枚举类enum
  4. Java 洛谷 P1426 小鱼会有危险吗
  5. 收官礼 |《神策 2018 数据驱动大会回顾专刊》发布,你要的干货,已打包!
  6. 使用RestTemplate模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别
  7. Cloud Connect: 使用现有的云基础设施来降低使用云编码的操作成本
  8. 8-1 回溯法实验报告 (15 分)(思路+详解)
  9. 推挽输出和开漏输出_关于51单片机IO口的输出模式结构
  10. Bootstrap CSS 编码规范之注释
  11. try catch对异常进行输出到日志、_spring Boot手把手教学(7): 抛弃try-catch, 如何优雅统一处理异常(含404)...
  12. swift学习第四章
  13. word2vec理论与实践
  14. hadoop安装和基本知识
  15. torch中permute()函数用法补充内容(矩阵维度变化详细过程)
  16. GoEasy使用方法记录
  17. 【热门主题:银魂win7主题】
  18. 一个IO控制很多个LED,这个技能你get到了吗
  19. wordpress中文管理软件,wordpress中文在线翻译
  20. Extmail修改模板

热门文章

  1. STL源码剖析-Allocator
  2. SVN checkout报错The XML response contains invalid XML
  3. 高斯白噪声的统计特性
  4. mysql 时间函数的使用
  5. 为App签名(为apk签名)
  6. 懒惰使人沉睡;懈怠的人必受饥饿。
  7. Tarjan算法超详细讲解(割点割边强连通)
  8. ArcGIS水文分析实战教程(8)水库库容计算
  9. ACM素数打表(模版)
  10. js提交成功后,清空表单