计算机数值分析:牛顿插值(python实现

计算机数值分析:牛顿插值法
这里使用的是牛顿插值法的差商公式;

说明: 牛顿插值法可以说是埃特金插值法的升级版,所以在很大的程度上,牛顿插值法与埃特金插值法有类似的地方,但是也有不相同的地方。而这个不相同的地方正是我们编程的时候应该要注意的。
埃特金插值法代码实现:参考 埃特金Python实现
首先来说明一下牛顿差商公式的定义:
这里公式的说明参考:牛顿差商公式说明

牛顿差商公式
一阶差商 在这里插入图片描述
n阶差商 在这里插入图片描述

所以牛顿插值多项式为:在这里插入图片描述

代码如下:

#牛顿插值公式:
def Data_in(xlist,ylist):
    list1=input("请输入已知的准确的对应的x,y值:").split(" ");
    for i in range(0,len(list1)):
        if i%2==0:
            xlist.append(float(list1[i]));
        else:
            ylist.append(float(list1[i]));
    return xlist,ylist;

def Newton_insert(xlist,ylist,x_in):
    n=len(xlist);#n==6
    temp_y=ylist.copy();
    for i in range(0,n):    #0~n-1 分别代表0阶差商 ~n-1差商
        if i==0:    #0阶差商已经不用弄了  就是y值本身
            continue;
        else:
            for j in range(i,n):   #i阶差商需要计算 n-i个数
                temp_y[j]=(ylist[j]-ylist[j-1])/(xlist[j]-xlist[j-i]);
        ylist=temp_y.copy() 
    #计算预测的y
    y_out=ylist[0];
    #再根据牛顿差商公式再更新一下y_list的值
    #y_list[0]就不用更新了
    for k1 in range(1,n):
        for k2 in range(0,k1):
            ylist[k1]=ylist[k1]*(x_in-xlist[k2]);
        y_out+=ylist[k1];
    
    return y_out;


DataX=[]; 
DataY=[];
DataX,DataY=Data_in(DataX,DataY);
#print(DataX)
#print(DataY)
X=float(input("请输入要预测的x的值"));
Y=Newton_insert(DataX, DataY, X);
print(Y)

代码运行结果如下:
在这里插入图片描述

遇事不决,可问春风。

你可能感兴趣的:(计算机数值分析,计算机数值分析,python)