Matlab 从几个相似的代码中生成一个简单的代码

Matlab 从几个相似的代码中生成一个简单的代码,matlab,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)

大家好,我有一个非常简单的问题,我有太多的数据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]
目标是从每个y、p和r数据中找到“坐标”(在矩阵中-由坐标1、坐标2、坐标3、…、坐标….组合而成),其“X0”与计算的单个原始数据相同

对不起,我的英语不好


谢谢:)

使用向量和矩阵,而不是单个标量。它们的索引方式与以前几乎相同,即
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)

y、p、r
作为数组而不是单个变量。然后,您可以使用for循环来计算
坐标
矩阵。但坐标结果仍然是错误的。如果输入y=45、p=30和r,则应为:
5.447846662126555-1.188204001796331-2.669379847688314
=50@BrianBarito对于这些输入,您的
X0
是什么?对不起,我忘了提到X0。这是主要代码:
X0=[5;-3;3]y=45 p=30 r=50
结果是方法:
X1=[5.920;-0.057;-2.280]
谢谢:)@BrianBarito我的代码和你的代码都返回
X1=[5.9197;-0.0575;-2.5570]
对于这些输入,你为什么期望不同?