Matlab: 如果变量未定义,如何初始化变量

6

如果以前从未分配过变量,我该如何声明/赋值变量?

背景:

我正在尝试找到最小化函数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中给变量赋空/未定义值,并且以后测试它以便进行第一次有效分配?
PS:将minDistance初始化为非常大的数值很丑陋,并且不是我想要的。
当ki为1(即第一次通过)时,初始化minDistance是可以的,但仍然不太好。

我会选择答案中的 nan/isnan() 方法,而不是使用 exist() - kevlar1818
1个回答

10
你可以使用 exist 来检查变量是否存在:
if ~exist('minDistance','var')
    minDistance = initValue;
end

如果你想让变量存在于工作区中,但是处于未定义状态,你可以赋值nan(不是一个数字),并使用isnan来检查。这与您提出的解决方案类似,只不过值类型明确不会与变量的任何有效值冲突。


1
isnan存在问题,因为它仅适用于双精度数组。如果您键入isnan({}),将会出现以下错误信息: Undefined function 'isnan' for input arguments of type 'cell'. - Evgeni Sergeev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接