我需要从积分速度$ v $获得位置$ x $。可以将一阶Euler积分用作

$ x_ {t + 1} = x_t + \ delta * v_t。$

但是,这样做会导致与采样成比例的误差时间$ \ delta $。您知道更准确的解决方案吗?

评论

如果您拥有的所有知识都是离散v样本,那么您将无能为力。在积分之前(例如线性地)对速度进行插值可能会更好一些(它反映了v不能瞬时变化的假设)。更一般而言,如果速度信号受带宽限制并且采样速度足够快,则应该能够准确地从中获取位置x。

#1 楼

集成ODE的最常用技术之一是使用Runge-Kutta方法(其中Euler集成只是一种特例)。但是,由于时间离散,这些只会改善错误。如果您担心$ \ delta $中的噪声引起的错误,那么我不知道有任何更好的方法。

添加示例

对于RK4,并使用动力学$ \ dot {x}(t)= v(t)$,其中速度不取决于状态,您有
$$
\开始{align}
k_1&= v(t)
\\ << /> k_2&= v \ left(t + \ frac {\ delta} {2} \ right)
\\
k_3&= v \ left(t + \ frac {\ delta} {2} \ right)
\\
k_4& = v \ left(t + \ delta \ right)
\\
x(t + \ delta)&= x(t)+ \ frac {h} {6}(k_1 + 2 k_2 + 2 k_3 + k_4)
\ end {align}
$$

如果您有权使用$ v(t + \ frac {\ delta} {2})$,则可以Euler集成方面的改进。如果不是,您可以通过假设$ v(t + \ frac {\ delta} {2})= \ frac {v(t)+ v(t + \ delta)} {2} $来获得一些改进。

其他选项-卡尔曼滤波器

对于这样一个简单的系统,另一种选择是使用卡尔曼滤波器。如果您只能访问$ v(t)$和$ v(t + \ delta)$(没有中间信息),则可能会更好。

评论


$ \ begingroup $
但是Runge-Kutta需要像\ dot {x} = f(x)这样的函数来对函数进行明确的了解,这在我的场景中是无法满足的。我们只有速度的量度:v0,v1 ... vt等
$ \ endgroup $
–快递
2014年6月24日14:34

$ \ begingroup $
与Euler集成相同。在两种情况下,您的函数都是$ \ dot {x}(t)= v(t)$
$ \ endgroup $
–ryan0270
2014年6月24日14:40在

$ \ begingroup $
那么,如何计算RK的$ k_2 = f(y_n + \ frac {h} {2} k_1)$?
$ \ endgroup $
–快递
2014年6月24日15:03

$ \ begingroup $
我编辑了答案。另外,我只记得在您的情况下可以选择使用Kalman滤波器。
$ \ endgroup $
–ryan0270
14年6月24日在15:29

$ \ begingroup $
谢谢ryan0270。因此,由于我无法访问$ f(t + \ frac {\ delta} {j})$,因此我需要近似RK。
$ \ endgroup $
–快递
2014年6月24日15:36