Matlab 从几个相似的代码中生成一个简单的代码
大家好,我有一个非常简单的问题,我有太多的数据y,p和r。所以我想用一个代码来计算它 如果我分解成单独的代码,这就是我的代码示例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)
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]
对于这些输入,你为什么期望不同?