牛顿插值法和拉格朗日插值法

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)

猜你喜欢

转载自blog.csdn.net/weixin_40300458/article/details/81284169
今日推荐