11-04:多項(xiàng)式表達(dá)

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:多項(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)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容