这是代码清单,我在第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
答案 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
是什么。