Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python中的数值微分法计算加速度_Python_Numerical Methods_Differential Equations_Numerical_Differentiation - Fatal编程技术网

用Python中的数值微分法计算加速度

用Python中的数值微分法计算加速度,python,numerical-methods,differential-equations,numerical,differentiation,Python,Numerical Methods,Differential Equations,Numerical,Differentiation,从触针移动测量中,我得到了两个测量值:时间和距离。所以我有两个数组,首先是以毫秒为单位的时间戳数组,然后是一个大小相同的距离测量数组。例如,这两个阵列可能看起来像: distance = [1.4142,1.0000,1,0,1.0000,1.0000,0,0,1.0000,1.0000,0,1.0000,2.0000,2.2361,0,3.0000,3.6056,3.1623,3.1623,0,3.6056,3.1623,3.1623,0,1.4142,2.2361,1.0000,0,0]

从触针移动测量中,我得到了两个测量值:时间和距离。所以我有两个数组,首先是以毫秒为单位的时间戳数组,然后是一个大小相同的距离测量数组。例如,这两个阵列可能看起来像:

distance = [1.4142,1.0000,1,0,1.0000,1.0000,0,0,1.0000,1.0000,0,1.0000,2.0000,2.2361,0,3.0000,3.6056,3.1623,3.1623,0,3.6056,3.1623,3.1623,0,1.4142,2.2361,1.0000,0,0]

timestamps = [1563203.5,1563208,1563210.5,1563213.5,1563218.5,1563223.5,1563226.5,1563229,1563233.5,1563238.5,1563242.5,1563245,1563248.5,1563253.5,1563258,1563260.5,1563263.5,1563268.5,1563273.5,1563276.5,1563279,1563283.5,1563288.5,1563292.5,1563295,1563298.5,1563303.5,1563307,1563317.5]
我想一阶导数给出了速度,二阶导数给出了加速度


我对用数值微分法计算加速度感兴趣。在python中如何实现这一点?

一阶导数可以计算为fx+h-fx-h/2h。这给出了h^2级的估计误差

二阶导数可以计算为fx+h-2fx+fx-h/h^2。这也给出了h^2阶的估计误差

注意:您可以使用fx+h-fx/h或fx-fx-h/h来估计导数,但它们给出的估计误差为h级,大于h^2

我还没有详细研究过你的数据,但是如果你的数据点之间没有一个恒定的h间隔,这些公式就不太适用。在这种情况下,我只需分两步计算加速度:

v(x_i) = (p(x_(i+1) - p(x_(i-1))) / (x_(i+1) - x_(i-1))
a(x_i) = (v(v_(i+1) - v(x_(i-1))) / (x_(i+1) - x_(i-1))

<>你基本上只把你的一阶导数的数据反馈到你的求导算法中,得到二阶导数。

< P>或者由@ SirGuy描述的两阶段微分方案,假设局部恒定加速度,可以考虑连续三点之间的抛物线拟合,

a T0² / 2 + b T0 + c = X0
a T1² / 2 + b T1 + c = X1
a T2² / 2 + b T2 + c = X2
通过两两减法和简化后,可以轻松地消除c

a (T1 + T0) / 2 + b = (X1 - X0) / (T1 - T0) = V01
a (T2 + T1) / 2 + b = (X2 - X1) / (T2 - T1) = V12
最后,

a = 2 (V12 - V01) / (T2 - T0).

如果数据有噪声,您也可以考虑考虑考虑更多的点,并在K点(例如5或7点)上拟合滑动抛物线模型,使中心点两侧的权重减小,以实现平滑。

我假设您想要一个加速度列表?既然deltas1-s2^2/deltas1-t2是加速度,为什么还要求数值微分呢?@ZhouQuan你是说deltas1-s2/deltas1-t2^2?