0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python实现所有算法之牛顿前向插值介绍

云深之无迹 来源:云深之无迹 作者:云深之无迹 2022-07-12 09:50 次阅读

今天的算法是插值,细分是牛顿插值。关于插值可能大家听到最多的就是图像插值,比如100元的摄像头有4K的分辨率???其实这里就是使用的插值算法,通过已经有的数据再生成一些,相当于提升了数据的量。如果我们想放大图像,我们需要使用过采样算法来扩展矩阵。

pYYBAGLM05eAY2MjAABSXYv1LA4273.jpg

左边是原有的信息,右边是通过算法生成的新数据

poYBAGLM07GAJrhsAAA6-21HT14198.jpg

就像这样

在上图中,出现的算法是最近邻算法,也称为近端插值,是一维或多维空中多元插值的一种简单方法。插值是通过已知的离散数据点在一定范围内寻找新数据点的过程或方法。最近邻插值算法选择最接近数据点的值,完全不考虑其他相邻点的值,从而生成一个分段常数插值值作为数据点的值。线性的插值算法是双线插值是二维坐标系下线性插值的扩展,用于插值二元函数。它的核心思想是在两个方向上执行一次线性插值。

关于这里的图像算法我不想说什么,等之后我会补上。简单来说在数据给的少的情况下我们都可以考虑使用插值算法来生成新数据或者是改善。

注意我们处理的是离散数据:离散数据是指其数值只能用自然数或整数单位计算的数据。

离散函数:定义域是离散集合的函数称为离散函数。其函数图像为一系列离散的点。

在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。

理论就这么多了(其实也没有理论就是说下基本的概念)

牛逼的插值算法来自:

pYYBAGLM09OAZknNAAD6MBEqCls456.jpg

《自然哲学的数学原理》的第三卷的引理五

对牛顿插值来说,它最大的特点是引入了差商这个概念。差商即均差,一阶差商是一阶导数的近似值。对等步长(h)的离散函数f(x),其n阶差商就是它的n阶差分与其步长的n次幂的比值。例如n=1时,若差分取向前的或向后的,所得一阶差商就是函数的导数的一阶近似;若差分取中心的,则所得一阶差商是导数的二阶近似。

poYBAGLM0-2AZ1ifAAAr20LICPg988.jpg

对一个f(x)可以构造差商表来递推的给出差商

poYBAGLM1AuAXX1jAABEQbNlCaI204.jpg

计算的公式就是这样,因为是重复同一种范式,所以程序实现可以使用递归

poYBAGLM1CeAZIogAAB-MbMOFT4171.jpg

事实上我们应该给出一点更加规范的论证(不就是个导数)

有了上面的定义,作用是给出每一项的系数。具体推导是这样的:

poYBAGLM1FeAXT7gAABhV2RhS40520.jpg

最后的就是我们的插值公式

poYBAGLM1GiADQ0yAAArcyIHX5o549.jpg

为了看起来平易近人,可以写成这样

pYYBAGLM1HyABJjiAABlTQWKzPU147.jpg

poYBAGLM1JaAZutKAACqgUCg7kc242.jpg

还有一种是等间距的插值计算,在下面的计算中间距设置为h(方向为前向差分)

pYYBAGLM1LOAAr3KAAA7QwPpUJA856.jpg

pYYBAGLM1M2AMHhPAAB_DZIy0_4197.jpg

这个图就完美了!!!

poYBAGLM1OSAGD-YAABi5TFUN74249.jpg

二阶的前向差分后和后向差分都在这里了

牛顿插值作为一种常用的数值拟合方法,因其计算简单,方便进行大量插值点的计算。在实验中经常出现只能测量得到离散数据点的情况,或者只能用数值解表示某对应关系之时,可以使用牛顿插值公式,对离散点进行拟合,得到较为准确的函数解析值。

牛顿真厉害啊,几百年前他万万没有想到,一个小辈大晚上的还得研究人家随手写的东西。

牛顿插值算法的优点是,每一个新项的生成都不需要庞大的算力,对前一项进行计算就行,拉格朗日的算法是每一个新项都需要对基函数完全计算,耗费算力。最后我们的泰勒公式其实就是对牛顿的插值算法进行了改进:

poYBAGLM1P2AH3lYAABR6nRwpEg615.jpg

就记几项就行

对了,插值是针对自变量的任何中间值估计函数值的技术,而计算给定范围之外的函数值的过程称为外插。

pYYBAGLM1RuACxZaAABXD7Z-QxA343.jpg

u是啥?别着急

6fb521a8-0130-11ed-ba43-dac502259ad0.png

这个公式对于在给定值集的开头附近插值 f(x) 的值特别有用。h 称为差值区间,u = ( x – a ) / h,这里 a 是第一项。

函数就是算这个的。

poYBAGLM1TWAFJagAADMkRcDMQU489.jpg

测试

pYYBAGLM1U2ARMvSAACn-ZKwtzc850.jpg

下面的分母,需要求阶乘,这里也准备一个小函数

pYYBAGLM1WKAEClrAAB6xe5bwVI571.jpg

将输入的值转为整型,准备一个list,将输入的值输入到空白的二维数值表。

pYYBAGLM1YOAVzamAAB5fTLPMHg431.jpg

就像这样

