从几个类似的代码中制作一个简单的代码

时间:2017-03-09 06:34:12

标签: matlab

大家好,我有一个非常简单的问题,我有太多的数据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]

目标是找到" Coordinate" (在矩阵中 - 从Coordinate1,Coordinate2,Coordinate3,....,Coordinate ..组合)来自每个y,p和r数据与相同的" X0"作为计算的单一主要数据。

抱歉我的英文不好,

谢谢:)

1 个答案:

答案 0 :(得分: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)