拉格朗日插值法

技术背景

2024年诺贝尔物理学奖和化学奖的揭幕,正式宣告了科学界对AI时代的认可,人工智能正在全方位的改变人类社会各种场景的互作模式,而数据拟合以及误差与算力的控制,则是大多数人工智能工作者所关注的重点。与数据拟合的思想不同的是,传统的数值计算中人们更倾向于使用多项式进行精确的参数计算,这种方法叫做插值。当然,插值算法的精确是相对于边界条件而言的,随着点数的变化,不同的插值算法有不同的余项。现在在模型训练中,因为数据点本身就是有误差的,所以强行使用插值算法会导致过拟合的现象。只有在一些传统的对精度要求较高的计算场景中,保留了插值算法的应用。

线性插值

给定两个点:(x1,y1),(x2,y2),其插值出来的线性函数为:

f(x)=y2y1x2x1x+y1y2y1x2x1x1=y2y1x2x1x+y2y2y1x2x1x2

稍微改写一下形式有:

f(x)=(x2xx2x1)y1+(xx1x2x1)y2

可以得到f(x1)=y1,f(x2)=y2

二次插值

给定三个点:(x1,y1),(x2,y2),(x3,y3),假设其插值函数为:f(x)=ax2+bx+c,那么可以根据三个点联立方程组,写成矩阵形式就是:

(x12x11x22x21x32x31)(abc)=(y1y2y3)

所以求解系数a,b,c变成了一个矩阵求逆问题,可以手动做一个初等变换:

(x12x11100x22x21010x32x31001)(11x11x121x120011x21x2201x22011x31x32001x32)(11x11x121x12000x1x2x1x2x12x22x12x221x121x2200x1x3x1x3x12x32x12x321x1201x32)(11x11x121x12000x1x2x1x2x12x22x12x221x121x2200x1x2x1x2(x1+x3)(x1x2)x12x2x3x3(x1x2)x12x2(x1x3)0x1x2x2x3(x1x3))(11x11x121x12000x1x2x1x2x12x22x12x221x121x22000(x1x2)(x2x3)x1x22x3x2x3x1x2(x1x3)1x22x1x2x2x3(x1x3))(11x11x121x120001x1+x2x1x2x2x1(x1x2)x1x2(x1x2)0001x2x3(x1x2)(x1x3)x1x3(x1x2)(x2x3)x1x2(x1x3)(x2x3))(11x11x121x1200010x2+x3(x1x2)(x1x3)x1+x3(x1x2)(x2x3)x1+x2(x1x3)(x2x3)001x2x3(x1x2)(x1x3)x1x3(x1x2)(x2x3)x1x2(x1x3)(x2x3))(1001(x1x2)(x1x3)1(x1x2)(x2x3)1(x1x3)(x2x3)010x2+x3(x1x2)(x1x3)x1+x3(x1x2)(x2x3)x1+x2(x1x3)(x2x3)001x2x3(x1x2)(x1x3)x1x3(x1x2)(x2x3)x1x2(x1x3)(x2x3))

也就是说,最终的逆矩阵为:

(1(x1x2)(x1x3)1(x1x2)(x2x3)1(x1x3)(x2x3)x2+x3(x1x2)(x1x3)x1+x3(x1x2)(x2x3)x1+x2(x1x3)(x2x3)x2x3(x1x2)(x1x3)x1x3(x1x2)(x2x3)x1x2(x1x3)(x2x3))

可以验证:

(x12x11x22x21x32x31)(1(x1x2)(x1x3)1(x1x2)(x2x3)1(x1x3)(x2x3)x2+x3(x1x2)(x1x3)x1+x3(x1x2)(x2x3)x1+x2(x1x3)(x2x3)x2x3(x1x2)(x1x3)x1x3(x1x2)(x2x3)x1x2(x1x3)(x2x3))=(100010001)

有了逆矩阵,就可以计算参数数值a,b,c,那么这里我们直接写出函数形式:

f(x)=(xx2)(xx3)(x1x2)(x1x3)y1+(xx1)(xx3)(x2x1)(x2x3)y2+(xx1)(xx2)(x3x1)(x3x2)y3

拉格朗日插值法

观察前面线性插值和二次插值的函数规律,可以给出一个推广形式:

f(x)=i=1Nci(x,x1,x2,...,xN)yN

其中系数函数ci(x,x1,x2,...,xN)=j=1i1xxjxixjk=i+1Nxxkxixk。可以给出N个数据点的N1次插值函数解析式,这就是拉格朗日插值法,满足f(xi)=yi的约束条件。

牛顿插值法

如果把线性插值中的函数表达式再修改一下形式,变成:

f(x)=y1+y2y1x2x1(xx1)

类似的,二阶插值函数可以改成如下形式:

f(x)=y1+y2y1x2x1(xx1)+y3y2x3x2y2y1x2x1x3x1(xx1)(xx2)

如果定义一个一阶差商为:

g(xi,xi+1)=yi+1yixi+1xi

其含义为(xi,xi+1)区间内的平均变化率。有了一阶差商的定义,就可以递归的定义二阶差商:

g(xi,xi+1,xi+2)=g(xi+1,xi+2)g(xi,xi+1)xi+2xi

以及m阶的差商:

g(xi,xi+1,xi+2,...,xi+m)=g(xi+1,xi+2,...,xi+m)g(xi,xi+1,...,xi+m1)xi+mxi

则可以写出牛顿插值的函数形式为:

f(x)=y1+i=1N1g(x1,...,xi+1)j=1i(xxj)

插值形式对比

拉格朗日插值算法和牛顿插值算法,插值的阶数是一致的,同样的点数插值出来的多项式也是唯一的,换句话说两个方法插值出来的函数其实是等价的。那么两个插值算法的优劣势在哪里?我们考虑这么一种情况,原本有N个数据点需要插值,此时如果再引入一个新的数据点,总点数变成了N+1。此时如果使用的是拉格朗日插值法,那么就需要我们把所有的系数全都再算一遍。而如果使用的是牛顿插值法,那么我们发现前面的N个系数是不需要发生变化的,我们只需要再计算一个新的系数即可,极大程度上的减少了点数更新所带来的参数计算量。但也并不是说拉格朗日插值没有用武之地,在现如今的张量计算时代,拉格朗日插值法的每一项系数都是同Shape的张量操作,反而是牛顿插值的递归形式在张量计算中会有一些麻烦。

总结概要

本文通过线性插值和二次插值的形式,介绍了拉格朗日插值算法以及牛顿插值算法的基本形式。两种插值算法的最终函数形式是一致的,但是在不同场景下的参数求解计算量是不一致的,需要根据自己的应用场景选择更加合适的插值算法。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/lg-interp.html

作者ID:DechinPhy

更多原著文章:https://www.cnblogs.com/dechinphy/

请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

本文作者:Dechin的博客

本文链接:https://www.cnblogs.com/dechinphy/p/18464001/lg-interp

版权声明:本作品采用CC BY-NC-SA 4.0许可协议进行许可。

posted @   DECHIN  阅读(488)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起

喜欢请打赏

扫描二维码打赏

了解更多