class Poly(object):
def __init__(self,An,x):
'''
@author:zengwei
parameter:多项式的系数,默认从低次项到高次项;list类型
input:输入用于计算多项式值的x
'''
self.parameter = An
#self.__parameter = An # 用于设置parameter为私有变量,配合set_parameter方法修改parameter
self.input = x
def set_parameter(self):
pass
def directPoly(self):
'''用循环的方法写多项式'''
result = 0
for k in range(len(self.parameter)):
result = result + self.input**k*self.parameter[k]
return result
def diff_directPoly(self):
'''directPoly()函数对应的多项式求导'''
result = 0
for k in range(1,len(self.parameter)):
result = result + self.input**(k-1)*self.parameter[k]
return result
def QinJiushao(self):
'''用递推的方法写秦九韶多项式写法'''
N = len(self.parameter) - 1
Input = self.input
def Iterate(Input,k):
if k == N:
return self.parameter[k]
return self.parameter[k]+ Iterate(Input,k+1)*Input
return Iterate(self.input,0)
def _QinJiushao(self):
'''用递推的方法写秦九韶多项式写法之二'''
from functools import reduce
result = reduce(lambda a,b: a*self.input + b, self.parameter[::-1])
return result
def numpyPoly(self):
'''用numpy内置函数写多项式'''
import numpy as np
P = np.poly1d(self.parameter[::-1]) # 从高次项到低次项
return P(self.input)
def BackwardPoly(self):
'''将parameter做为多项式的根,反推多项式;循环写法'''
result = 1
for k in range(len(self.parameter)):
result = result*(self.input - self.parameter[k])
return result
def _BackwardPoly(self):
'''将parameter做为多项式的根,反推多项式;用np.prod()函数'''
import numpy as np
return np.prod(self.input - np.array(self.parameter))
def diff_BackwardPoly(self):
'''对应_BackwardPoly()函数,求其在x处的导数'''
import numpy as np
temp = self.input - np.array(self.parameter)
P_ = np.prod(temp)
result = 0
for k in range(len(self.parameter)):
result = result + P_/temp[k]
return result
def numpyBackwardPoly():
'''将parameter做为多项式的根,反推多项式;用numpy内部函数'''
import numpy as np
P = np.poly1d(self.parameter,True)
return P(self.input)