Matlab-如何对两个矩阵之间的每一行执行运算?

时间:2019-10-16 23:58:49

标签: matlab vector vectorization angle

我有两个矩阵,每个矩阵包含两个向量(每一行都是一个向量):

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 个答案:

答案 0 :(得分:2)

尝试:

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

crossdot函数中的,2指定要操作的维,因为您将每个向量存储在一行中。

这里有here讨论,还有许多其他计算方法,您可能会发现一种更适合您的特定应用程序的情况。