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数组。
答案 0 :(得分:1)
当追踪这样的错误时,我将问题分解成更小的位。特别是当逻辑不明显时。它不仅提供了一个可用于使用调试器逐步执行函数的路径,而且还使其更具可读性。
我对中间变量名称采取了自由。
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都是数字。
答案 1 :(得分:1)
当num
为空矩阵时,您可以获得此错误的一种方法。
答案 2 :(得分:1)
表达式
>> s(x).a
可以返回可变数量的输出,具体取决于x
的大小。
例如,如果x = [1,2,3]
,它将返回三个值(只要s
至少有三个元素)。
另一方面如果x = []
,则s(x).a
将不返回任何输出,因此表达式
>> disp(s(x).a)
会给你一个Not enough input arguments
错误,这几乎肯定是你所看到的。您应该检查num
是否为空。
答案 3 :(得分:0)
您确定,所有值都已初始化吗?尝试在代码行之前检查一下。
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));