temp(i,1) = rand(1)*(pb(1,num).pos(i,1) - pw(1,num).pos(i,1));
此行给出以下错误:
Error using ==> minus
Not enough input arguments.
以下是 和 的pb
定义pw
。
pw=struct('fitness',[],'pos',{});
pb=struct('fitness',[],'pos',{});
pos
是一个 2 x 1 数组。
temp(i,1) = rand(1)*(pb(1,num).pos(i,1) - pw(1,num).pos(i,1));
此行给出以下错误:
Error using ==> minus
Not enough input arguments.
以下是 和 的pb
定义pw
。
pw=struct('fitness',[],'pos',{});
pb=struct('fitness',[],'pos',{});
pos
是一个 2 x 1 数组。
出现此错误的一种方法是 whennum
是一个空矩阵。
表达方式
>> s(x).a
可以返回可变数量的输出,具体取决于x
.
例如,如果x = [1,2,3]
它会返回三个值(只要s
至少有三个元素)。
x = []
另一方面,如果,则s(x).a
不会返回任何输出,所以表达式
>> disp(s(x).a)
会给你一个Not enough input arguments
错误,这几乎肯定是你所看到的。您应该检查它num
是否为空。
在追踪这样的错误时,我将问题分解为更小的部分。特别是当逻辑不是很明显时。它不仅提供了可用于使用调试器单步执行函数的路径,而且还使其更具可读性。
我随意使用中间变量名称。
thisPb = pb(1,num);
thisPw = pw(1,num);
initialPos= pw.pos(i,1);
finalPos = pb.pos(i,1);
whos initialPos finalPos
temp(i,1) = rand(1) * (finalPos - initialPos);
whos行将打印出这些值。确保 finalPos 和 initialPos 都是数字。
您确定所有值都已真正初始化吗?尝试在您的代码行之前检查这一点。
disp(pb(1,num).pos(i,1))
disp(pw(1,num).pos(i,1))
temp(i,1) = rand(1)*(pb(1,num).pos(i,1) - pw(1,num).pos(i,1));