Два, казалось бы, верных метода расчета скорости дают разные ответы.

Я пытаюсь рассчитать скорость объекта на основе векторов его координат 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);

Друг упомянул, насколько это глупо, и я понял, что есть гораздо более приятный способ сделать это:

d = hypot(mdcx,mdcy);

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

v = v/(1/60);

Это все хорошо, за исключением того, что два метода дают разные ответы, и я не могу понять, почему. Пример результатов метода №. 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?

Заранее спасибо!


person user3845377    schedule 28.07.2014    source источник
comment
Можете ли вы показать нам свой код для hypot?   -  person David K    schedule 28.07.2014
comment
@DavidK Это функция Matlab   -  person Luis Mendo    schedule 28.07.2014
comment
Вот ссылка на страницу Mathworks   -  person user3845377    schedule 28.07.2014
comment
Что ж, это очистит часть моего кода!   -  person David K    schedule 28.07.2014


Ответы (2)


Правильный метод — первый. Скорость — это вектор, поэтому вам нужно вычислить его компоненты x, y и затем получить величину этого вектор.

При втором методе вы вычитаете величины расстояний, а это неправильно. Например, при круговом движении вокруг начала координат скорость равна нулю, что неверно.

Подводя итог: вы имеете дело с векторами. Выполните вычитание вектора и только в конце получите величину. Величина разницы — это не то же самое, что разница величин.

Кстати, вы можете векторизировать первый метод, используя diff (обратите внимание, что это не даст начальный ноль в результате, как ваш метод):

v = hypot(diff(mdcx), diff(mdcy))*60;
person Luis Mendo    schedule 28.07.2014
comment
Спасибо за быстрый и четкий ответ! На уроке физики в старшей школе у ​​меня сложилось впечатление, что скорость = смещение/время, и теперь я вижу, что в этом случае возникнут проблемы. - person user3845377; 28.07.2014
comment
Это правильно в смысле вектора. Просто помните, что вы имеете дело с векторами, поэтому смещение должно быть вычислено путем вычитания векторов позиций. - person Luis Mendo; 28.07.2014

В первом случае вы вычисляете длину разности сегментов позиций. Во втором вы вычисляете разницу «длин» позиций.

Другими словами, если вам даны 3 точки A, B и C, первый метод вычисляет разницу длины AB и длины BC. Однако второй метод вычисляет разницу длин A, B и C.

Первый метод правильный; второй метод использует «длину» позиции, которая на самом деле не является допустимой/полезной цифрой.

person Drew McGowen    schedule 28.07.2014