2017-03-09 16 views
0

大家好我有一個非常簡單的問題,我有太多的數據y,p和r。所以我想用一個代碼來計算它。從幾個類似的代碼製作一個簡單的代碼

此代碼的我一個例子,如果我分解成不同的代碼

y1=45 
y2=56 
y3=67 
p1=34 
p2=45 
p3=56 
r1=23 
r2=34 
r3=45 
Ryaw1=[cosd(y1) -sind(y1) 0; 
     sind(y1) cosd(y1) 0; 
     0 0 1] 
Rpitch1=[cosd(p1) 0 sind(p1); 
     0 1 0; 
     -sind(p1) 0 cos(p1)] 
Rroll1=[1 0 0; 
     0 cosd(r1) -sind(r1); 
     0 sind(r1) cosd(r1)] 
R1=Ryaw1*Rpitch1*Rroll1 
Coordinate1=R1*X0 
Ryaw2=[cosd(y2) -sind(y2) 0; 
     sind(y2) cosd(y2) 0; 
     0 0 1] 
Rpitch2=[cosd(p2) 0 sind(p2); 
     0 1 0; 
     -sind(p2) 0 cos(p2)] 
Rroll2=[1 0 0; 
     0 cosd(r2) -sind(r2); 
     0 sind(r2) cosd(r2)] 
R2=Ryaw2*Rpitch2*Rroll2 
Coordinate2=R2*X0 
Ryaw3=[cosd(y3) -sind(y3) 0; 
     sind(y3) cosd(y3) 0; 
     0 0 1] 
Rpitch3=[cosd(p3) 0 sind(p3); 
     0 1 0; 
     -sind(p3) 0 cos(p3)] 
Rroll3=[1 0 0; 
     0 cosd(r3) -sind(r3); 
     0 sind(r3) cosd(r3)] 
R3=Ryaw3*Rpitch3*Rroll3 
Coordinate3=R3*X0 
Coordinate=[Cooedinate1 Coordinate2 Coordinate3] 

的目標是要找到「座標」(矩陣 - 從Coordinate1,Coordinate2,Coordinate3結合,....,協調。 )與每個y,p和r數據具有相同的「X0」作爲單個主要數據進行計算。

對不起我的英文不好,

謝謝:)

+1

將'y,p,r'設爲數組而不是單個變量。然後你可以使用for循環來計算'Coordinate'矩陣。 –

回答

0

使用向量和矩陣而非單個標量。這些索引幾乎與以前相同,即y1變爲y(1)

然後,您可以輕鬆地遍歷代碼3次並保存重複。

看到我下面評論的代碼。

% Define some X0. This should be a column vector. 
X0 = [1; 2; 3]; 
% Make y,p,r into 3 element vectors 
y = [45 56 67]; 
p = [34 45 56]; 
r = [23 34 45]; 
% Make R, Ryaw, Rpitch and Rroll 3x3x3 matrices 
R = zeros(3,3,3); 
Ryaw = zeros(3,3,3); 
Rpitch = zeros(3,3,3); 
Rroll = zeros(3,3,3); 
% Make Coordinate a 3x3 matrix 
Coordinate = zeros(3,3); 
% Loop k from 1 to 3 
% For each 3x3x3 matrix, the kth 3x3 matrix is equivalent to your Ryawk, Rpitchk, Rrollk, Rk 
for k = 1:3 
    Ryaw(:,:,k) = [cosd(y(k)) -sind(y(k)) 0 
        sind(y(k)) cosd(y(k)) 0 
        0   0   1]; 

    Rpitch(:,:,k)= [cosd(p(k)) 0   sind(p(k)) 
        0   1   0 
        -sind(p(k)) 0   cos(p(k))]; 

    Rroll(:,:,k) = [1 0   0 
        0 cosd(r(k)) -sind(r(k)) 
        0 sind(r(k)) cosd(r(k))]; 

    R(:,:,k) = Ryaw(:,:,k)*Rpitch(:,:,k)*Rroll(:,:,k); 
    Coordinate(:,k) = R(:,:,k)*X0; 
end 
disp(Coordinate) 
+0

感謝您的幫助,它的工作原理。但是座標結果仍然是錯誤的。它應該是: '5.447846662126555 -1.188204001796331 -2.669379847688314' 如果我輸入y = 45,P = 30和R = 50 –

+0

@BrianBarito什麼是對那些輸入你的'X0'關係嗎? – Wolfie

+0

對不起,我忘了提X0。這是主代碼: 'X0 = [5; -3; 3] Y = 45 P = 30 R = 50' ,其結果是方法: 'X1 = [5.920; -0.057 ; -2.280]' 謝謝:) –