赋值具有比非单例下标错误更多的非单例rhs维度

时间:2016-04-17 23:08:35

标签: matlab multidimensional-array

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)

2 个答案:

答案 0 :(得分:1)

让我们来看看:

  1. 我假设BETA发生了变化,但为了清楚起见,您已将其删除了。如果不是,则BETA始终为0,因此您可以分别用cos(BETA/180*pi)sin(BETA/180*pi)替换10

    一个。查看cosd()sind()

  2. 您将很多项乘以零。为了清楚起见,请跳过这些。

  3. 然后解决你的问题。在以下两行中,您将值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)显然是一个数字,这是一个不匹配。

    我假设在这个循环中还有很多事情要做。如果这就是全部,那么有很多方法可以改进它:

答案 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。