我似乎在使用for循环将我创建的矩阵中的值赋值给某个变量时遇到了问题。我使用不同的角度对来创建绘图,我想在for循环中访问这些元素以生成Q1和Q2的值。
代码:
L1=input('Enter the length of Link 1:' );
L2=input('Enter the length of Link 2:' );
i=0:5:180;
j=0:5:180;
[p,q] = meshgrid(i, j);
pairs = [p(:) q(:)];
for k = 1 : size(pairs)
Q1(k)=pairs(k,1);
Q2(k)=pairs(k,2);
PEx(k)=(L1.*cosd(Q1))+(cosd(Q1).*cosd(Q2).*L2);
PEy(k)=(L1.*sind(Q1))+(sind(Q1).*cosd(Q2).*L2);
PEz(k)=(-L2.*sind(Q2));
end
错误: “在作业A(:) = B中,A和B中的元素数必须相同。”
谢谢
答案 0 :(得分:0)
我认为您希望for k = 1:size(pairs,2)
在pairs
中获取行的数量,否则size
将返回[nrows ncols]
。
然后,当您分配到PEx
等时,您使用的是整个Q1
和Q2
向量,而不是最新的元素。而是使用(例如)
PEz(k)=(-L2.*sind(Q2(k)));
然后您的代码变为:
L1=input('Enter the length of Link 1:' );
L2=input('Enter the length of Link 2:' );
i=0:5:180;
j=0:5:180;
[p,q] = meshgrid(i, j);
pairs = [p(:) q(:)];
for k = 1:size(pairs,2)
Q1(k)=pairs(k,1);
Q2(k)=pairs(k,2);
PEx(k)=(L1.*cosd(Q1(k)))+(cosd(Q1(k)).*cosd(Q2(k)).*L2);
PEy(k)=(L1.*sind(Q1(k)))+(sind(Q1(k)).*cosd(Q2(k)).*L2);
PEz(k)=(-L2.*sind(Q2(k)));
end
但是,您可以通过矢量化代码来删除循环:
% Get inputs (you should probs have more validation checks here, maybe use 's' flag)
L1 = input('L1: '); L2 = input('L2: ');
% Set up pairs, avoid i and j as variable names, equal sqrt(-1) by default in MATLAB
ii = 0:5:180;
[p, q] = meshgrid(ii,ii);
% Skip assigning pairs, as it's just used as separate p and q anyway
Q1 = p(:); Q2 = q(:);
% Instead of looping just assign directly. You've already (correctly) used element-wise .*
PEx =(L1.*cosd(Q1))+(cosd(Q1).*cosd(Q2).*L2);
PEy = (L1.*sind(Q1))+(sind(Q1).*cosd(Q2).*L2);
PEz = (-L2.*sind(Q2));
答案 1 :(得分:0)
问题在于:
PEx(k)=(L1.*cosd(Q1))+(cosd(Q1).*cosd(Q2).*L2);
您正在为1x1变量分配1x2。以下PEy
和PEz
也会发生这种情况,因为您正在使用cosd
和sind
并且输出已经是1x2。
也许您必须重新考虑如何存储链接计算的结果,但错误就在那里。