一般在數(shù)據(jù)處理的過(guò)程中,會(huì)遇到缺失值的情況捎迫,對(duì)于缺失值的處理一般會(huì)刪除或者插值補(bǔ)充晃酒。其中拉格朗日插值就是一種最簡(jiǎn)單的插值方法。本文主要涉及兩個(gè)內(nèi)容
1窄绒、拉格朗日插值的數(shù)學(xué)理論
2贝次、Python實(shí)現(xiàn)拉格朗日插值
1、拉格朗日插值
對(duì)于所取得的n個(gè)樣本數(shù)據(jù)(xi, yi)(其中n=1,2彰导,...,n)
蛔翅,滿(mǎn)足的n次多項(xiàng)式敲茄,然后計(jì)算多項(xiàng)式在興趣點(diǎn)的值,把這種方法叫做拉格朗日插值山析,其實(shí)就是解方程組堰燎。對(duì)于有n個(gè)數(shù)據(jù)樣本,需要n-1次多項(xiàng)式函數(shù)笋轨,將n個(gè)數(shù)據(jù)帶入函數(shù)中秆剪,得到n元一次的方程組,解出方程組就能得到函數(shù)爵政。于是就能計(jì)算你感興趣的x對(duì)應(yīng)的y值了鸟款。
n-1次多項(xiàng)式函數(shù)為
![](http://www.forkosh.com/mathtex.cgi? \large y=\sum_{i=0}{n-1}a_ixi)
將n個(gè)樣本數(shù)據(jù)帶入以上方程中得到:
![](http://www.forkosh.com/mathtex.cgi? \large \mathbf{Y}=\mathbf{XA})
其中:
方程的解的問(wèn)題就轉(zhuǎn)化為矩陣X是否可逆,如果可逆那么方程就有解茂卦。而解的個(gè)數(shù)取決于X的秩,如果X的秩為n有唯一解组哩,X的秩小于n等龙,方程就有無(wú)數(shù)個(gè)解。
2伶贰、Python實(shí)現(xiàn)拉格朗日插值
只需要導(dǎo)入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):
# 調(diào)用拉格朗日插值蛛砰,得到插值函數(shù)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
# 構(gòu)造樣本數(shù)據(jù)
x = np.linspace(0, 20, NUMBER)
y = np.linspace(2, 14, NUMBER) + eps
# 興趣點(diǎn)數(shù)據(jù)
xx = np.linspace(12, 15, 10)
interp_lagrange(x, y, xx)
注意
1、很多人可能覺(jué)得樣本數(shù)據(jù)越多黍衙,得到的插值數(shù)據(jù)會(huì)越精確泥畅,這樣想法是不正確的。理論上說(shuō)琅翻,樣本數(shù)據(jù)過(guò)多位仁,得到的插值函數(shù)的次數(shù)就越高,插值的結(jié)果的誤差可能會(huì)更大方椎。拉格朗日插值的穩(wěn)定性不太好聂抢,出現(xiàn)不穩(wěn)定的現(xiàn)象稱(chēng)為龍格現(xiàn)象,解決的辦法就是分段用較低次數(shù)的插值多項(xiàng)式棠众。
2琳疏、插值一般采用內(nèi)插法,也就是只計(jì)算樣本點(diǎn)內(nèi)部的數(shù)據(jù)闸拿。