【问题标题】:How do I find exact rest points?如何找到准确的休息点?
【发布时间】:2017-01-03 03:43:19
【问题描述】:

我有一个物体运动的位移和时间数据。

物体在零附近振荡。也就是说,首先 - 它通过少量的力开始运动,然后停止。再一次,施加一点力,物体就会开始运动。

我用

找到了速度和加速度
V= [0 ; diff(disp) ./ diff(times)];
A= [0; diff(V) ./ diff(times)];

我正在考虑找到速度为零的点。但我想这样的例子比需要的要多。找到下图:

速度图

我只对圈子的时间值感兴趣。有没有办法得到这些?

我观察到一个模式

  1. 速度增加然后减少几乎相同的量。
  2. 然后由于摩擦,它越过零的量较小,再次变为负数
  3. 终于停下来了,但仍然存在很小的速度。
  4. 我想要的正是这个归零的接触点。然后再次施加力并重复相同的循环。

请注意,我没有施加暴力的时间。否则没有什么可做的。

另外,我确实绘制了加速度。不过好像没什么用..

我正在使用 matlab。

【问题讨论】:

  • 似乎不仅仅是您在速度经过零处圈出的点。您选择这些点而不是其他点的标准是什么?
  • 对噪声信号进行导数会增加噪声。对于二阶导数等更是如此。您可以尝试使用像 Savitzky-Golayother methods 这样的微分过滤器。

标签: matlab physics motion


【解决方案1】:

这是在网格数据中找到近似零点的一种方法:

% some dummy synthetic data
x  = linspace(0, 10, 1e3);
y  = exp(-0.3*x) .* sin(x) .* cos(pi*x);

% its derivative (presumably your "acceleration")
yp = diff(y) ./ diff(x);

% Plot data to get an overview 
plot(x,y), hold on


% Find zero crossings (product of two consecutive data points is negative)
zero_x = y(1:end-1) .* y(2:end) < 0;

% Use derivative for linear interpolation between those points
x_cross = x(zero_x) + y(zero_x)./yp(zero_x);

% Plot those zeros
plot(x_cross, zeros(size(x_cross)), 'ro')

结果:

然后由你来选择哪些你需要零,因为我无法从问题中理解是什么让圆圈中的这些点如此特别......

【讨论】:

    【解决方案2】:

    您询问的休息点具有以下属性:

    dx / dt = v = 0

    d^2 x / dt^2 = a = 0 # 在物体变为 v = 0 的情况下,对它没有任何作用力。

    因此您可能还需要检查第二个公式来过滤静止点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 2012-02-14
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      相关资源
      最近更新 更多