访问矩阵的单元格以在 for 循环 (MATLAB) 中使用



在使用 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等时,您将使用整个Q1Q2向量,而不是最新的元素。而是使用(例如)

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 变量。以下PEyPEz也会发生这种情况,因为您正在对进行cosdsind,并且输出已经是 1x2。

也许您必须重新考虑如何存储链接计算的结果,但错误仍然存在。

相关内容

  • 没有找到相关文章

最新更新