有一組4096長度的數(shù)據(jù),需要找到一階導數(shù)從正到負的點,和三階導數(shù)從負到正的點,截取了一小段。
394.0
388.0
389.0
388.0
388.0
392.0
393.0
395.0
395.0
394.0
394.0
390.0
392.0
按照之前所了解的,對離散值求導其實就是求差分,例如第i點的導數(shù)(差分)為:
即在一個寬度為2m+1的窗口內(nèi)通過計算前后m個值加權(quán)后的和得到。但是在實際使用過程中效果不是很好。于是想到了同樣在一個寬度為2k+1的窗口內(nèi),將這2k+1個點擬合成一個函數(shù),然后求導就可以得到任意階數(shù)的導數(shù)值。
首先是函數(shù)擬合,使用from scipy.optimize import leastsq即最小二乘擬合
from scipy.optimize import leastsq class search(object): def __init__(self, filename): self.filename = filename def func(self, x, p): f = np.poly1d(p) return f(x) def residuals(self, p, x, y, reg): regularization = 0.1 # 正則化系數(shù)lambda ret = y - self.func(x, p) if reg == 1: ret = np.append(ret, np.sqrt(regularization) * p) return ret def LeastSquare(self, data, k=100, order=4, reg=1, show=1): # k為求導窗口寬度,order為多項式階數(shù),reg為是否正則化 l = self.len step = 2 * k + 1 p = [1] * order for i in range(0, l, step): if i + step < l: y = data[i:i + step] x = np.arange(i, i + step) else: y = data[i:] x = np.arange(i, l) try: r = leastsq(self.residuals, p, args=(x, y, reg)) except: print("Error - curve_fit failed") fun = np.poly1d(r[0]) # 返回擬合方程系數(shù) df_1 = np.poly1d.deriv(fun) # 求得導函數(shù) df_2 = np.poly1d.deriv(df_1) df_3 = np.poly1d.deriv(df_2) df_value = df_1(x) df3_value = df_3(x)
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
新聞標題:Python求離散序列導數(shù)的示例-創(chuàng)新互聯(lián)
鏈接地址:http://aaarwkj.com/article2/jcgic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、電子商務、軟件開發(fā)、品牌網(wǎng)站制作、微信公眾號、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)