三次hermite插值多项式例题_不同插值方法的比较及Python实现

本文探讨了插值方法,包括多项式插值、拉格朗日插值、牛顿插值、分段插值如线性、三次Hermite和三次样条插值。通过代码实现和理论分析,解释了不同插值方法的适用场景和优缺点,如龙格现象和三次样条的平滑性。
摘要由CSDN通过智能技术生成

最近在做债券收益率曲线绘制的相关项目,会涉及到一些插值方法的实现。为了弄清楚不同插值方法之间的差异,自己查询了一些相关的资料,但发现网上的资料不够系统,零零散散,便想着做一个读书笔记之类的东西以做留存。其中的疏漏在所难免,欢迎各位指正。

本文主要通过代码实现来加深大家对不同插值方法之间差异的理解,具体的推导过程网上很容易搜索到相关资料,这里就不再赘述。

常见的插值方法:

  • 多项式插值
    • Lagrange 插值
      • 线性插值
      • 抛物线插值
      • ...
    • Newton 插值
  • 分段插值
    • Constant
    • Linear
    • Hermite
    • Cubic Spline
      • Natural Spline
      • Clamped Spline
      • Periodic Spline
      • ....

一、多项式插值(Polynomial Interpolation)

多项式插值,顾名思义,即以一个多项式的形式来刻画经过一系列点的曲线。为了更加严谨一些,这里参考Wiki的定义。

给定一组

个数据点
,其中任意两个
都不相同,需要找到一个满足
的不大于
阶的
阶多项式。

>> 拉格朗日插值(Lagrange Interpolation)

次多项式,且在插值节点
上满足:当
时,
;当
时,
。称
为节点
上的
次Lagrange基函数。由插值基函数可得插值多项式为:

当n=1和2时,即为线性插值多项式和抛物线插值多项式。

def lagrange(x_val, y_val, x):
    assert len(x_val) > 1 and (len(x_val) == len(y_val))
    
    def basis(i):
        l_i = [(x - x_val[j]) / (x_val[i] - x_val[j]) for j in range(len(x_val)) if j != i]
        return reduce(operator.mul, l_i) * y_val[i]
    
    return sum(basis(i) for i in range(len(x_val)))

拉格朗日插值虽然简单易用,但是有个很大的局限,即每增加一个新的插值点时,整个基函数就需要重新构建,这大大增加了运算量。为此,我们需要寻找一种新的基函数,其能够在节点增加时,只需要在原有的基函数上增加一些新的基函数即可,而无需对原始的基函数进行重构。

>> 牛顿插值(Newton Interpolation)

设插值节点为

,考虑函数组

其中

次多项式,且相互之间线性无关,为此可以使用其构造基函数。该基函数的一个优点是当增加一个新的插值节点
时,只需在原有基函数的基础上增加一个新的函数
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值