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中各种方法的运作原理
Jun 15 Python
window下eclipse安装python插件教程
Apr 24 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 Python
python字典DICT类型合并详解
Aug 17 Python
Python中整数的缓存机制讲解
Feb 16 Python
浅析PyTorch中nn.Module的使用
Aug 18 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
jupyter notebook 多行输出实例
Apr 09 Python
python字典通过值反查键的实现(简洁写法)
Sep 30 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 Python
python openssl模块安装及用法
Dec 06 Python
python实现Thrift服务端的方法
Apr 20 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 fread()使用技巧
2010/01/22 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP钩子实现方法解析
2019/05/21 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
js三种排序算法分享
2012/08/16 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
webpack常用配置项配置文件介绍
2016/11/07 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
python实现Adapter模式实例代码
2018/02/09 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
综合办公室个人的自我评价
2013/12/22 职场文书
审计工作个人的自我评价
2013/12/25 职场文书
办公室主任先进事迹
2014/01/18 职场文书
销售人才自我评价范文
2014/09/27 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
爱国主题班会教案
2015/08/14 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js