Matlab - Как выполнять операции над каждой строкой между двумя матрицами? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть две матрицы, каждая из которых содержит два вектора (каждая строка является вектором):

u = [1 0 0; 2 0 0]
v = [1 1 0; 2 2 0]

Я хочу вычислить два угла между векторами соответствующих строк в матрицах (угол между [1 0 0] , [1 1 0] и угол между [2 0 0] , [2 2 0]). В этом примере оба угла будут 45 градусов. Итак, мне нужна новая матрица, подобная этой:

angles = [45; 45]

Когда я попробую это:

u = [1 0 0; 2 0 0]
v = [1 1 0; 2 2 0]
dp = u(:,1) .* v(:,1) + u(:,2) .* v(:,2) + u(:,3) .* v(:,3);
angles = atan2d(norm(cross(u,v)),dp)

Ответ будет:

angles = [76.3670 ; 45.8683]

и когдаЯ пытаюсь это (изменить norm на normr):

u = [1 0 0; 2 0 0]
v = [1 1 0; 2 2 0]
dp = u(:,1) .* v(:,1) + u(:,2) .* v(:,2) + u(:,3) .* v(:,3);
angles = atan2d(norm(crossr(u,v)),dp)

Ответ будет:

angles = [0 0 45.0000 ; 0 0 14.0362]

Как я могу рассчитать угол между векторами каждогострока

1 Ответ

2 голосов
/ 17 октября 2019

Try:

u=[1 0 0;2 0 0];
v = [1 1 0;2 2 0];
atan2(cross(u,v,2),dot(u,v,2)) % radians
atan2d(cross(u,v,2),dot(u,v,2)) % degrees

Функции ,2 в cross и dot задают размер для работы, поскольку вы сохраняете каждый вектор вrow.

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

...