在使用 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 中的元素数必须相同。">
谢谢
我想你想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));
问题出在分配:
PEx(k)=(L1.*cosd(Q1))+(cosd(Q1).*cosd(Q2).*L2);
您正在将 1x2 分配给 1x1 变量。以下PEy
和PEz
也会发生这种情况,因为您正在对进行cosd
和sind
,并且输出已经是 1x2。
也许您必须重新考虑如何存储链接计算的结果,但错误仍然存在。