class Poly(object):
def __init__(self,An,x):
'''
@author:zengwei
parameter:多項(xiàng)式的系數(shù),默認(rèn)從低次項(xiàng)到高次項(xiàng);list類型
input:輸入用于計(jì)算多項(xiàng)式值的x
'''
self.parameter = An
#self.__parameter = An # 用于設(shè)置parameter為私有變量,配合set_parameter方法修改parameter
self.input = x
def set_parameter(self):
pass
def directPoly(self):
'''用循環(huán)的方法寫多項(xiàng)式'''
result = 0
for k in range(len(self.parameter)):
result = result + self.input**k*self.parameter[k]
return result
def diff_directPoly(self):
'''directPoly()函數(shù)對(duì)應(yīng)的多項(xiàng)式求導(dǎo)'''
result = 0
for k in range(1,len(self.parameter)):
result = result + self.input**(k-1)*self.parameter[k]
return result
def QinJiushao(self):
'''用遞推的方法寫秦九韶多項(xiàng)式寫法'''
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):
'''用遞推的方法寫秦九韶多項(xiàng)式寫法之二'''
from functools import reduce
result = reduce(lambda a,b: a*self.input + b, self.parameter[::-1])
return result
def numpyPoly(self):
'''用numpy內(nèi)置函數(shù)寫多項(xiàng)式'''
import numpy as np
P = np.poly1d(self.parameter[::-1]) # 從高次項(xiàng)到低次項(xiàng)
return P(self.input)
def BackwardPoly(self):
'''將parameter做為多項(xiàng)式的根,反推多項(xiàng)式;循環(huán)寫法'''
result = 1
for k in range(len(self.parameter)):
result = result*(self.input - self.parameter[k])
return result
def _BackwardPoly(self):
'''將parameter做為多項(xiàng)式的根,反推多項(xiàng)式;用np.prod()函數(shù)'''
import numpy as np
return np.prod(self.input - np.array(self.parameter))
def diff_BackwardPoly(self):
'''對(duì)應(yīng)_BackwardPoly()函數(shù),求其在x處的導(dǎo)數(shù)'''
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做為多項(xiàng)式的根,反推多項(xiàng)式;用numpy內(nèi)部函數(shù)'''
import numpy as np
P = np.poly1d(self.parameter,True)
return P(self.input)