2017-03-09 6 views
0

こんにちは皆私は非常に単純な問題がある、私はあまりにも多くのデータy、pとrを持っています。ですから私はそれを単一のコードで計算したいと思います。いくつかの類似したコードから1つの簡単なコードを作る

この私のコードの例別コードにI破壊

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つの計算用プライマリデータとして使用します。私の悪い英語のため申し訳ありません

感謝:)

+1

個々の変数の代わりに 'y、p、r'を配列として作成します。そして、forループを使って 'Coordinate'マトリックスを計算することができます。 –

答えて

0

利用ベクトル、代わりに個々のスカラーの行列。これらは以前と同じようにインデックスされます。つまり、y1y(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かかわらず、これらの入力のためのあなたの' X0'は何@BrianBarito = 50 –

+0

? – Wolfie

+0

申し訳ありませんが、私はX0について言及することを忘れています。 [3; -3 5] Y = 45 P = 30 R = 50' 結果はアプローチである 'X0 =:これは、プライマリコードで 'X1 = [5.920、-0.057 ; -2.280] ' ありがとう:) –

関連する問題