python拉格朗日插值法_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.interpolate的lagrange方法

# -*- 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、插值一般采用内插法,也就是只计算样本点内部的数据。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值