2012-08-03 68 views
6

¿Cómo puedo declarar/asignar una variable solo si nunca se ha asignado antes?Matlab: variable Init si no está definida

Contexto:

Estoy tratando de encontrar k que minimiza una función calculateSomeDistance (k) de k. La distancia mínima y el valor k correspondiente deben estar disponibles (es decir, en el alcance) para su uso posterior. ¿Cómo debo declarar minDistance para poder verificar si ya se ha inicializado antes de compararlo con la distancia calculada actualmente?

% 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 

¿Hay una manera de asignar un valor nulo/valor indefinido a una variable en Matlab/octava y más tarde la prueba de que con el fin de hacer la primera asignación válida?

PS: Inicializar minDistance a un número muy grande es muy feo, y no es lo que estoy buscando.

Inicializando minDistance cuando ki es 1 (es decir, en la primera pasada) está bien, pero aún no es agradable.

+0

Iría por la ruta 'nan' /' isnan() 'en la respuesta, en lugar de' existir() ' – kevlar1818

Respuesta

10

Puede comprobar si existe una variable usando exist:

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

Si usted quiere tener la variable existe en el espacio de trabajo, pero en un estado indefinido, puede asignar nan (no un número) y cheque para eso con isnan. Esto sería similar a la solución que ha propuesto, con un tipo de valor que explícitamente no entrará en conflicto con ningún valor válido de la variable.

+1

Hay un problema con' isnan', ya que solo funciona con matrices dobles. Si escribe 'isnan ({})', habrá un error: 'Función no definida 'isnan' para los argumentos de entrada del tipo 'celda'. –

Cuestiones relacionadas