在我的算法中,我需要检查零。
对于这件事,我需要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;:太多了 输入参数
答案 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