【问题标题】:cross product of multidimensional arrays多维数组的叉积
【发布时间】:2014-12-26 01:59:55
【问题描述】:

我有两个向量 和,每个向量都有三个坐标,大小为80x80x2000。

我想在 MATLAB 中计算每个时刻这两个向量的叉积。我知道我可以在嵌套循环中单独提取坐标,但是否可以避免任何循环? 这是带有循环的示例代码

m1x = cat(3, [1 2; 3 4], [5 6; 7 8]);

m1y = cat(3, [9 10; 11 12], [13 14; 15 16]);

m1z = cat(3, [17 18; 19 20], [21 22; 23 24]);


m2x = cat(3, [5 6; 2 6], [1 3; 7 9]);

m2y = cat(3, [6 7; 3 5], [2 11; 2 6]);

m2z = cat(3, [3 9; 0 1], [4 2; 3 15]);

result_x(2,2,2)=0; result_y(2,2,2)=0; result_z(2,2,2)=0;

for t=1:2
    for i=1:2
        for j=1:2
            a = [m1x(i,j,t); m1y(i,j,t); m1z(i,j,t);];
            b = [m2x(i,j,t); m2y(i,j,t); m2z(i,j,t);];
            c = cross(a,b);

            result_x(i,j,t) = c(1);
            result_y(i,j,t) = c(2);
            result_z(i,j,t) = c(3);
        end;
    end;
end;

所以最后我得到了每个时刻结果向量的三个分量 x、y 和 z

【问题讨论】:

  • 请举一个例子,输入玩具矩阵(2x2x2)和叉积后的预期输出。
  • 我很难理解您想要计算的内容。你能提供一个小的数值例子吗?

标签: matlab multidimensional-array cross-product


【解决方案1】:

例如,如果您有矩阵AB,这样每个矩阵都有 t(时间)行和 3 列(x、y、z)或者如果您可以重塑它们以达到这个配置,你可以使用:

C=cross(A,B);

C 中的每一行 t 将是 AB 中相应行的叉积。示例:

>> A=[rand(2000,1),rand(2000,1),rand(2000,1)];
>> B=[rand(2000,1),rand(2000,1),rand(2000,1)];
>> C=cross(A,B);
>> C(1,:)

ans =

    0.0090   -0.0435    0.0756

>> cross(A(1,:),B(1,:))

ans =

    0.0090   -0.0435    0.0756

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-16
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2019-09-20
    • 2016-07-11
    相关资源
    最近更新 更多