用Python实现内推外插法
(5页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
7.9 积分
用Python实现内推外插法"""Author: ZDate: 2015-12-3 """import numpy as np class node(object): def __init__(self): self.power = [] self.a = [] def set(self,ar,p): for i in xrange(len(ar)): self.a.append(ar[i]) self.power.append(p[i]) def printf(self): print 'a[] is: ', for i in xrange(np.array(self.a).shape[0]): print self.a[i], print ' ' print 'power[] is: ', for i in xrange(np.array(self.power).shape[0]): print self.power[i], print ' '############################# base function area ##################### def parse(self,string): """ parse str "string" into list "a" and "power" "a" means the factor of x "power" means the index of x """ self.power = [] self.a = [] string = string.replace(' ','') eq = string.find('=') new_string = string[(eq+1):] index = new_string.find('x') while(index != -1): if new_string[index-1]=='*' and new_string[index-2].isdigit(): i = index-2 num = "" while i>=0 and new_string[i].isdigit(): num = new_string[i] + num i = i - 1 if i>=0 and new_string[i] == '-': num = '-' + num self.a.append(float(num)) else: self.a.append(1.) if new_string[index+1] == '^': num = 0. i = index + 2 while i=0 and new_string[ll].isdigit(): num = new_string[ll] + num ll = ll - 1 if ll >= 0 and new_string[ll] == '-': num = '-' + num self.a.append(float(num)) self.power.append(0.) def get_fun_value(self,num): ret = 0. for i in xrange(np.array(self.a).shape[0]): ret += self.a[i] * pow(num,self.power[i]) return ret ####################### tool function area ############## def Min_push_forward(self,start,step): if self.get_fun_value(start) < self.get_fun_value(start + step): step_len = -1*step x1 = start x2 = start + step y2 = self.get_fun_value(x2) while True: x3 = x2 + step y3 = self.get_fun_value(x3) if y2 > y3: x1 = x2 x2 = x3 else: break return x1,x3 def Min_insert_forword(self,lef,rig,max_epochs,min_error): epoch = 0 while True: 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_fun_value(rig) if y1 <=y2 and y1 <=y3 and y1<=y4: lef = mid1 rig = lef elif y2<=y1 and y2<=y3 and y2<=y4: lef = mid1 rig = mid2 elif y3<=y4 and y3<=y1 and y3<=y2: lef = lef rig = rig else: lef = mid2 rig = rig epoch += 1 if epoch >= max_epochs or (rig-lef)<=min_error: break x 关 键 词: Python 实现 内推外插法
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。