我在 Excel 电子表格中获得了这些数据。所以在导入它之后我会做velocity = cumtrapz(t,y)
然后position = cumtrapz(velocity)
?
1539 次
1 回答
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。再次使用 Euler forward 作为,
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
于 2014-04-25T11:02:10.830 回答