繁体   English   中英

下标分配尺寸不匹配

[英]Subscripted assignment dimension mismatch

这是代码清单,我在行nests(r,c)=nests(r,c)+stepsize.*randn(size(nests(r,c)));遇到了上述错误nests(r,c)=nests(r,c)+stepsize.*randn(size(nests(r,c))); 现在请让我看看我的代码是什么对我来说是Matlab的新问题

    for r = 1:numb_of_nest % for each particle

      for c = 1:4
         u=randn(size(nests(r,c)))*sigma;
         v=randn(size(nests(r,c)));
         step=u./abs(v).^(1/beta);
         nests(r,c)=nests(r,c)+stepsize.*randn(size(nests(r,c)));

        % Apply simple bounds/limits
        ns_tmp=nests(r,c);
        I=ns_tmp<Lb(c);
        ns_tmp(I)=Lb(I);

        % Apply the upper bounds 
        J=ns_tmp>Ub(c);
        ns_tmp(J)=Ub(J);
        % Update this new move 
        nests(r,c)=ns_tmp;

         end
     end
     step=u./abs(v).^(1/beta);
     nests(r,c)=nests(r,c)+stepsize.*randn(size(nests(r,c)));

在这里,您为变量step分配了一个值,但是随后使用了另一个名为stepsize的变量,该变量在此代码的任何地方都没有分配值。 这是故意的吗? 如果没有,stepssize可能是先前代码中的一些剩余变量,这会弄乱尺寸并给您带来此错误。

除了上述内容之外,您的代码中是否还nests了一个普通的二维矩阵? 如果是这样,则不必每次都使用size(nests(r,c)) -因为您要给出两个下标,所以结果总是一直为1 还是nests一个细胞阵列? 在这种情况下,您可能希望使用大括号{ }而不是普通的括号进行索引,以获取位于单元格内的矩阵的大小。

当您将某个维度mxn的值分配给不同维度的下标变量时,会发生此错误。

在您的情况下,假设nests没有第三维,则将分配给标量( 1x1 )变量。 仅当您尝试分配的值也是标量时,此方法才有效。 由于您收到错误,所以可能不是。 尺寸可以是非标量的唯一位置是stepsize ,因此要解决此错误,请确保stepsize是标量值

根据您在较早的注释中给出的定义( stepsize=0.01*step.*(nests(r,c)-best); ),此问题转化为确保best是一个标量值 可能是通过下标,由于我不知道什么是best所以我无法确切告诉您如何。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM