0.前言

0.1 摘要

本文主要讲解了拉格朗日插值法和牛顿插值之间的对比。对于具体插值原理不做深入探讨,如有需要看参考文后的参考文献。

0.2 插值、拟合、逼近的几点说明[4]

  1. 插值:已知若干离散的点,根据这若干离散的点,推断出经过这些离散点的函数或求出这些之间的函数值
  2. 拟合:根据若干离散的数据,希望得到一个连续的函数,或是更加密集的离散方程与已知点相吻合,这个过程叫做拟合。
  3. 最小二乘意义下的拟合,是要求拟合函数与原始数据均方误差达到最小,不需要经过这些点,或是说不需要完全经过这些点。

1.正文

1.1 拉个朗日插值法

1.1.1 程序

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import time#print(plt.__file__ )def lagrange(X, Y, xx):"""拉格朗日插值法"""result = 0.0for i in range(len(Y)):f_temp = Y[i]for j in range(len(Y)):if i != j:f_temp *= (xx - X[j]) / (X[i] - X[j])result += f_tempreturn resultdef plot_image(X, Y, xq, yq,num):# 绘图plt.title("Lagrange_interpolation")  # 打印标题plt.plot(X, Y, 's', label="original values")  # 蓝色点表示原来的值plt.plot(xq, yq, 'r', label="interpolation values")  # 插值曲线words = "被插点数:{}".format(num)plt.text(3.5,-10,words,fontproperties='SimHei')plt.xlabel('x')plt.ylabel('y')plt.legend(loc=4)  # 指定lgend的位置plt.savefig('lagrange.png')plt.show()def main():# 开始计时start_time = time.clock()# 已30X = [-1, 0, 1, 2, 3, 4, 5]Y = [-20, -12, 1, 15, 4, 21, 41]# 计算的插值点num = 50 # 被插点数xq = np.linspace(np.min(X), np.max(X), num, endpoint=True)yq = []for xx in xq:yq.append(lagrange(X, Y, xx))# 绘图plot_image(X, Y, xq, yq,num)# 结束计时end_time = time.clock()consumer_time = end_time - start_timeprint("程序运行消耗时间: " + str(consumer_time))if __name__ == '__main__':main()

1.1.2 运行结果


---------------------------------------------------图1 拟合效果图

-------------------------------------------------图2 程序运行时间

1.2 牛顿插值法

1.2.1 程序

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from pylab import mpl
import numpy as np
import pandas as pd
import math
import time# %matplotlib inlinedef get_diff_table(X, Y):""" 得到差商表"""n = len(X)A = np.zeros([n, n])for i in range(0, n):A[i][0] = Y[i]  # 零阶均差for j in range(1, n):for i in range(j, n):A[i][j] = (A[i][j - 1] - A[i - 1][j - 1]) / (X[i] - X[i - j])return Adef newton_interpolation(X, Y, xx):""" 计算x点的插值1. f(x) = f(x0) + f[x0,x1](x-x0)+…… 牛顿插值函数2. f[x0,x1] = (f(x0)-f(x1))/(x0-x1)  chashang 差商3. (x-x0)(x-x1)……   x_diff 牛顿插值中,和差商相乘的那一项"""fx = Y[0]  # f(x0)chashang = np.zeros((len(X), len(X)))  # 差商表x_diff = 1.0# 将第0列赋值for j in range(0, len(X)):chashang[j, 0] = Y[j]  # 零阶差商 第零列差商# 计算插值for j in range(1, len(X)):  # 列# 计算x的多项式 x_diffx_diff = x_diff * (xx - X[j - 1])# 从第1列到第n列计算差商for i in range(j, len(X)):  # 行chashang[i, j] = (chashang[i, j - 1] - chashang[i - 1, j - 1]) / (X[i] - X[i - j])fx = fx + x_diff * chashang[j, j]return fxdef plot_image(X, Y, xq, yq,num):# 绘图plt.title("Newton_interpolation")  # 打印标题plt.plot(X, Y, 's', label="original values")  # 蓝色点表示原来的值plt.plot(xq, yq, 'r', label="interpolation values")  # 插值曲线words = "被插点数:{}".format(num)plt.text(3.5,-10,words,fontproperties='SimHei')plt.xlabel('x')plt.ylabel('y')plt.legend(loc=4)  # 指定lgend的位置plt.savefig('niudun.png')plt.show()def main():# 计算时间start_time = time.clock()# 已知点X = [-1, 0, 1, 2, 3, 4, 5]Y = [-20, -12, 1, 15, 4, 21, 41]# 计算的插值点num = 50 # 被插点数xq = np.linspace(np.min(X), np.max(X), num, endpoint=True)yq = []for xx in xq:yq.append(newton_interpolation(X, Y, xx))# 绘图plot_image(X, Y, xq, yq,num)# 结束计算时间end_time = time.clock()consumer_time = end_time - start_timeprint("程序运行消耗时间: " + str(consumer_time))if __name__ == '__main__':main()

1.2.2 结果


---------------------------------------------------图1 拟合效果图

-------------------------------------------------图2 程序运行时间

1.3. 讨论

  1. 拉格朗日插值法结构紧凑,形式优美,但在实际计算中,当插值点增加或减少时,多项式需要全部重新计算,非常不经济。
  2. 对于等距基点且插值节点多的情况会出现龙格(Runge)现象
  3. 由于差商表的建立,当增加或减少新节点时,只需要计算部分,牛顿插值具有承袭性。

参考文献

