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

表現

>> s(x).a

のサイズに応じて、可変数の出力を返すことができますx

たとえばx = [1,2,3]、3 つの値を返す場合 (s少なくとも 3 つの要素がある場合)。

一方x = []、 thens(x).aは出力を返さないため、式は

>> disp(s(x).a)

エラーが表示されますNot enough input argumentsが、これはほぼ間違いなく表示されているものです。numが空でないことを確認する必要があります。

于 2013-06-04T21:31:00.160 に答える
1

このエラーが発生する 1 つの方法numは、 が空の行列である場合です。

于 2013-06-04T21:21:36.653 に答える
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 に答える