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中的元类(metaclass)
Feb 14 Python
深入Python解释器理解Python中的字节码
Apr 01 Python
Python检测网站链接是否已存在
Apr 07 Python
使用python装饰器计算函数运行时间的实例
Apr 21 Python
Python实现随机生成手机号及正则验证手机号的方法
Apr 25 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
对python中的装包与解包实例详解
Aug 24 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
python开发前景如何
Jun 11 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
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
js实现新浪微博首页效果
2015/10/16 Javascript
浅谈js原生拖放
2016/11/21 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
Bootstrap面板使用方法
2017/01/16 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
2019/06/13 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
python音频处理用到的操作的示例代码
2017/10/27 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
python实现经典排序算法的示例代码
2021/02/07 Python
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
艺术用品:Arteza
2018/11/25 全球购物
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
酒店应聘自荐信
2013/11/09 职场文书
电话销售经理岗位职责
2013/12/07 职场文书
教师演讲稿开场白
2014/08/25 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书
创业计划书之宠物店
2019/09/19 职场文书
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python