欢迎来到天天文库
浏览记录
ID:42696915
大小:37.00 KB
页数:5页
时间:2019-09-20
《用Python实现内推外插法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、用Python实现内推外插法"""Author:ZDate:2015-12-3"""importnumpyasnpclassnode(object):def__init__(self):self.power=[]self.a=[]defset(self,ar,p):foriinxrange(len(ar)):self.a.append(ar[i])self.power.append(p[i])defprintf(self):print'a[]is:',foriinxrange(np.array(self.a).shape[0]):printself
2、.a[i],print''print'power[]is:',foriinxrange(np.array(self.power).shape[0]):printself.power[i],print''#############################basefunctionarea#####################defparse(self,string):"""parsestr"string"intolist"a"and"power""a"meansthefactorofx"power"meanstheindexofx"""se
3、lf.power=[]self.a=[]string=string.replace('','')eq=string.find('=')new_string=string[(eq+1):]index=new_string.find('x')while(index!=-1):ifnew_string[index-1]=='*'andnew_string[index-2].isdigit():i=index-2num=""whilei>=0andnew_string[i].isdigit():num=new_string[i]+numi=i-1ifi>=
4、0andnew_string[i]=='-':num='-'+numself.a.append(float(num))else:self.a.append(1.)ifnew_string[index+1]=='^':num=0.i=index+2whilei5、('x',index+1)ifnew_string[-1]!='x':ll=len(new_string)-1num=""whilell>=0andnew_string[ll].isdigit():num=new_string[ll]+numll=ll-1ifll>=0andnew_string[ll]=='-':num='-'+numself.a.append(float(num))self.power.append(0.)defget_fun_value(self,num):ret=0.foriinxrange(np.array(self.a)6、.shape[0]):ret+=self.a[i]*pow(num,self.power[i])returnret#######################toolfunctionarea##############defMin_push_forward(self,start,step):ifself.get_fun_value(start)7、:x3=x2+stepy3=self.get_fun_value(x3)ify2>y3:x1=x2x2=x3else:breakreturnx1,x3defMin_insert_forword(self,lef,rig,max_epochs,min_error):epoch=0whileTrue:mid1=(3.*lef-rig)/2.mid2=(lef+rig)/2.y1=self.get_fun_value(mid1)y2=self.get_fun_value(lef)y3=self.get_fun_value(mid2)y4=self.get8、_fun_value(rig)ify1<=y2andy1<=y3andy1<=y4:lef=mid1rig=lefelif
5、('x',index+1)ifnew_string[-1]!='x':ll=len(new_string)-1num=""whilell>=0andnew_string[ll].isdigit():num=new_string[ll]+numll=ll-1ifll>=0andnew_string[ll]=='-':num='-'+numself.a.append(float(num))self.power.append(0.)defget_fun_value(self,num):ret=0.foriinxrange(np.array(self.a)
6、.shape[0]):ret+=self.a[i]*pow(num,self.power[i])returnret#######################toolfunctionarea##############defMin_push_forward(self,start,step):ifself.get_fun_value(start)7、:x3=x2+stepy3=self.get_fun_value(x3)ify2>y3:x1=x2x2=x3else:breakreturnx1,x3defMin_insert_forword(self,lef,rig,max_epochs,min_error):epoch=0whileTrue:mid1=(3.*lef-rig)/2.mid2=(lef+rig)/2.y1=self.get_fun_value(mid1)y2=self.get_fun_value(lef)y3=self.get_fun_value(mid2)y4=self.get8、_fun_value(rig)ify1<=y2andy1<=y3andy1<=y4:lef=mid1rig=lefelif
7、:x3=x2+stepy3=self.get_fun_value(x3)ify2>y3:x1=x2x2=x3else:breakreturnx1,x3defMin_insert_forword(self,lef,rig,max_epochs,min_error):epoch=0whileTrue:mid1=(3.*lef-rig)/2.mid2=(lef+rig)/2.y1=self.get_fun_value(mid1)y2=self.get_fun_value(lef)y3=self.get_fun_value(mid2)y4=self.get
8、_fun_value(rig)ify1<=y2andy1<=y3andy1<=y4:lef=mid1rig=lefelif
此文档下载收益归作者所有