2012-08-03 9 views
6

Wie kann ich eine Variable nur dann deklarieren/zuweisen, wenn sie vorher noch nie zugewiesen wurde?Matlab: Init Variable wenn undefined

Kontext:

Ich versuche, k zu finden, die eine Funktion calculateSomeDistance (k) von k minimiert. Der Mindestabstand und der entsprechende k-Wert sollten zur späteren Verwendung verfügbar sein (dh im Umfang). Wie soll ich minDistance deklarieren, damit ich prüfen kann, ob es bereits initialisiert wurde, bevor es mit der aktuell berechneten Distanz verglichen wird?

% 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 

Gibt es eine Möglichkeit, einen null/undefinierten Wert einer Variablen in Matlab/Oktave und später Test für es zuweisen, um die erste gültige Zuordnung zu machen?

PS: Initializing MinDistance zu einer sehr großen Anzahl ist sehr hässlich, und nicht das, was ich suche.

Initialisierung der minDistance, wenn ki 1 ist (dh im ersten Durchgang) ist in Ordnung, aber immer noch nicht nett.

+0

Ich würde die 'nan' /' isnan() 'Route in der Antwort gehen, anstatt' exist() ' – kevlar1818

Antwort

10

Sie können überprüfen, ob eine Variable exist mit existiert:

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

Wenn Sie die Variable im Arbeitsbereich existiert haben wollen, aber in einem undefinierten Zustand, können Sie nan (keine Zahl) und Scheck zuweisen dafür mit isnan. Dies entspricht der von Ihnen vorgeschlagenen Lösung, bei der ein Werttyp explizit nicht mit gültigen Werten der Variablen in Konflikt steht.

+1

Es gibt ein Problem mit' Isnan', weil es nur für Doppel-Arrays funktioniert. Wenn Sie 'isnan ({})' eingeben, tritt ein Fehler auf: 'Undefinierte Funktion 'isnan' für Eingabeargumente vom Typ 'Zelle' –