2014-10-13 2 views
2

В моем алгоритме мне нужна проверка на ноль.float перечисление в MATLAB

Для этого мне нужен EPSILON.

Как я могу определить его лучше всего?

classdef QR 
    enumeration 
     EPSILON (1e-6) 
    end 

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

Но, я получаю:

В определении перечисления члена 'Эпсилон' в классе 'QR': Слишком много входных аргументов

ответ

2

Конструктор вашего класса переписного получив вызов со значением, которое вы передаете EPSILON. Кроме того, хотя это не требуется в вашем примере кода, я бы, вероятно, разделил определение перечисления от других классов, так как только экземпляры классов перечисления, которые могут быть созданы, фактически созданы в блоке перечисления. Дополнительная информация о том, как перечислены работы here. Кроме того, вместо статических методов для разных QR-алгоритмов вы можете рассмотреть возможность использования strategy pattern. Это будет выглядеть примерно так:

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 
+0

Большое спасибо. – Yola

Смежные вопросы