2014-10-13 5 views
2

제 알고리즘에서 0을 확인해야합니다.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'클래스 'EPSILON'의 정의에서

: 너무 많은 입력 인수

답변

2

당신의 열거 클래스의 생성자는 EPSILON에 전달한 값으로 호출됩니다. 또한 예제 코드에서는 필요하지 않지만 생성할 수있는 열거 클래스의 인스턴스는 열거 블록에서 실제로 생성되므로 열거 정의를 다른 클래스와 분리해야합니다. 열거 형의 작동 방식에 대한 추가 정보 here. 또한 다른 QR 알고리즘에 대한 정적 방법보다는 strategy pattern을 활용하는 것이 좋습니다.

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

가 대단히 감사합니다

NamedValues.m

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

ClassicalStrategy.m :이처럼 보일 것입니다. – Yola