下标分配尺寸不匹配

时间:2014-03-18 05:46:10

标签: matlab

这是代码清单,我在第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

2 个答案:

答案 0 :(得分:0)

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

您可以在此处为变量步骤指定一个值,然后使用另一个名为 stepsize 的变量,该变量尚未在此代码中的任何位置分配值。这是故意的吗?如果没有,stepsize可能是以前代码中的一些剩余变量,它会弄乱维度并给你这个错误。

除了上述内容之外,代码中的nests是一个普通的二维矩阵吗?如果是这样,每次都不需要size(nests(r,c)) - 因为你给了两个下标,结果只会是1。或者nests也许是一个单元格数组?在这种情况下,您可能希望使用花括号{ }而不是普通的parantheses进行索引,以获得位于单元格内的矩阵的大小。

答案 1 :(得分:0)

将某个维度m x n的值分配给不同维度的下标变量时会发生此错误。

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

根据您在之前评论(stepsize=0.01*step.*(nests(r,c)-best);)中提供的定义,此问题会转换为确保best是标量值。可能通过下标,我无法确切地告诉你,因为我不知道best是什么。