2012-08-03 15 views
6

如何才能聲明/分配一個變量,如果它以前從未分配過?Matlab:初始化變量,如果未定義

語境:

我試圖得到k最大限度地減少k的函數calculateSomeDistance(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是可以的,但仍然不好。

+0

我會在回答中使用'nan' /'isnan()'路線,而不是'exist()' – kevlar1818 2012-08-03 16:01:01

回答

10

您可以檢查是否使用exist一個變量存在:

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

如果你想有變量工作空間中,但在一個不確定的狀態,你可以指定nan(非數字),並檢查與isnan。這與您提出的解決方案類似,值類型明確不會與變量的任何有效值發生衝突。

+1

'isnan'存在一個問題,因爲它只適用於雙數組。如果輸入'isnan({})',將會出現錯誤: '對於'cell'類型的輸入參數,未定義的函數'isnan'。 – 2012-12-14 07:01:39