我想计算点集中每个点(第一个和最后一个点除外)的二阶导数。该点集具有字典的数据类型,类似于points = {x1:y1, x2:y2, ... xn:yn}
,其中所有的x
都是正整数,但间隔不均匀,例如x1=1, x2=2, x3=3, x4=5, x5=7
,x
数不是线性增加的,间隔可以是随机的,即x_{i+1} - x_{i}
可以是任何正整数
对于这个点字典,我想得到每个点的二阶导数,所以我做了如下编码:
import numpy as np
from scipy.misc import derivative
def wrapper(x):
return np.array([points[int(i)] for i in x])
y_d2 = derivative(wrapper, np.array(list(points.keys()))[1:-1], dx=1.0, n=2)
在本例中,我将在return np.array([points[int(i)] for i in x])
处获得KeyError: 4
。这是因为x=4
在点字典中不存在,因此它有一个键错误。在这种情况下,我如何使用scipy.misc.derivative?如何为scipy.misc.derivative
设置dx
参数(间距)
您必须使用scipy.misc.derivative吗?因为计算二阶导数很容易,没有
假设您将数据作为字典:
然后,您所要做的就是首先将它们放入x,y列表中:
然后使用numpy diff计算derivs
d2y_dx2
的输出为正如所料
当然,如果你想对导数使用更高精度的公式,还有更复杂的版本,例如你可以从x,y中创建一条样条曲线,并计算样条曲线的导数。但我会从上面的基本方案开始,除非有其他令人信服的理由
相关问题 更多 >
编程相关推荐