在不知道其公式的情况下在python中提取并绘制曲线的一阶导数?
Posted
技术标签:
【中文标题】在不知道其公式的情况下在python中提取并绘制曲线的一阶导数?【英文标题】:Extract and plot the first derivative of a curve in python without knowing its formula? 【发布时间】:2021-10-30 04:01:39 【问题描述】:我有一条从数据框中绘制的曲线,我想提取曲线的一阶导数,但我实际上并不知道它的公式。得到一阶导数后,我想提取它达到最大值一半的点。
这可以在 python 中实现吗?
X y
0 -0.000131 0.006983
1 0.013764 0.006666
2 0.028727 0.007242
3 0.137593 0.007117
4 0.538855 0.007305
5 0.963937 0.008790
6 1.318019 0.011174
7 1.569953 0.012909
8 1.751192 0.016706
9 1.957168 0.020321
10 2.125429 0.028622
11 2.297202 0.035952
12 2.483939 0.046041
13 2.663194 0.056283
14 2.855580 0.068497
15 3.043233 0.082118
16 3.243100 0.097764
17 3.437318 0.111928
18 3.639782 0.129328
19 3.839039 0.145694
20 4.044403 0.163474
21 4.243966 0.182325
22 4.453453 0.200748
23 4.654542 0.218878
24 4.868304 0.238715
25 5.070615 0.254610
26 5.288194 0.272639
27 5.494627 0.287299
28 5.723200 0.303031
29 5.931618 0.315398
30 6.189813 0.316119
31 6.384031 0.328265
32 6.658715 0.327107
33 6.855071 0.333307
34 7.138154 0.331096
35 7.334967 0.338243
36 7.625989 0.335927
37 7.820513 0.343463
38 8.077639 0.339921
39 8.264375 0.349140
40 8.473862 0.344021
41 8.652201 0.349255
42 8.816034 0.346376
43 8.944750 0.345141
44 9.079573 0.344968
45 9.130418 0.344184
46 9.255163 0.342439
47 9.195768 0.345535
48 9.247223 0.344030
49 9.192867 0.345617
50 9.281273 0.337575
【问题讨论】:
你能提供你上面给出的数据框作为可复制的例子吗?类似df = pd.DataFrame(.....
【参考方案1】:
如果您的数据帧足够密集,一种可能的方法是通过numpy polyfit,与poly1.deriv 结合可以直接得到一阶导数。 然后使用polyval,您可以获得您范围内的最大值,最后,使用roots(将一阶导数最大值的一半减去多项式常数项)您正在寻找的值。
关键点是拟合多项式次数的正确选择(检查残差),请记住,超出数据框范围的一切都非常不确定。
【讨论】:
【参考方案2】:您可以使用df.diff().eval('y/X')
计算导数:
ax = df.plot(x='X', y='y')
df = df.assign(derivative=df.diff().eval('y/X'))
df.plot(x='X', y='derivative', ax=ax)
【讨论】:
以上是关于在不知道其公式的情况下在python中提取并绘制曲线的一阶导数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用临时文件的情况下在 python 的 tarfile 中写入大量数据
如何在不使用 Segue 的情况下在单独的 UIViewController 中选择实例变量
如何在不连接它们的情况下在 MapView 上绘制两个 MKPolygons?
想要在不使用 Scikit-Learn 的情况下在 python 中构建支持向量机的真正建议 [关闭]