本篇介绍一下多项式插值中,拉格朗日法的原理及其实现。
1. 一点数学知识
先引用数学背景。如果给定N个点,然后要求一个多项式通过这N个点,最简单直接的方式是列出线性方程求解,N个点可以确定N个未知量,则所求的拟合多项式,其最高次幂就是(N-1)。
在很多教材上,关于该插值多项式的算法如下:

这个公式具有很强烈的轮换性,和线性方程组的克莱姆法则很相似(其实本质上就是一样的),所以实现起来也是非常简单。
2. 算法实现
def lagrangeIntp(x:ndarray,y:ndarray):
'''
返回基于x,y点对的拉格朗日插值多项式
x,y必须有相同的长度
'''
n=len(x)
ret=P([0])
for k in range(n):
roots=list(x)
s=roots[k]
del roots[k]
p=P.fromroots(roots)
p=p*y[k]/p(s)
ret+=p
return ret
当然,上述函数并未对输入进行检测,例如x,y的尺寸应该是一致的等。
然后测试一下该拟合函数,仍旧以之前的函数为例:

——lagrange插值&spm=1001.2101.3001.5002&articleId=140749810&d=1&t=3&u=aa91e79e41ca482698e89bd130af4f5a)
1189

被折叠的 条评论
为什么被折叠?



