Python求离散序列导数的示例


Posted in Python onJuly 10, 2019

有一组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点的导数(差分)为:

Python求离散序列导数的示例

即在一个宽度为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左右,而原因在于使用多项式拟合很难准确拟合曲线。

Python求离散序列导数的示例

于是想用高斯函数来实现对曲线的拟合,在matlab中试了下,三阶高斯拟合可以很好的拟合曲线,

Python求离散序列导数的示例

但是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求离散序列导数的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python性能优化技巧
Mar 09 Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
Python+Selenium自动化实现分页(pagination)处理
Mar 31 Python
python 读取DICOM头文件的实例
May 07 Python
Python 串口读写的实现方法
Jun 12 Python
Python中的pathlib.Path为什么不继承str详解
Jun 23 Python
python每天定时运行某程序代码
Aug 16 Python
python快速排序的实现及运行时间比较
Nov 22 Python
python圣诞树编写实例详解
Feb 13 Python
PyCharm 无法 import pandas 程序卡住的解决方式
Mar 09 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 #Python
我们为什么要减少Python中循环的使用
Jul 10 #Python
详解Python中的各种转义符\n\r\t
Jul 10 #Python
使用python画社交网络图实例代码
Jul 10 #Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 #Python
python 寻找离散序列极值点的方法
Jul 10 #Python
Python中面向对象你应该知道的一下知识
Jul 10 #Python
You might like
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
js选项卡的制作方法
2017/01/23 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
jquery实现数字输入框
2017/02/22 Javascript
干货!教大家如何选择Vue和React
2017/03/13 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
Python单例模式实例分析
2015/01/14 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
医药专业推荐信
2013/11/15 职场文书
初一生物教学反思
2014/01/18 职场文书
校园之星获奖感言
2014/01/29 职场文书
酒店大堂副理的职责范文
2014/02/13 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
给老婆的检讨书(搞笑版)
2015/05/06 职场文书
鲁冰花观后感
2015/06/10 职场文书
辩论会主持词
2015/07/03 职场文书
小学英语教学随笔
2015/08/14 职场文书
三好学生竞选稿
2015/11/21 职场文书
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis
源码分析Redis中 set 和 sorted set 的使用方法
2022/03/22 Redis
python基础之//、/与%的区别详解
2022/06/10 Python