我在excel电子表格中获得了这些数据。所以在导入之后我会做velocity = cumtrapz(t,y)
然后position = cumtrapz(velocity)
吗?
如果汽车在零距离处从零开始是正确的。否则你也需要在那里有初始速度。请注意,你在这里真正做的是通过将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。再次使用欧拉前进,
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