在MATLAB中使用减号时出错

时间:2013-06-04 16:18:16

标签: matlab matlab-struct

temp(i,1) = rand(1)*(pb(1,num).pos(i,1) - pw(1,num).pos(i,1));

此行给出以下错误:

Error using ==> minus
Not enough input arguments.

以下是pbpw的定义。

pw=struct('fitness',[],'pos',{});
pb=struct('fitness',[],'pos',{});

pos是一个2 x 1数组。

4 个答案:

答案 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));