【问题标题】:Assignment has more non-singleton rhs dimensions than non-singleton subscripts error赋值的非单例右轴维度比非单例下标错误多
【发布时间】:2016-04-17 23:08:35
【问题描述】:
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

当我运行此代码时,似乎:“分配的非单件右轴维度比非单件下标多”。错误从行开始

  • BEXC(i,j,k,1) = i*0+j*0+(0.5+(k-1))*BE2A*cos(BETA/180*pi)

【问题讨论】:

  • 错误信息是不言自明的。 BEXC(i,j,k,1) 是一个索引,i*0+j*0+(0.5+(k-1))*BE2A*cos(BETA/180*pi) 返回多个数字。

标签: matlab multidimensional-array


【解决方案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。

【讨论】:

    【解决方案2】:

    让我们来看看这个:

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

      一个。查看cosd()sind()

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

    然后转到您的问题。在以下两行中,您将值BE2A 分配给BE2A(i,j,k,1)BE2A(i,j,k,2)。通过这样做,您将创建一个大小为[i, j, k, 2] 的矩阵BE2A(注意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) 显然是一个数字,这你有一个不匹配。

    我假设在这个循环中还有很多事情要做。如果仅此而已,那么有很多方法可以改进它:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多