[1] https://blog.csdn.net/shenwansangz/article/details/88682785
[2] https://blog.csdn.net/weixin_30636089/article/details/98912342
[3] https://blog.csdn.net/deramer1/article/details/79040743
[4] https://www.cnblogs.com/BaiPao-XD/p/10885968.html
[5] https://blog.csdn.net/sgfmby1994/article/details/52598270/
[6] https://blog.csdn.net/qq_37568658/article/details/79489592
[7] http://www.pianshen.com/article/364698023/
PS:对于遗漏的参考文献,深表歉意!

【python】拉格朗日插值法 和 牛顿插值法相关推荐

  1. 拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较

    第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 [ 摘 要 ] 在生产和科研中出现的函数是多样的.对于一些函数很难找出其解析表达式.即使在某些情况下,可以写出函 数的解析表达式,但由于解析表 ...

  2. 拉格朗日插值的优缺点_拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较...

    第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 [ 摘 要 ] 在生产和科研中出现的函数是多样的.对于一些函数很难找出其解析表达式.即使在某些情况下,可以写出函 数的解析表达式,但由于解析表 ...

  3. 【数值分析】拉格朗日插值法与牛顿插值法的C++实现

    数值分析--拉格朗日插值法与牛顿插值法的C++实现 文章目录 数值分析--拉格朗日插值法与牛顿插值法的C++实现 一.插值法 1.1 插值法定义 1.2 插值多项式唯一性定理 二.拉格朗日(Lagra ...

  4. 【数学建模笔记】【第三讲】拉格朗日插值法,牛顿插值法,分段三次埃尔米特插值法及其MATLAB实践

    温馨提示:本文共有3748字,阅读并理解全文大概需要15-20分钟 插值算法 一.插值法的定义 1.插值函数一共有三种: 2.多项式插值法原理 3.分段插值法原理: 4.具体如何求插值函数呢? (1) ...

  5. C语言实现拉格朗日插值法和牛顿插值法

    拉格朗日插值法的实现就是通过构造函数,通过已知几对数据然后估算输入对应的数据所得得值. 通过例子可知道拉格朗日法,假设有三组数据分别为(x0,y0),(x1,y1),(x2,y2),与第一个y值相乘得 ...

  6. 数值计算(三)-插值法(2)牛顿插值法

    拉格朗日插值法每当节点增加或者减少时,其对应的插值基函数都是需要重新构造,所以在实际计算时非常不方便,因此出现了一种新的插值法:Newton插值法. 均差 在学习Newton插值法之前时,先了解一个概 ...

  7. 拉格朗日插值的优缺点_拉格朗日与牛顿插值法的比较

    第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 一. 背景 在工程和科学研究中出现的函数是多种多样的.常常会遇到这样的情况:在某个实际 问题中,虽然可以断定所考虑的函数 ) ( x f 在区 ...

  8. 理解插值法(拉格朗日、牛顿插值法)

    引言 我们首先理解下插值法主要用来做什么事:插值法就是利用已知的点建立合适的插值函数 f ( x ) f(x) f(x) ,未知点 x i x_i xi​ 由插值函数 f ( x ) f(x) f(x ...

  9. 1月16日:拉格朗日中值定理,罗尔定理,柯西中值,拉格朗日插值,牛顿插值,重心插值,拉格朗日乘子法的证明

    拉格朗日中值定理 https://www.bilibili.com/video/BV117411E7kx?from=search&seid=17921778669593975548 拉格朗日中 ...

  10. 2021-01-07 matlab数值分析  插值法 拉格朗日插值法 牛顿插值法

    matlab数值分析  插值法 1 拉格朗日插值法 function yh=lagrange(x,y,xh) n=length(x); m=length(xh); yh=zeros(1,m); for ...

最新文章

  1. 用Python解锁“吃鸡”正确姿势
  2. 诚安聚立总裁刘志军:对标三大征信局与FICO 坚持风控能力输出
  3. Win10下使用HDFView查看hdf5文件
  4. 怎么把线稿提取出来_ps提取线稿教程(ps怎么把图片的线稿弄出来)
  5. MIME协议(三) -- MIME邮件的组织结构
  6. 1-7docke的网络模式
  7. 特殊mac地址文档_Mac颜值秒杀Win10?五款神器让Win10化身macOS
  8. bootstrap中的模态框(modal,弹出层)
  9. C++中STL-vector的用法
  10. win7注册表后开启AHCI模式
  11. 2020北京师范大学计算机考研,北京师范大学2021考研初试经验
  12. 线束测试仪新应用:针对于高铁级电动“新巴客”的线束测试
  13. python没有pygame_教程丨python 做一个简单的MP3
  14. 【论文翻译】Deep Learning
  15. Android 流媒体播放 live streaming
  16. 当BTC大空头遇上PlusToken,投资竟然成为一门玄学?
  17. CocosCreator-动态生成3种敌人
  18. 一年级下册计算机教学计划,一年级科学下册教学计划
  19. 第十六周项目3函数指针调用函数 吃饭睡觉打豆豆
  20. MySQL的数据操作

热门文章

  1. flash动画制作成品_Flash如何制作雪糕被吃掉的动画
  2. python 最小二乘回归 高斯核_[数值计算] 数据拟合——非线性最小二乘法
  3. access 跳过一次for循环_Java中的循环结构
  4. java 盘符 系统_给想学java的小白们的福利——java开发入门
  5. 计算机组成原理:计算机内负数二进制求得方式
  6. string类用法Java_Java中String类的用法
  7. 关于Pulsar与Kafka的对比
  8. 算法面试_怎么简单高效的理解递归?//TODO
  9. Ubuntu18.04 orb-slam3编译出现的错误 undefined reference to symbol ‘_ZN3MPI8Datatype4FreeEv‘ libmpi_cxx.so
  10. 论文笔记_S2D.38_2018-CVPR_DORN_用于单目深度估计的深度有序回归网络