有一组4096长度的数据,需要找到一阶导数从正到负的点,和三阶导数从负到正的点,截取了一小段。
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点的导数(差分)为:
即在一个宽度为2m+1的窗口内通过计算前后m个值加权后的和得到。但是在实际使用过程中效果不是很好。于是想到了同样在一个宽度为2k+1的窗口内,将这2k+1个点拟合成一个函数,然后求导就可以得到任意阶数的导数值。
首先是函数拟合,使用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 # 正则化系数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为多项式阶数,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]) # 返回拟合方程系数 df_1 = np.poly1d.deriv(fun) # 求得导函数 df_2 = np.poly1d.deriv(df_1) df_3 = np.poly1d.deriv(df_2) df_value = df_1(x) df3_value = df_3(x)
fun = np.poly1d(r[0]),fun返回的是一个 polynomial class,具体使用可以见官方文档numpy.poly1d
polynomial对象可以使用deriv方法求导数,求得的依然是 polynomial对象。 df_value = df_1(x)所得到的就是x这个几个点求得的导数值。
看似大功告成,但是求导的结果并不是很好,如下图,实际最高点在100左右,但是拟合出来的曲线最高点在120左右,而原因在于使用多项式拟合很难准确拟合曲线。
于是想用高斯函数来实现对曲线的拟合,在matlab中试了下,三阶高斯拟合可以很好的拟合曲线,
但是numpy以及sicpy中没有找到类似poly1d这种对象,虽然可以自己定义高斯函数,如下
def gaussian(self, x, *param): fun = param[0]*np.exp(-np.power(x - param[2], 2.) / (2 * np.power(param[4], 2.)))+param[1]*np.exp(-np.power(x - param[3], 2.) / (2 * np.power(param[5], 2.))) return fun
但是,在通过最小二乘拟合得到函数参数后只能得到拟合后的点,无法直接求导数..所以并不适合。
所以还是只能回到多项式拟合,如果4阶多项式不能表征的话,更高阶的呢
总体来说,效果还是可以接受的。
如果下阶段找到好的高斯函数拟合方法,会继续更新。
以上这篇Python求离散序列导数的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
Python,离散序列,导数
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]