6

以前に割り当てられたことがない場合にのみ、変数を宣言/割り当てるにはどうすればよいですか?

コンテクスト:

kの関数calculateSomeDistance(k)を最小化するkを見つけようとしています。最小距離と対応するk値は、後で使用できるように(つまり、スコープ内で)使用できる必要があります。minDistanceを宣言して、現在計算されている距離と比較する前に、すでに初期化されているかどうかを確認するにはどうすればよいですか?

% How should I declare minDistance?
minDistance=undefined; % Doesn't exist.
for ki=1:K,
  distance=calculateSomeDistance(ki);
  if(isUndefined(minDistance) || distance < minDistance)
    minDistance = distance;
    minK = ki;
  end
end
% Here minK and minDistance must be in scope

最初の有効な割り当てを行うために、MATLAB / Octaveの変数にnull/未定義の値を割り当て、後でそれをテストする方法はありますか?

PS:minDistanceを非常に大きな数に初期化することは非常に醜く、私が探しているものではありません。

kiが1のとき(つまり、最初のパスで)minDistanceを初期化することは問題ありませんが、それでもうまくいきません。

4

1 に答える 1

10

変数が存在するかどうかは、exist:を使用して確認できます。

if ~exist('minDistance','var')
    minDistance = initValue;
end

変数をワークスペースに存在させたいが、未定義の状態にしたい場合は、nan(番号ではなく)割り当てて、それを確認できisnanます。これは、変数の有効な値と明示的に競合しない値型を使用して、提案したソリューションに似ています。

于 2012-08-03T15:22:36.557 に答える