pYYBAGLM1ZyAQKvHAAB3rg42HVY531.jpg

这个没有什么好说的,就是将输入的值解到该有的位置,而且计算差分值。

pYYBAGLM1b6ARk22AABN-NtS8B0728.jpg


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4585

    浏览量

    92443
  • 矩阵
    +关注

    关注

    0

    文章

    418

    浏览量

    34466
  • python
    +关注

    关注

    54

    文章

    4763

    浏览量

    84339
收藏 人收藏

    评论

    相关推荐

    Python建模算法与应用

    上成为理想的脚本语言,特别适用于快速的应用程序开发。本文将详细介绍Python在建模算法中的应用,包括常见的建模算法Python在建模中的
    的头像 发表于 07-24 10:41 387次阅读

    使用NumPy实现馈神经网络

    反向传播算法来更新网络权重和偏置。这里,我将详细介绍一个包含单个隐藏层的馈神经网络的实现,但请注意,由于篇幅限制,完整的2000字可能无法涵盖所有
    的头像 发表于 07-11 16:30 1466次阅读

    神经网络传播和反向传播区别

    神经网络是一种强大的机器学习模型,广泛应用于各种领域,如图像识别、语音识别、自然语言处理等。神经网络的核心是传播和反向传播算法。本文将详细介绍神经网络的
    的头像 发表于 07-02 14:18 554次阅读

    CNC系统的补运算介绍

    程序,通过计算机对刀具运动轨迹进行计算和控制,以实现高精度、高效率的加工过程。补运算是数控系统的核心功能之一,它直接影响到加工精度、加工效率和加工质量。 二、CNC系统补运算的原理
    的头像 发表于 07-01 11:21 706次阅读

    如何在labview FPGA端实现二维的功能?

    例如,现在有X,C,W三个,每一组(X.C)对应一个W,我拥有几组(X,C)和W的对应关系(即具体数值),我要根据未知的一组(X,C)来通过值得到W。其中X和C没有对应关系,请
    发表于 05-15 14:59

    什么是线性插值?一维线性插值和双线性插值在BMS开发中的应用

    线性插值法(linear interpolation),是指使用连接两个已知量的直线来确定在这两个已知量之间的一个未知量的的方法。
    的头像 发表于 12-24 10:44 8296次阅读
    什么是线性<b class='flag-5'>插值</b>?一维线性<b class='flag-5'>插值</b>和双线性<b class='flag-5'>插值</b>在BMS开发中的应用

    图像理论研究双三次插值

    双三次插值又叫双立方,用于在图像中“”(Interpolating)或增加“像素”(Pixel)数量/密度的一种方法。通常利用
    的头像 发表于 12-14 14:35 974次阅读
    图像<b class='flag-5'>插</b><b class='flag-5'>值</b>理论研究<b class='flag-5'>之</b>双三次<b class='flag-5'>插值</b>

    python中如何交换两个数的相加

    Python是一种简单易学的高级语言,其交换两个数的相加是一种常见的操作。交换变量的可以在许多情况下发挥作用,如算法、排序、逻辑控制等。本文将详细
    的头像 发表于 11-29 17:29 594次阅读

    python打印出abcd的所有排列组合

    如何使用Python生成"abcd"的所有排列组合,我们首先需要了解排列和组合的概念。排列是一组元素的有序排列,而组合是一组元素的无序选择。 为了打印出"abcd"的所有排列组合,我们可以使用递归函数来
    的头像 发表于 11-29 16:29 1262次阅读

    基于FPGA的线性插值-中

    上次分享了基于FPGA的线性插值的背景和方法原理,今天分享 方法原理的验证。 通常FPGA的开发分为电路功能设计、设计输入、功能仿真、综合优化、综合后仿真、实现、布线后仿真、板级仿真以及芯片编程
    发表于 11-23 23:09

    python编程交换a和b的

    交换a和b的是编程中的一个基础操作。在Python中,有多种方法可以实现这个任务。本文将详细介绍几种常见的交换方法,并给出具体的示例代码。 方法一:使用第三个变量 最常见和简单的方法
    的头像 发表于 11-22 10:58 6482次阅读

    python怎么把list里面的取出来

    Python语言的列表(List)是一种非常常用和灵活的数据类型,它可以存储多个元素,并允许对这些元素进行各种操作。在Python中,可以使用简单的语法来访问和取出列表中的。本文将详细介绍
    的头像 发表于 11-21 16:13 3018次阅读

    python处理重复的方法

    处理重复是数据处理中常见的任务之一。在Python中,有几种有效的方法可以处理重复,包括使用集合、字典和pandas库等。 使用集合 集合数据结构是Python中用于存储唯一元素的
    的头像 发表于 11-21 15:47 1198次阅读

    python牛顿迭代法

    牛顿迭代法是一种数值计算方法,用于求解方程的数值近似解。它是以英国科学家艾萨克·牛顿的名字命名的,最初由牛顿在17世纪末提出。牛顿迭代法基于一个简单的原理:一条曲线的切线近似代替这条曲
    的头像 发表于 11-21 15:06 898次阅读

    基于FPGA的线性插值-上

    ,并且做除法会消耗大量的资源。 本文提出一种基于查找法实现线性插值算法,不需要利用除法实现线性插值。 2,方法原理 由当D是A,B的中点时
    发表于 11-20 23:10