在MATLAB中浮点枚举

时间:2014-10-13 18:07:41

标签: matlab enums floating-point

在我的算法中,我需要检查零。

对于这件事,我需要EPSILON。

我怎样才能最好地定义它?

classdef QR
    enumeration 
        EPSILON (1e-6)
    end

    methods (Static)
        function [Q, R] = Classical(A)
            ...
                if R(c, c) < EPSILON
            ...
        end
    end
end

但是,我明白了:

  

在枚举成员的定义中&#39; EPSILON&#39;在课堂上&#39; QR&#39;:太多了   输入参数

1 个答案:

答案 0 :(得分:2)

使用传递给EPSILON的值调用枚举类的构造函数。此外,虽然您的示例代码不需要,但我可能会将枚举定义与其他类分开,因为可以创建的枚举类的唯一实例实际上是在枚举块中创建的。有关枚举如何工作的更多信息here。此外,您可能需要考虑使用strategy pattern,而不是针对不同QR算法的静态方法。这看起来像是:

NamedValues.m

classdef NamedValues < double
    enumeration 
        EPSILON (1e-6)
    end
end

ClassicalStrategy.m

classdef ClassicalQRStrategy
    methods
        function [Q, R] = compute(strategy, A)
            ...
                if R(c, c) < NamedValues.EPSILON
            ...
        end
    end
end

QR.m

classdef QRAlgorithm
    properties
        Strategy
    end
    methods
        function algorithm = QRAlgorithm(strategy)
            algorithm.Strategy = strategy;
        end
        function [Q, R] = compute(algorithm, A)
            [Q, R] = algorithm.Strategy.compute(A);
        end
    end
end