Python 实现拉格朗日插值

一般在数据处理的过程中,会遇到缺失值的情况,对于缺失值的处理一般会删除或者插值补充。其中拉格朗日插值就是一种最简单的插值方法。本文主要涉及两个内容
1、拉格朗日插值的数学理论
2、Python实现拉格朗日插值

1、拉格朗日插值
对于所取得的n个样本数据(xi, yi)(其中n=1,2,...,n),满足的n次多项式,然后计算多项式在兴趣点的值,把这种方法叫做拉格朗日插值,其实就是解方程组。对于有n个数据样本,需要n-1次多项式函数,将n个数据带入函数中,得到n元一次的方程组,解出方程组就能得到函数。于是就能计算你感兴趣的x对应的y值了。
n-1次多项式函数为

![](http://www.forkosh.com/mathtex.cgi? \large y=\sum_{i=0}{n-1}a_ixi)
将n个样本数据带入以上方程中得到:
![](http://www.forkosh.com/mathtex.cgi? \large \mathbf{Y}=\mathbf{XA})
其中:

方程的解的问题就转化为矩阵X是否可逆,如果可逆那么方程就有解。而解的个数取决于X的秩,如果X的秩为n有唯一解,X的秩小于n,方程就有无数个解。

2、Python实现拉格朗日插值
只需要导入scipy.interpolatelagrange方法

# -*- coding:utf-8 -*-
from scipy.interpolate import lagrange
import numpy as np
import matplotlib.pyplot as plt


def interp_lagrange(x, y, xx):
    # 调用拉格朗日插值,得到插值函数p
    p = lagrange(x, y)
    yy = p(xx)
    plt.plot(x, y, "b*")
    plt.plot(xx, yy, "ro")
    plt.show()


if __name__ == '__main__':
    NUMBER = 20
    eps = np.random.rand(NUMBER) * 2

    # 构造样本数据
    x = np.linspace(0, 20, NUMBER)
    y = np.linspace(2, 14, NUMBER) + eps

    # 兴趣点数据
    xx = np.linspace(12, 15, 10)
    interp_lagrange(x, y, xx)
根据20个样本点插值结果

注意
1、很多人可能觉得样本数据越多,得到的插值数据会越精确,这样想法是不正确的。理论上说,样本数据过多,得到的插值函数的次数就越高,插值的结果的误差可能会更大。拉格朗日插值的稳定性不太好,出现不稳定的现象称为龙格现象,解决的办法就是分段用较低次数的插值多项式
2、插值一般采用内插法,也就是只计算样本点内部的数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容