11-04:多项式表达

2020-11-04  本文已影响0人  zengw20

P_n(x)=a_0+a_1x+...+a_{n-1}x^{n-1}+a_nx^n

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)

P_n(x)=[[(a_nx+a_{n-1})x+a_{n-2}]x+...+a_1]x+a_0
b_n=a_n;b_{n-1}=a_{n-1}+b_nx

上一篇 下一篇

猜你喜欢

热点阅读