0
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 数组。

4

4 回答 4

1

出现此错误的一种方法是 whennum是一个空矩阵。

于 2013-06-04T21:21:36.653 回答
1

表达方式

>> s(x).a

可以返回可变数量的输出,具体取决于x.

例如,如果x = [1,2,3]它会返回三个值(只要s至少有三个元素)。

x = []另一方面,如果,则s(x).a不会返回任何输出,所以表达式

>> disp(s(x).a)

会给你一个Not enough input arguments错误,这几乎肯定是你所看到的。您应该检查它num是否为空。

于 2013-06-04T21:31:00.160 回答
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 都是数字。

于 2013-06-04T21:01:56.910 回答
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));
于 2013-06-04T16:23:15.943 回答