两种看似有效的计算速度的方法得出了不同的答案

use*_*377 1 matlab physics kinematics

我试图根据X和Y坐标的向量计算物体的速度.最初,我使用了两个分量速度,然后使用毕达哥拉斯定理将它们加在一起.mdcx并且mdcy分别是x和y坐标的矢量.

for i=2:length(mdcx)
    xdif(i)=mdcx(i-1)-mdcx(i);
end

xvel=(xdif/(1/60));

for i=2:length(mdcy)
    ydif(i)=mdcy(i-1)-mdcy(i);
end

yvel=(ydif/(1/60));

v=hypot(xvel,yvel);
Run Code Online (Sandbox Code Playgroud)

一位朋友提到这是多么愚蠢,我意识到有更好的方法:

d = hypot(mdcx,mdcy);

for i = 2:length(d)
    v(i,1) = d(i)-d(i-1);
end

v = v/(1/60);
Run Code Online (Sandbox Code Playgroud)

这一切都很好,除了两种方法得到不同的答案,我无法弄清楚为什么.方法编号的结果示例.1是:

  • 3.39676316513232
  • 1.69387130561921
  • 1.21490740387897
  • 1.40071410359145
  • 0.702281994643187
  • 1.02703456611744
  • 0.933380951166206

和方法编号的等效部分.2:

  • 3.00324976888577
  • 1.41904819171419
  • 0.473028796076438
  • 0.772429851826608
  • 0.126083801997687
  • 1.02574816428026
  • 0.541889676174012

我的问题

我在这做错了什么?为什么这些结果不一样?这可能是一个愚蠢的错误,但我似乎无法弄清楚它的来源.我使用hypot得当吗?

提前致谢!

Lui*_*ndo 5

正确的方法是第一个.速度是一个向量,因此您必须计算其x,y分量,然后 获得该向量的大小.

使用第二种方法,您将减去距离的大小,这是不正确的.例如,围绕坐标原点的圆周运动会给你零速度,这是错误的.

总结一下:你正在处理向量.做矢量减法,并且只在最后你采取幅度.差异的大小与大小的差异不同.

顺便说一句,你可以使用第一种方法进行矢量化diff(注意,这不会像你的方法那样在结果中给出初始零):

v = hypot(diff(mdcx), diff(mdcy))*60;
Run Code Online (Sandbox Code Playgroud)