2012-08-03 9 views
6

以前に割り当てられたことがない場合にのみ、変数を宣言/割り当てることはできますか?Matlab:定義されていない場合はInit変数

コンテキスト:

私は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 /オクターブ、それのために、後の試験では、変数へのナル/未定義の値を割り当てる方法はありますか?

PS: 非常に大きな数値にminDistanceを初期化するのは、私が探しているものではなく、非常に醜いです。

kiが1のとき(つまり最初のパスで)のminDistanceを初期化することはOKですが、それでもいいとは限りません。あなたは変数がexistを使用して存在しているかどうかを確認することができます

+0

私は、 'exist()'ではなく 'nan' /' isnan() 'ルートに行きます。 – kevlar1818

答えて

10

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

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

+1

' isnan'には問題があります。 'isnan({}) 'と入力すると、エラーが発生します: '未定義の関数' isnan 'は、' cell '型の入力引数です.' –

関連する問題