在Matlab中,当一个人试图访问一个不存在的矩阵元素时,通常会引发错误:
>> month(0)
??? Subscript indices must either be real positive integers or logicals.
我想知道是否存在允许在这种情况下提供默认值的功能。 。E.g,:
>> get_def(month(0), NaN)
ans =
NaN
P.S。我可以解决这个下标(0
)的特殊情况,但我想知道更常用的方法。
答案 0 :(得分:3)
一个优雅的解决方案是创建内置 double MATLAB类的子类并重载 subsref 方法:
classdef myDouble < double
methods
function obj = myDouble(val)
obj = obj@double(val);
end
function val = subsref(obj, S)
try
val = subsref@double(obj, S);
catch
val = NaN;
end
end
end
end
然后您可以按如下方式使用此类:
>> a = myDouble(1:10);
>> a(1:3)
ans =
myDouble
double data:
1 2 3
Methods, Superclasses
>> a('asdsa')
ans =
NaN
>> a({1, 'asdf'})
ans =
NaN
由于子类继承自 double 类,您仍然可以获得 double 类的所有功能以及自定义 myDouble 上课。
查看MATLAB帮助:
答案 1 :(得分:2)
没有内置的MATLAB功能可以做你想要的。您可以使用try-catch块:
>> try a = month(0); catch a = nan; end
>> a
a =
NaN
但是,最好的选择可能是错误检查索引首先,抛出错误或将变量设置为默认值(如果超出范围)。
如果您真的想尝试使用可能为0的索引,则可以编写自己的get_def
函数。这是一种方法:
function value = get_def(vector,index,defaultValue)
try
value = vector(index);
catch
value = defaultValue;
end
end
然后您将以下列方式使用此功能:
>> month = 1:12;
>> get_def(month,0,nan)
ans =
NaN
>> get_def(month,1,nan)
ans =
1