2015-02-17 18 views
0

Я пытаюсь определить, находится ли движение двух объектов «в фазе» или противоположно друг другу. Таким образом, в основном у меня есть два вектора R1, R2 в R^3, и я хочу знать, «указывают ли они в одном направлении».Корреляция между двумя векторами против угла между векторами

Я могу придумать два способа вычислить это: a) Рассчитать угол между двумя векторами. Угол указывает их выравнивание. b) Рассчитать коэффициент корреляции между двумя векторами. (например, с помощью функции corr-функции Matlab) 1 означает, что они параллельны, -1 антипараллельны. Если они перпендикулярны, я получаю либо плюс, либо минус 0,5, что кажется неправильным.

Есть ли разница в использовании двух методологий? Я чувствую, что эти два метода должны быть одинаковыми, но я не уверен. У кого-нибудь есть некоторые идеи и какие могут быть потенциальные различия/преимущества методов? Спасибо!

+0

Корреляция связана с косинусом угла, подробности см. В [this] (http://www.the-idea-shop.com/article/221/a-more-elegant-view-of-the -коэффициент корреляции). – Arpi

ответ

0

Это проще всего сделать, вычислив точечный продукт между двумя нормализованными векторами. Обратный косинус непосредственно определяет угол между векторами.

У Matlab отсутствует функция "corr". Он имеет «xcorr». Кросс-корреляция между двумя 3-х элементными векторами представляет собой 5-элементный вектор. Средний элемент такой же, как и точечный продукт, так что это в основном тот же расчет.

+0

Matlab имеет функцию 'corr' в Statistcs Toolbox. Он возвращает коэффициент корреляции (линейный или ранжированный). – mmagnuski

+0

Извините, если мой вопрос звучит глупо, но какой из пяти элементов xcorr я должен рассмотреть? Только средний элемент? У меня возникает соблазн использовать угол между векторами, поскольку это кажется более интуитивной мерой корреляции. – Thomas

Смежные вопросы