BE2A = 2*0.3048;
BE2B = 2*0.3048;
BETA = 0;
for i = 1:50
for j = 1:i
for k = 1:(i+1-j)
% 1st quadrant
BEXC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A*cos(BETA/180*pi);
BEYC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A*sin(BETA/180*pi);
BEZC(i,j,k,1) = i*0+(0.5+(j-1))*BE2B+k*0;
BE2A(i,j,k,1) = BE2A+i*0+j*0+k*0;
BE2B(i,j,k,1) = BE2B+i*0+j*0+k*0;
ANGLE(i,j,k,1) = BETA+i*0+j*0+k*0;
% 2nd quadrant
BEXC(i,j,k,2) = i*0+j*0-(0.5+(k-1))*BE2A*cos(BETA/180*pi);
BEYC(i,j,k,2) = i*0+j*0-(0.5+(k-1))*BE2A*sin(BETA/180*pi);
BEZC(i,j,k,2) = i*0+(0.5+(j-1))*BE2B+k*0;
BE2A(i,j,k,2) = BE2A+i*0+j*0+k*0;
BE2B(i,j,k,2) = BE2B+i*0+j*0+k*0;
ANGLE(i,j,k,2) = BETA+i*0+j*0+k*0;
end
end
end
当我运行此代码时,似乎:“赋值具有比非单例下标更多的非单例rhs维度”。错误从
行开始BEXC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A*cos(BETA/180*pi)
”答案 0 :(得分:1)
让我们来看看:
我假设BETA
发生了变化,但为了清楚起见,您已将其删除了。如果不是,则BETA
始终为0
,因此您可以分别用cos(BETA/180*pi)
和sin(BETA/180*pi)
替换1
和0
。
您将很多项乘以零。为了清楚起见,请跳过这些。
然后解决你的问题。在以下两行中,您将值BE2A
分配给BE2A(i,j,k,1)
和BE2A(i,j,k,2)
。通过这样做,您创建了一个大小为BE2A
的矩阵[i, j, k, 2]
(请注意2
)。
BE2A(i,j,k,1) = BE2A+i*0+j*0+k*0;
BE2A(i,j,k,2) = BE2A+i*0+j*0+k*0;
在下一次迭代k = 2
中,您有:
BEXC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A*cos(BETA/180*pi);
现在,BE2A
是尺寸为[1, 1, 1, 2]
的矩阵。您将此术语乘以一堆标量,从而以矩阵结束,而不是单个数字。索引BEXC(i,j,k,1)
显然是一个数字,这是一个不匹配。
我假设在这个循环中还有很多事情要做。如果这就是全部,那么有很多方法可以改进它:
i
and j
as variable names 答案 1 :(得分:1)
BE2A0 = 2*0.3048;
BE2B0 = 2*0.3048;
BETA0 = 0;
for i = 1:50
for j = 1:i
for k = 1:(i+1-j)
% 1st quadrant
BEXC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A0*cos(BETA0/180*pi);
BEYC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A0*sin(BETA0/180*pi);
BEZC(i,j,k,1) = i*0+(0.5+(j-1))*BE2B0+k*0;
BE2A(i,j,k,1) = BE2A0+i*0+j*0+k*0;
BE2B(i,j,k,1) = BE2B0+i*0+j*0+k*0;
ANGLE(i,j,k,1) = BETA0+i*0+j*0+k*0;
% 2nd quadrant
BEXC(i,j,k,2) = i*0+j*0-(0.5+(k-1))*BE2A0*cos(BETA0/180*pi);
BEYC(i,j,k,2) = i*0+j*0-(0.5+(k-1))*BE2A0*sin(BETA0/180*pi);
BEZC(i,j,k,2) = i*0+(0.5+(j-1))*BE2B0+k*0;
BE2A(i,j,k,2) = BE2A0+i*0+j*0+k*0;
BE2B(i,j,k,2) = BE2B0+i*0+j*0+k*0;
ANGLE(i,j,k,2) = BETA0+i*0+j*0+k*0;
end
end
end
请将BE2A更改为BE2A0; BE2B为BE2B0; BETA为BETA0。