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

本文介绍了如何使用Python对离散数据进行多项式拟合和求导,以找到一阶和三阶导数的转折点。通过scipy.optimize.leastsq进行最小二乘拟合,但发现多项式拟合在某些情况下可能不准确,探讨了高斯函数拟合的可能性,但由于无法直接求导,最终仍采用多项式拟合方案。
摘要由CSDN通过智能技术生成

有一组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 r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值