埃特金插值法
这里要说明,我没有按照书中所给流程图来写。不过为了完整,还是将流程图贴上来
实际上,我是按照下面这个表,相当于是递推获得
代码如下
#0.3 0.29850 0.4 0.39646 0.5 0.49311 0.6 0.58813 0.7 0.68122
#预测 0.462
def Data_in(list1,list2):
list0=input("请输入离散点的值").split(" ");
for i in range(0,len(list0)):
if i%2==0:
list1.append(float(list0[i]));
else:
list2.append(float(list0[i]));
return list1,list2;
def Aitken_insert(list1,list2,x_in,n):
#根据简单的推算 n个值 需要进行插值n-1次
begin_index=0;
account=0;#我从1开始算起 正好代指的就是第account次插值嘛
while account<=n-1:
account+=1; #开始
end_index=begin_index+1; #这个是用来统计第account次插值结束与否
while end_index<n: #也就是还没有运算到最后的数
t1=(x_in-list1[end_index])/(list1[begin_index]-list1[end_index]);
t2=(x_in-list1[begin_index])/(list1[end_index]-list1[begin_index]);
#每次都是更新到end_index之中 这样能够很好的节省空间
list2[end_index]=t1*list2[begin_index]+t2*list2[end_index];
end_index+=1;
#对于新一轮的插值 begin_index在变 所以要+1
begin_index+=1;
return list2[end_index-1];#因为到了最后 end_index会加1 就超过范围了
Data_x=[];
Data_y=[]; #我打算直接在这个式子的基础上修改 而不用重新创建一个数列表
Data_x,Data_y=Data_in(Data_x, Data_y);
length=len(Data_x);
x_pre=float(input("请输入想要预测的x:"));
y_pre=Aitken_insert(Data_x,Data_y,x_pre,length);
print(y_pre);
运行结果:
遇事不决,可问春风