是否可以在Matlab中为下标提供默认值?

时间:2009-08-13 14:23:05

标签: matlab default-value

在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)的特殊情况,但我想知道更常用的方法。

2 个答案:

答案 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