2014-12-26 13 views
0

我有兩個向量m1m2,它們每個都有三個座標ma,它們的大小爲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和所得載體的時間

+2

請給出一個例子,用一個輸入玩具矩陣(2x2x2)和交叉乘積後的預期輸出。 –

+1

我很難理解你想要計算什麼。你能提供一個小數字例子嗎? – rayryeng

回答

1

例如每個時刻的Z,如果你有矩陣AB,例如每一個有T(時間)行3列(X,Y,Z),或者如果你可以重塑它們在該構造到達,則可以使用:

C=cross(A,B); 

一個nd 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