我在excel电子表格中获得了这些数据。因此,导入后我会velocity = cumtrapz(t,y)
然后position = cumtrapz(velocity)
?
答案 0 :(得分:1)
如果汽车在距离零处从零开始是正确的。否则你也需要在那里有初始速度。请注意,您在此处所做的是通过将a = f(t) = dv/dt
标识为a = d^2s/dt^2
来解决等式v
和进一步ds/dt
。你通过求解常微分方程组来实现它:
a = dv/dt
v = ds/dt
这可以通过几种方式完成。例如,与欧拉前进。
v'(t) = (v(t+h)-v(t))/h
<=> v(t+h) = hv'(t)+v(t)
其中给出了派生词,这意味着a = a(t)
。迭代初始化为初始条件v(0)
,必须给出。
当你知道v
时,你就去了。再次使用欧拉前进,
s'(t) = (s(t+h)-s(t))/h
<=> s(t+h) = hs'(t)+s(t)
您必须知道初始条件s(0)
。如果v(0) = s(0) = 0
。 Euler forward是一个O(h)算法,但是知道解决微分方程的技巧一步一步地进行转换s'(t) = v(t)
,也可以做得更好。现在任何runge-kutta方法都可供您使用。你使用的方法cumtrapz实际上是一个O(h ^ 2)方法。这比stackoverflow中的自定义理论要多一些,但希望它会有所帮助。对于二阶边值问题,还有一个矩阵解决方案,称为有限差分法,但是这个问题稍微先进一些。如需进一步阅读,请从
http://en.wikipedia.org/wiki/Numerical_methods_for_ordinary_differential_equations