1、牛顿插值法
转载于https://blog.csdn.net/deramer1/article/details/79037740
x = [0,1,2,3,5,6]#输入已知的x值
y = [0,1,4,9,25,36]#输入已知的y值
def five_order_difference_quotient(x, y):
# i记录计算差商的次数,这里循环5次,计算5次差商。
i = 0
quotient = [0, 0, 0, 0, 0, 0]
while i < 5:
j = 5
while j > i:
if i == 0:
quotient[j]=((y[j]-y[j-1])/(x[j]-x[j-1]))
else:
quotient[j] = (quotient[j]-quotient[j-1])/(x[j]-x[j-1-i])
j -= 1
i += 1
return quotient
def function(data):
return x[0]+parameters[1]*(data-x[0])+parameters[2]*(data-x[0])*(data-x[1])+\
parameters[3]*(data-x[0])*(data-x[1])*(data-x[2])\
+parameters[4]*(data-x[0])*(data-x[1])*(data-x[3])
def calculate_data(x,parameters):
returnData=[];
for data in x:
returnData.append(function(data))
return returnData
parameters=five_order_difference_quotient(x,y)
yuanzu=calculate_data([4],parameters)#输入对应的预测x值的list
返回yuanzu为预测值的list形式
2、拉格朗日插值
来自《python数据分析与挖掘实战》
from scipy.interpolate import lagrange
def ployinterp_column(s,n,k = 5):#s为series
y = s[list(range(n-k,n))+list(range(n+1,n+1+k))]
y = y[y.notnull()]
return lagrange(y.index,list(y))(n)
for i in data.columns:
for j in range(len(data)):
if (data[i].isnull())[j]:
data[i][j] = ployinterp_column(data[i],j)