有一组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点的导数(差分)为:
y(s)i=C−myi−m+C−m+1yi−m−1+...+Cm−1yi+m−1+Cmyi+my_i^{(s)}=C_{-m}y_{i-m}+C_{-m+1}y_{i-m-1}+...+C_{m-1}y_{i+m-1}+C_{m}y_{i+m}

即在一个宽度为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 = filenamedef func(self, x, p):f = np.poly1d(p)return f(x)def residuals(self, p, x, y, reg):regularization = 0.1  # 正则化系数lambdaret = y - self.func(x, p)if reg == 1:ret = np.append(ret, np.sqrt(regularization) * p)return retdef LeastSquare(self, data, k=100, order=4, reg=1, show=1):  # k为求导窗口宽度,order为多项式阶数,reg为是否正则化l = self.lenstep = 2 * k + 1p = [1] * orderfor 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求离散序列导数相关推荐

  1. python多项式求导_Python求离散序列导数的示例

    有一组4096长度的数据,需要找到一阶导数从正到负的点,和三阶导数从负到正的点,截取了一小段. 394.0 388.0 389.0 388.0 388.0 392.0 393.0 395.0 395. ...

  2. python离散求导数_Python求离散序列导数的示例

    有一组4096长度的数据,需要找到一阶导数从正到负的点,和三阶导数从负到正的点,截取了一小段. 394.0 388.0 389.0 388.0 388.0 392.0 393.0 395.0 395. ...

  3. pythonmath反三角函数的导数_Python求离散序列导数的示例

    有一组4096长度的数据,需要找到一阶导数从正到负的点,和三阶导数从负到正的点,截取了一小段. 394.0 388.0 389.0 388.0 388.0 392.0 393.0 395.0 395. ...

  4. Python求函数导数并绘制切线

    下面我们通过Python来求函数y = 0.01x**2 + 0.1*x的导数,并绘制函数图像以及函数在某一点的切线. 首先,我们给出导数的数学定义式: 其次,我们先来写一写函数导数的实现代码.一般来 ...

  5. 如何利用python求导数(微分)和积分

    求微分(导数)与求积分是一个互逆的过程,在python里只需要利用代数符号系统即可进行求解.假设函数是这样子的 y=e2xy=e^{2x}y=e2x 那么我们先对其进行求导 求导代码 直接用diff, ...

  6. python求极限中有算术平方根如何表达_Python求算数平方根和约数的方法汇总

    Python求算数平方根和约数的方法汇总 一.求算术平方根 a= x=int(raw_input('Enter a number:')) if x >= : while a*a < x: ...

  7. python判断素数的函数_如何用python求素数

    如何用python求100以内的素数? 质数(primenumber)又称素数,有无限个.质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2.3.5.7.11.13.1 ...

  8. python求微分方程组的数值解曲线01

    本人最近在写一篇关于神经网络同步的文章,其一部分模型为: x_i^{\Delta}(t)= -a_i*x_i(t)+ b_i* f(x_i(t))+ \sum\limits_{j \in\{i-1, ...

  9. python求众数程序_python求众数问题实例

    本文实例讲述了python求众数问题的方法,是一个比较典型的应用.分享给大家供大家参考.具体如下: 问题描述: 多重集中重数最大的元素称为众数...就是一个可以有重复元素的集合,在这个集合中重复的次数 ...

最新文章

  1. Xamarin XAML语言教程使用Xamarin Studio创建XAML(二)
  2. 第2题——DNA片段
  3. 《当程序员的那些狗日日子》(五)工作中,工作外
  4. LeetCode Paint House II
  5. Qt QWidget实现手势缩放和平移(二)
  6. 地理必修一三大类岩石_高一地理必修一知识点总结归纳
  7. oracle 11g(二)安装过程
  8. @cacheable 是否缓存成功_缓存策略:如何使用缓存来减少磁盘IO?
  9. linux配置端口ipv6地址,linux配置ipv6地址命令
  10. 从平台架构到大屏可视化,一文读懂金融服务行业的数据分析
  11. 信息学奥赛一本通 1100:金币 | 1969:【15NOIP普及组】金币 | OpenJudge NOI 1.5 45 | 洛谷 P2669 [NOIP2015 普及组] 金币
  12. VIM快捷键(转载)
  13. 【TSP】基于matlab蚁群算法求解31城市旅行商问题【含Matlab源码 1147期】
  14. 第十三次博文:教你从立创EDA库导入AD库,保姆级别!
  15. 智鹰科技——无人机线路巡检系统商业计划书
  16. JavaScript 小白手册
  17. 混合云的那些事,如何做到让公有云和私有云实现1+12
  18. Premiere Pro CS6自学所需的视频编辑基础(一)
  19. C++学习笔记 (三)
  20. Django+itchat+apscheduler实现向指定微信群和微信好友定时发送信息和文件

热门文章

  1. Java项目:SSH学生请假管理系统
  2. 浅学一点空间转换3D和动画知识
  3. 【Qt】2D基本绘图操作——QPainter执行绘制及绘图设备介绍
  4. 白杨SEO:如何快速收集百度、抖音、知乎、小红书等关键词搜索下拉词及挖掘更精准长尾关键词?
  5. 扩屏双显示器一个清晰,另一个模糊的解决办法
  6. C语言手写爱心-还原最新热剧撩妹代码
  7. A072_前台登录_三方登录
  8. 稀里糊涂的解决了 cuda 和cudnn的安装以及conda安装pytorch出现的torch.cuda.is_available()为false的问题
  9. 基于JAVA汽车租赁系统计算机毕业设计源码+数据库+lw文档+系统+部署
  10. css空心三角形_纯CSS制作空心三角形和实心三角形及其实现原理