计算机数值分析:牛顿插值法
这里使用的是牛顿插值法的差商公式;
说明: 牛顿插值法可以说是埃特金插值法的升级版,所以在很大的程度上,牛顿插值法与埃特金插值法有类似的地方,但是也有不相同的地方。而这个不相同的地方正是我们编程的时候应该要注意的。
埃特金插值法代码实现:参考 埃特金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)
代码运行结果如下:
遇事不决,可问春风。